你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

这是F4 HAL库的USART bug?

[复制链接]
酱哒哒 提问时间:2017-3-20 15:35 /
用F4 HAL库的串口发现一个很扯的问题,USART->SR寄存器值初始为0x0000 00C0,如图1所示
图片1.JPG

图 1.USART->SR寄存器初始值


接收到串口数据后,进入串口中断,此时USART->SR寄存器值变为0x0000 00F0,,如图2所示
图片2.JPG

图 2.接收中断后,USART->SR寄存器值





然后单步运行,进入官方HAL_UART_IRQHandler()函数,一进入
USART->SR寄存器值就变为0x0000 00C0,也就是说RXNE位被清除了!!!!如图三所示

图片3.JPG

图3. 刚进入HAL_UART_IRQHandler函数,USART->SR寄存器值


下面附带SR寄存器映射图

图四.JPG

有没有大侠遇到过相似的问题的?具体怎么回事?



收藏 1 评论3 发布时间:2017-3-20 15:35

举报

3个回答
衔胆栖冰 回答时间:2017-3-20 21:31:49
    没有问题,是你读方式不对。首先看状态寄存器 (USART_SR)的初始值,你显示的就不对了。如下图,复位值:0x00C0 0000,而不是0x0000 00c0.
      
    再看中断函数,先读的寄存器的USART_SR_PE 、USART_SR_FE、USART_SR_ORE 、USART_SR_NE位。再读USART_SR_RXNE位,如下图
      
    程序能执行到UART_Receive_IT(huart);语句,说明USART_SR_RXNE位的值是1.
真要观察一个寄存器的值,可以用指针或变量去读取该寄存器的值,而不是依赖编译器的那些便捷窗口。

状态寄存器 (USART_SR)

状态寄存器 (USART_SR)

UART in mode Receiver

UART in mode Receiver
酱哒哒 回答时间:2017-3-21 09:37:50
衔胆栖冰 发表于 2017-3-20 21:31
没有问题,是你读方式不对。首先看状态寄存器 (USART_SR)的初始值,你显示的就不对了。如下图,复位值 ...

你这个文档怕是有错吧,图中SR寄存器有效位明显处于低八位,数据怎么能跑到高八位?
另外,这个读取程序是STM32官方自带的,没做一丝改变。
衔胆栖冰 回答时间:2017-3-21 10:14:18
酱哒哒 发表于 2017-3-21 09:37
你这个文档怕是有错吧,图中SR寄存器有效位明显处于低八位,数据怎么能跑到高八位?
另外,这个读取程序 ...

多说无益

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版