• 资料介绍
  • 在线预览
  • 相关推荐
申请入驻 产业图谱

LAT1361 STM32的USART能否支持9位数据格式话题

2025/03/22
478
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

LAT1361 STM32的USART能否支持9位数据格式话题

504.12 KB

问题描述

有客户反馈,他最近在做一个项目用到 STM32L051 这款单片机。平常的 USART 串口传输是 8 位数据,但是他的项目需要用串口传输 9 位数据。当设置为 8 位数据时,串口响应中断正常。但是,当设置为 9 位数据时,串口就不产生中断了。USART2 的 ISR 寄存器 RXNE 位被置1,RDR 寄存器接收到了数据,就是不产生中断,数据也读不出来。请问是不是 HAL 库函数哪里出了 bug?另外,客户还补充说,使用 STM32CubeMX 进行配置并创建的工程代码。

问题分析

客户表达的意思就是说,他使用 8 位数据格式进行 USART 通信时一切 OK,UART 中断也正常,说明人家对这个模块的使用还是熟悉的。但使用 9 位数据格式时发生异常了。大致意思是说使用 9 位数据格式后数据貌似也收到了,RXNE 也置位了,就是基本的中断没法产生。落脚点就是怀疑 ST 的相关 HAL 库函数是不是有 Bug。

说实话,本人之前也没有使用 USART 的 9 位数据格式做过工程或验证测试。现在客户的重点是怀疑库的 Bug 问题。先打开相应库函数,扫了几眼并未能看出代码有什么不妥的地方。然后,打开手册,看看 L05X 系列芯片的 USART 到底支不支持 9 位数据格式的传输。

问题验证

既然这样,手册明确了芯片的 USART 支持 9 位数据格式。赶紧找一块跟客户同一个系列的开发板 32L053DISCOVERY 做针对性的测试验证。

因为客户使用的是 USART2,所以我开始也是使用 STM32L051 的 USART2 进行测试,巧的是,测试结果似乎不如人意,接收都成问题。结合方才阅读各个系列的手册得知,STM32 系列的 USART 都支持 9bit 数据格式。刚好手边有块 STM32G4 系列的板,任意选了个片上的USART 进行测试,也是采用中断方式进行收发。这次很顺利,收发正常。这个验证可以初步肯定我们的相关库代码是没问题的,因为 HAL 库针对公共功能的代码是一样的。

然后我再回过来基于 32L0538DISCOVERY 开发板进行验证,发现原来是这块开发板上的 USART2 所使用的GPIO 已作他用,有两个跳线焊盘没有连接,所以并没有实际连接到排针上,所以使用前检查一下电路图很重要。这次我干脆就用其兄弟 USART1 来进行测试,这次非常顺利。同时也比较了USART1 和 USART2 的特性,这个地方二者没有差别。断定问题出在客户的配置或应用代码上,我们的库没有问题.

验证演示

相信并不是很多人使用过这个 USART 的 9 位数据通信格式,应用或许有点小众。越是涉及这种相对小众的应用功能,我们在开发过程若遇到不顺时,往往可能怀疑自己用得对不对,或者说这玩意到底能不能用。基于这个想法,我也顺便将 STM32 USART 9 位数据格式基于 HAL 库的实现分享出来,包括中断方式和 DMA 方式。

问题小结

这里基于客户的咨询,将整个验证测试过程整理分享出来,希望给未来首次涉及相关应用的同仁有个参考,并提供强有力的开发信心。

在线预览

相关推荐

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一 家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和 解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需 求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广 泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排 放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏 览意法半导体公司网站:www.st.com.cn