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

这是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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版