在一个秋高气爽的周末了,由于闲着无事,便研究了一下STM32L010F4P6芯片的UART通讯,于是乎马上开搞编写代码:
UART_HandleTypeDef UartHandle;
UartHandle.Instance = USARTx;
UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_ODD;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
if (HAL_UART_Init(&UartHandle) != HAL_OK) {
Error_Handler();
}
我的波特率定义是:9600
字长配置是:UART_WORDLENGTH_8B
停止位是:1位
校验是:ODD
这样配置好之后我便在电脑端的串口调试助手软件中的数据位也是选择8位,但无奈出现乱码现象;于是乎百思不得其解。我以为是我代码配置有问题便一直检查代码,但是无论我怎么检查我都没有发现哪里不妥呀,在这个秋高气爽的周末里我也就没有太多精力去追根问底便去呼呼大睡了去了。一觉美梦醒来已是傍晚时分,这是头脑顿时一想:难道校验位也是属于WordLength里的一位?于是乎便去查阅文档发现:Word Length = 8 Bits (7 data bit + 1 parity bit),果然是这样。
最终乱码的原因真相大白: