历史上的今天
今天是:2025年01月20日(星期一)
2020年01月20日 | STM32L1学习笔记05 串口校验位与数据位的一个坑
2020-01-20 来源:eefocus
引言
今天被一个坑给坑了,难以平静,记录下。
ST的HAL库串口结构体 UART_InitTypeDef 的 WordLength 不单单是指数据位!
ST的HAL库串口结构体 UART_InitTypeDef 的 WordLength 不单单是指数据位!
ST的HAL库串口结构体 UART_InitTypeDef 的 WordLength 不单单是指数据位!
气人的话说三遍!
如果你有用到了奇偶校验的话,一定要在数据位数再加1。血淋淋的教训,浪费了本尊半天的生命,分分钟几百万上下的宝贵时间,居然被这细节给绊倒了!
原因分析
ST的注释有误导嫌疑
uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
This parameter can be a value of @ref UART_Word_Length */
Semtech的串口驱动 uart-board 有不足
是的,作为一个官方库,还没考虑足够多的细节。在这里头就得把WordLength给准备好,一旦有奇偶校验,得给WordLength+1处理。
翻看串口例程
/*##-1- Configure the UART peripheral ######################################*/
/* Put the USART peripheral in the Asynchronous mode (UART Mode) */
/* UART configured as follows:
- Word Length = 8 Bits (7 data bit + 1 parity bit)
- Stop Bit = One Stop bit
- Parity = ODD parity
- BaudRate = 9600 baud
- Hardware flow control disabled (RTS and CTS signals) */
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;
从这个例程注释才发现了端倪!
总结
在STM32中WordLength需要包含数据位数和奇偶校验的位数
如果需要8位数据,无奇偶校验,则WordLength=8
如果需要8位数据,有奇偶校验,则WordLength=9
史海拾趣
|
工程师简历模板 本人概况 姓名:XXX 性别:男 民族:汉 政治面目:团员 学历(学位):学士 专业:工业电器自动化 联系电话:12345678 手机:139000234 联系地址:北京市东城区XX大街10号 邮编:100 ...… 查看全部问答> |
|
导师说要我自己去找。 要求是关于FPGA的,或者DS18b20的文章也可以! 然而我以前收藏的资料中,都觉得不太适合。 因为这论文篇幅不能太长,最好能控制在5页上下。 具有一定可读性,不要全是公式什么的,呵呵! 所以我来求助了!!! 望有 ...… 查看全部问答> |
|
以前公司进了几块天津索思的WT-900型表。现在表有点不准,听别人说900型有工厂模式,可以通过工厂模式来调。 请问各位,有谁知道怎么进入工厂模式?谢谢 … 查看全部问答> |
|
各位朋友我看了几天的资料,我终于下定决心弄一弄我的小lm3s811开发板了,但是遇到了一些问题, 1.我的keil建立工程为什么不显示工程名字呢,我起的工程名为lm3s811可是显示的是这样的 2.即使我不自己建立工程,我把从网上网友分享的文件打开, ...… 查看全部问答> |




