OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3028|回复: 0

stm32f407 hal库 can接收远程帧 bug

[复制链接]

15

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2017-5-20
在线时间
43 小时
发表于 2019-9-16 16:02:00 | 显示全部楼层 |阅读模式
1.所用hal库版本为 STM32Cube_FW_F4_V1.24.1
2.can接收函数在stm32f4xx_hal_can.c文件中,其中需要用到CAN_RxHeaderTypeDef类型的结构体指针变量做参数
企业微信截图_15686143169150.png
3.CAN_RxHeaderTypeDef类型的定义如下,其中有成员变量RTR,这个成员可能的值是CAN_remote_transmission_request所定义的宏:CAN_RTR_DATA和CAN_RTR_REMOTE,他们对应的值分别是
企业微信截图_1568614555845.png     企业微信截图_15686182326748.png
4.在函数中,通过语句读取寄存器的特定位(RIxR寄存器的RTR位),可以判断当前接收的帧是否为远程帧
企业微信截图_15686177228774.png
5.问题就出在上图中划红线的语句,其中CAN_RI0R_RTR是掩码(0x00000002),hcan->Instance->sFIFOMailBox[RxFifo].RIR是读取到的RIxR寄存器的值,这两者按位与之后的结果就是当前RTR位的值,它可能的结果是(0x00000002)和(0x00000000)。
但是因为这里还进行了一个右移操作,那么最终赋值给pHeader->RTR的值只能是0x00000000或者0x00000001。
6.现在,如果我在主程序里像下面这样去判断当前读取的帧是否为远程帧,那显然是要出问题的:
企业微信截图_15686207414399.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-16 11:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表