USART输出乱码
情景复现:
通常我们在配置usart的函数中都会定义USART_BaudRate来定义传输的波特率例如9600,
然后再用,usb转TTL ,在电脑上通过串口助手工具,配置9600来来收数据,但是发现收到的数据乱码,而且会跳变,但是把电脑端改成14400就可以接收正常
问题原因:
在stm32f10x.h 文件中会定义使用外部晶振 HSE_Value
如果你硬件电路上的晶振是12Mhz,但是你配置的的8000000
那么就会导致usart 配置好的波特率 ,出现输出异常,如果这个对的话,看看是否统一接地信号
代码位置:
#if !defined HSE_Value
#ifdef STM32F10X_CL
//#define HSE_Value ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#define HSE_Value ((uint32_t)12000000)
#else
#define HSE_Value ((uint32_t)12000000)// ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_Value */
USART没有波形输出
如果usart函数都配置了,但是示波器检测不到数据输出的波形,那么原因肯定是配置的疏漏
可以检测以下串口初始化的条件,再全局函数查看下,时不时有地方被注释了倒置没有生效
经常忽视有:
初始化函数
USART_Init(USARTx, &USART_InitStructure);
使能函数
USART_Cmd(USARTx, ENABLE);