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

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