-
2019-05-21 09:31:00
这两天在做串口误码率通信的实验的时候,发现串口打印数据会发生第一发个数据丢失的情况,通过查阅资料,具体原因为stm32的usart的sr寄存器的TC为初始为1,导致第一次打印时的第一个数据被覆盖,所以打印不出;现将解决办法总结如下:
(1)直接修改while的等待条件,while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);把TC改为TXE,因为TXE只能硬件清零,在数据写进DR时就置0,数据移出时置1,可以保证数据不会在DR被覆盖;
(2)既然TC位初始为1导致的问题,那么我们在发送每一个字节前把TC置0也可以解决问题,写多一句
USART_ClearFlag(UART4, USART_FLAG_TC);
(3)条件允许情况下,也可以委屈自己一下,在输出字符前面加一没用字符,也可以解决;
(4)在write USART_DR之后,加入一个小延时,让数据发送完毕,应该也能间接排除这个错误。
总结:硬件复位后,串口发送首个数据之前,先读取一下USART_SR,则能够保证首个数据发送时,不出现覆盖的情况。
参考资源如下:
博客园:《stm32用printf函数重定向到串口USART1发现第一个字符没打印出来具体如下:》
链接:http://www.cnblogs.com/god-of-death/p/6893555.html
CSDN:《STM32串口第一个字节丢失问题的分析过程》
链接:https://blog.csdn.net/kevinhg/article/details/40991655
该文章为总结方便自己所用,如有侵权问题,请联系QQ:2596269490进行删除
更多相关内容 -
STM32串口打印
2021-12-14 13:50:03STM32串口打印@[TOC]多串口打印函数
static char USART1_TX_BUF[1024]; void USART1_PRINTF(char *fmt,...) { uint16_t i,len; va_list args; va_start(args,fmt); vsprintf((char *)USART1_TX_BUF,fmt,args); va_end(args); len =strlen((char *)USART1_TX_BUF); for(i=0;i<len;i++) { while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //发送完成中断 USART_SendData(USART1,USART1_TX_BUF[i]); } } int main() { char s0[]="abcdefg\0"; int i=0; while(1) { USART1_PRINTF("%d:%s\r\n",i++,s0); USART1_PRINTF("CTT\r\n"); } }
-
stm32串口2接收数据串口1打印
2016-04-01 15:15:58都在一个main.c里,一次编译就能通过,适合新手,按照注释的引脚无脑接线就能看现象 -
python实现与STM32串口通信
2019-04-29 17:42:53python实现与STM32串口通信,收发数据,安装好串口组件和python IDE即可正常运行代码 -
stm32 光敏电阻 串口打印数据
2019-05-27 11:34:55stm32 利用板子自带的温湿度传感器,通过串口1打印在串口调试工具上。 -
stm32实现串口打印输出
2021-08-31 21:50:42stm32实现串口打印输出 学习内容: 1、串口原理图分析 右上图可以看出: 我们采用USB转串口的形式,进行pc与单片机之间的通信,其中我们运用的芯片为ch340c。 2、实现串口的printf打印 我们串口的要素有波特率,...学习目标:
stm32实现串口打印输出
学习内容:
1、串口原理图分析
右上图可以看出:
我们采用USB转串口的形式,进行pc与单片机之间的通信,其中我们运用的芯片为ch340c。2、实现串口的printf打印
我们串口的要素有波特率,数据位,停止位,校验位,通信的时候需要保持一致。
保存。
stdio 就是指 “standard input & output"(标准输入输出)
所以,源代码中如用到标准输入输出函数时,就要包含这个头文件
我们需要添加头文件#include <stdio.h>
并且添加以下代码:
3、由于stm32cubeIDE默认无float显示,需要自己添加。
按照这个提示修改。
学习产出:
实现串口打印,实现浮点数的输出显示。
-
stm32串口1和串口3数据互通
2018-04-19 15:54:22stm32串口1和串口3数据互通,经测试同时发256字节不丢包 void usart3_init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;... -
STM32CubeMX实现串口打印hello world
2022-02-24 17:01:04硬件:stm32f103c8t6 核心板 软件:STM32CubeMX 软件:keil5 mdk cubeMX配置: 点击 GENERATE CODE 生成代码。然后打开工程 在keil5 mdk: 在文件stm32f1xx_hal_uart.h开头添加代码 #include "stm32f1xx_it.h" ...环境
硬件:stm32f103c8t6 核心板(usb tx接核心板A10,Rx接A09)
软件:STM32CubeMX
软件:keil5 mdk
cubeMX配置:
点击 GENERATE CODE 生成代码。然后打开工程在keil5 mdk:
在文件stm32f1xx_hal_uart.h开头添加代码/* External variables --------------------------------------------------------*/ extern UART_HandleTypeDef huart1; //声明串口 /* USER CODE BEGIN EV */
在文件 main.c中的while循环里添加代码
while (1) { /* USER CODE END WHILE */ HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff); HAL_Delay(1000); //延时1s /* USER CODE BEGIN 3 */ }
编译,将程序烧录或下载进核心板,打开串口助手查看接收到的数据
在增加新功能:实现板载led亮,要在cubeMX配置GPIOUART函数库
HAL_UART_Transmit():串口发送数据,使用超时管理机制 HAL_UART_Receive():串口接收数据,使用超时管理机制 HAL_UART_Transmit_IT():串口中断模式发送 HAL_UART_Receive_IT():串口中断模式接收 HAL_UART_Transmit_DMA():串口DMA模式发送 HAL_UART_Transmit_DMA():串口DMA模式接收
printf重定向办法:
#include "stdio.h" printf("freeRTOS test\r\n"); int fputc(int ch, FILE *f){ HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1,HAL_MAX_DELAY); return ch; } int fgetc(FILE *f){ uint8_t ch; HAL_UART_Receive(&huart1, (uint8_t *)&ch,1,HAL_MAX_DELAY); return ch; }
-
stm32f407通过串口打印读取的温湿度信息
2020-10-06 16:23:28stm32f407探索者开发板,dht11温湿度传感器,通过修改stm32正点原子的代码来实现一个简单的串口打印功能 -
printf()函数重定向到STM32串口输出
2020-08-03 11:33:19最近遇到需要MCU输出数字的问题,而STM32的串口输出的是字符型,最先想到的方法是将整型数据转换为字符型输出,C库函数中提供了相关的函数 。 -
串口打印 温湿度 STM32
2019-03-28 10:21:34串口打印 温湿度 STM32,本人 亲自测试,有效,由于DHT11是单总线芯片,所以采用单总线数据格式,一次通讯时间4ms左右,所以它与STM32单片机连接时,只需用到三根线,分别是VCC、GND以及DATA,DATA用于单片机与DHT11... -
STM32 串口转CAN 代码例程.rar
2019-08-01 16:17:29STM32 串口转CAN 代码例程 含 1.STM32_LED ,2.STM32_USART,3.STM32_USART_LED_CAN500K,等几个例子程序,方便新手入门。 并含有C#上位机程序,,通过UART串口转CAN 发送接收数据。 -
stm32 串口打印函数
2021-03-08 10:13:49STM32 串口打印函数 #include <stdarg.h> #include "main.h" #include "string.h" #include "usart.h" #include "usart_printf.h" #define TXBUF_SIZE_MAX 100 //串口输出 void usart_printf(UART_... -
STM32串口封装源码,可直接调用
2018-12-01 13:33:48STM32工程中可直接调用USART1-UART5,封装好串口中断,接收指针,数据传输稳定可靠无误。 -
STM32串口读取PM2.5传感器数据
2018-10-08 02:05:55通过STM32的串口读取PM2.5传感器的数据,然后打印的串口调试助手 -
STM32CubeMX生成代码如何使用Printf函数向串口打印数据
2022-01-27 20:21:151、在CubeMX里面配置的时候,一定要先配置好串口IO在去选择使能串口功能。一般使用串口1,对应PA9和PA10。 2、在生成的函数里面的usart.h文件里面添加以下的函数: 注意:一定要添加#include "stdio.h"这个头文件... -
STM32 MDK 软件仿真串口打印结构体数据
2020-02-20 20:15:48在MDK纯软件环境下,仿真程序数据运算,观察数据的调用和处理流程,结果。...按步骤给STM32 单片机串口初始化,建立结构体成员,调用结构体成员数据打印数组。 不需要使用单片机IO口情况下软件仿真非常方便。 -
HX711称重模块stm32f4串口打印测量数据.zip
2019-07-02 13:26:00使用库函数编写,平台为STM32F407,串口直接打印出测量数据 -
STM32F103利用串口3接收数据然后串口1打印
2019-05-02 14:30:57利用STM32F103ZET6的串口3接收ESP8266的数据,通过串口1打印出来。 -
stm32串口1串口2 DMA方式收发数据
2014-08-15 22:58:24stm32串口1串口2,DMA方式收发数据。使用定时器定时查询DMA接收到的数据,当串口的数据空闲中断,将数据拷贝到缓冲区,交由其他程序处理。可以接收任意大小的数据包。本方法占用CPU时间极少,尤其是波特率很高时,... -
【STM32 HAL库+STM32CUBEMX】使用usart1打印串口数据
2021-12-22 13:22:551.设置RRC外部时钟 设置高速外部时钟 2.设置DEBUG调试 debug设置成SW 3.设置usart 设置模式为异步通信 比特率115200 起始位8位 停止位1位 没有奇偶...8.1 直接打印串口数据 /* USER CODE BEGIN WHILE */ while (1 -
STM32 两串口通信原理及程序
2020-03-19 04:11:29串口1给串口3发送数据,串口3接收后打印“串口1给串口3发送数据” 串口3给串口1发送数据,串口1接收后打印“串口1给串口3发送数据” 需要将串口3与串口1分别与电脑相连。具体硬件连接照片、硬件连接原理图、全部... -
STM32串口发送数据和接收数据方式总结
2020-12-29 11:30:31这里写目录标题串口发送数据串口接受数据 串口发送数据 1、串口发送数据最直接的方式就是标准调用库函数 。 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); 第一个参数是发送的串口号,第二个参数是... -
STM32串口自定义数据接收协议
2021-09-10 16:20:16最近使用STM32做串口数据收发,遇到了一些问题。折腾了一番,在此记录一下。 -
STM32 串口数据一直打印00的情况
2021-01-22 17:03:27@STM32 串口数据一直发送0x00的情(这里写自定义目录标题) 欢迎使用Markdown编辑器 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录欢迎使用Markdown编辑器前言一、pandas是什么?二、... -
STM32F103串口2自定义printf函数
2019-08-21 10:17:12在STM32F103单片机上实现自定义串口2的printf函数,串口1用系统默认printf函数,串口2自定义函数printf函数,实现和默认printf函数同样的功能。 -
STM32串口绑定printf格式输出
2015-04-05 18:26:44STM32绑定printf格式输出的文档说明, -
STM32F103ZET6 按键串口 发16进制[字符串 或者数据]
2018-08-21 09:38:12使用STM32F103ZET6芯片,编译器:KEIL5 ARM,代码文件是C语言,通过串口1,发送16进制的数据,或者字符。 -
STM32串口打印输出乱码的解决办法
2019-03-17 17:11:48STM32串口打印输出乱码的解决办法 前言 最近在试用uFUN开发板,下载配套的Demo程序,串口数据输出正常,当使用另一个模板工程,调用串口printf调试功能时,输出的却是乱码,最后发现是外部晶振频率不一样。很多STM32... -
STM32 串口乱码
2022-04-07 14:56:35同一个串口调试助手,用正点原子、STM32CubeMX生成的程序发送数据正常。排除串口调试助手问题。 串口配置函数问题?仔细检查过串口配置,GPIO配置,用STM32CubeMX与骄阳程序相互替换,问题仍然存在。 HAL库其它文件...