打印
[STM32F4]

最新CUBEMX的HAL的CAN总线配置接受发送(STM32F412)

[复制链接]
楼主: 焊丝滚成球
手机看帖
扫描二维码
随时随地手机跟帖
41
elsaflower| | 2023-4-9 16:30 | 只看该作者 回帖奖励 |倒序浏览
如何使用can烧写代码               

使用特权

评论回复
42
janewood| | 2023-4-9 16:40 | 只看该作者
STM32 的 HAL 库好用吗  

使用特权

评论回复
43
usysm| | 2023-4-9 16:54 | 只看该作者
STM32CubeMX5.3只能用最新的库吗?

使用特权

评论回复
44
gygp| | 2023-4-9 17:00 | 只看该作者
嵌入式新手学寄存器还是库函数?              

使用特权

评论回复
45
51xlf| | 2023-4-9 17:06 | 只看该作者
使用图形向导生成C初始化代码  

使用特权

评论回复
46
lzmm| | 2023-4-9 17:17 | 只看该作者
STM32CubeMX,是一个图形化的软件配置工具  

使用特权

评论回复
47
Undshing| | 2023-4-11 21:54 | 只看该作者
can总线一直是比较难的

使用特权

评论回复
48
liliang9554| | 2023-7-3 23:13 | 只看该作者
代码量庞大。效率不高。

使用特权

评论回复
49
午夜粪车| | 2023-7-3 23:15 | 只看该作者
最讨厌的了,经常是一个寄存器搞很长名字,一堆结构体。

使用特权

评论回复
50
zhaoxqi| | 2023-7-3 23:16 | 只看该作者
can的回环测试可以就行了

使用特权

评论回复
51
gongche| | 2023-7-3 23:19 | 只看该作者
搞定CAN,好多工作都轻松。

使用特权

评论回复
52
huwr| | 2023-7-3 23:22 | 只看该作者
can总线最少要有2个节点才能正常工作

使用特权

评论回复
53
huanghuac| | 2023-7-3 23:23 | 只看该作者
HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox);

查看接口源码:
      /* Store the Tx mailbox */
      *pTxMailbox = 1U << transmitmailbox;

所以入参的pTxMailbox需要自行定义变量,将地址传入,
HAL_CAN_AddTxMessage(&hcan1,&TxMessage1,TR_BUF,(uint32_t*)CAN_TX_MAILBOX0)的最后一个入参,可能导致错误

使用特权

评论回复
54
happy_10| | 2023-7-3 23:24 | 只看该作者
的确会导致错误。

使用特权

评论回复
55
wenfen| | 2023-7-3 23:25 | 只看该作者
这个资料 貌似很到位!

使用特权

评论回复
56
bqyj| | 2023-7-3 23:27 | 只看该作者
我配置后可以发送数据,但是无法进入接收中断,HAL_Status = HAL_CAN_ActivateNotification(&hcan1,   CAN_IT_RX_FIFO0_MSG_PENDING);返回值是HAL_OK,我用HAL库1.6版本可收可发

使用特权

评论回复
57
zhuhuis| | 2023-7-3 23:28 | 只看该作者
我最近也在使用最新的CAN库,可是会出现HardFaul()里,是由于HAL_CAN_AddTxMeddage()中的
      /* Set up the Id */
      if (pHeader->IDE == CAN_ID_STD)
      {
        hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) |
                                                           pHeader->RTR);
      }
      else
      {
        hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) |
                                                           pHeader->IDE |
                                                           pHeader->RTR);
      }
产生的,但是不明白是为什么

使用特权

评论回复
58
tian111| | 2023-7-3 23:29 | 只看该作者
出现HardFault的问题解决了吗?

使用特权

评论回复
59
songqian17| | 2023-7-3 23:30 | 只看该作者
也是卡死在这里了,只要一发送就卡死在这里,不知是何故,也是按照楼主那样的做的发送! void CAN_TRANSMIT(void)
{                                                
        uint8_t TR_BUF[8]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};

  TxMessage1.DLC=8;                                        //消息的数据长度
  TxMessage1.StdId=0x114;                        //标准标识符
  TxMessage1.ExtId=0x00001314;                //扩展标识符
  TxMessage1.IDE=CAN_ID_STD;                        //CAN_ID_STD使用标准标识符;CAN_ID_EXT 使用扩展标
  TxMessage1.RTR=CAN_RTR_DATA;                //为数据帧

        if(HAL_CAN_AddTxMessage(&hcan,&TxMessage1,TR_BUF,(uint32_t*)CAN_TX_MAILBOX0)!=HAL_OK)
        {
        }
}
发送里经过 if (pHeader->IDE == CAN_ID_STD)
这个卡死在在这里
void HardFault_Handler(void)
{
    while (1)
    {
    }
}

使用特权

评论回复
60
chenho| | 2023-7-3 23:32 | 只看该作者
看楼主用起来很easy的样子。

而我用2个STM32F103C8T6的开发板对发,安装买家的例程可以

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则