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

STM32F407的CAN通信,选择扩展格式发送怎么设置

[复制链接]
陈万垒 提问时间:2016-11-30 15:21 /
RT,现在标准格式能发送,在发送结构体CanTxMsg
  1. typedef struct
  2. {
  3.   uint32_t StdId;  /*!< Specifies the standard identifier.
  4.                         This parameter can be a value between 0 to 0x7FF. */

  5.   uint32_t ExtId;  /*!< Specifies the extended identifier.
  6.                         This parameter can be a value between 0 to 0x1FFFFFFF. */

  7.   uint8_t IDE;     /*!< Specifies the type of identifier for the message that
  8.                         will be transmitted. This parameter can be a value
  9.                         of @ref CAN_identifier_type */

  10.   uint8_t RTR;     /*!< Specifies the type of frame for the message that will
  11.                         be transmitted. This parameter can be a value of
  12.                         @ref CAN_remote_transmission_request */

  13.   uint8_t DLC;     /*!< Specifies the length of the frame that will be
  14.                         transmitted. This parameter can be a value between
  15.                         0 to 8 */

  16.   uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0
  17.                         to 0xFF. */
  18. } CanTxMsg;
复制代码
有一位是IDE,是选择扩展帧还是标准帧发送,但是我把这一位置1了,还是发送的标准帧,请问下其他地方还要设置吗?


收藏 1 评论5 发布时间:2016-11-30 15:21

举报

5个回答
陈万垒 回答时间:2016-11-30 17:12:23
已解决!
官方库发送扩展帧的函数错误,改一下就好了
  1.       hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3U) | \
  2.                                                   hcan->pTxMsg->IDE | \
  3.                                                   hcan->pTxMsg->RTR);
复制代码

手册里是这样写的
位 31:21 STID[10:0]/EXID[28:18]:标准标识符或扩展标识符 (Standard identifier or extended identifier) 标准标识符或扩展标识符的 MSB(取决于 IDE 位的值)。 位 20:3 EXID[17:0]:扩展标识符 (Extended identifier) 扩展标识符的 LSB。
控制器区域网络 (bxCAN) RM0090
636/1284 文档 ID 018909 第 4 版
CAN 邮箱数据长度控制和时间戳寄存器 (CAN_TDTxR) (x=0..2) CAN mailbox data length control and time stamp register
当邮箱未处于空状态时,该寄存器的所有位均为写保护状态。 偏移地址:0x184、0x194、0x1A4 复位值:0xXXXX XXXX
         
         
位 2 IDE:标识符扩展 (Identifier extension) 此位用于定义邮箱中消息的标识符类型。 0:标准标识符。 1:扩展标识符。 位 1 RTR:远程发送请求 (Remote transmission request) 0:数据帧 1:遥控帧 位 0 TXRQ:发送邮箱请求 (Transmit mailbox request) 由软件置 1,用于请求发送相应邮箱的内容。 邮箱变为空后,此位由硬件清零。


所以应该是extid左移3位  , 然后IDE左移两位 , RTR左移一位 再拼一起就OK 了。

妈蛋,浪费我一下午时间。。。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

陈万垒 回答时间:2016-11-30 17:14:44
固件库版本cubef4V1.13.0
leo121_3006061 回答时间:2016-11-30 19:17:29
厉害哦
makc 回答时间:2016-11-30 21:00:55
Snap1.jpg


陈万垒 回答时间:2016-12-1 09:30:53

soga,原来有宏定义,如果用宏定义那就没错

所属标签

相似问题

官网相关资源

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