硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1944|回复: 2
收起左侧

[技术讨论] STM32:HAL_CAN_AddTxMessage()函数,最后一个参数即发送邮箱的传参问题!

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2024-12-1 17:31:42 | 显示全部楼层 |阅读模式
问题:
关于STM32 CAN通信 发送函数 HAL_CAN_AddTxMessage()的最后一个参数填0和定义一个变量取地址的问题,如果直接传0,我实验发现 STM32F103C8T6 会出现卡死的情况,进入了硬件中断,而对于STM32F429IGT6则不会卡死,能够正常运行;如果定义一个uint32_t类型的变量,取变量的地址传参进去,两个片子都能够正常运行,目前搞不懂什么原因,对于直接传0进去,我知道这是不规范的,相当于传入了一个空指针进去,而跳到函数内部发现,HAL_CAN_AddTxMessage()函数还对此指针进行了解引用,这肯定是非法,但是同样的情况对于F429IGT6却能正常运行,这令我非常不解。望请大佬解答!

下面是我自己写的CAN2发送函数:
[C] 纯文本查看 复制代码
uint32_t mailbox = 10;

void CAN2_UsrSendTest(void)
{
 CAN_TxHeaderTypeDef TxHead;
 TxHead.IDE = CAN_ID_STD;
 TxHead.StdId = 0x10;
 TxHead.RTR = CAN_RTR_DATA;
 TxHead.DLC = 8;

 uint8_t payload[8];

 if(HAL_CAN_AddTxMessage(&hcan2, &TxHead, payload, 0) != HAL_OK)
 {
     Error_Handler();
     }
}

源码中HAL_CAN_AddTxMessage()函数对pTxMailbox进行了解引用。

   
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116243
QQ
发表于 2024-12-2 00:28:52 | 显示全部楼层
应该是F429操作地址0没触发异常。

本身这个地址是重映射的中断向量表。

回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2024-12-4 19:08:59 | 显示全部楼层
eric2013 发表于 2024-12-2 00:28
应该是F429操作地址0没触发异常。

本身这个地址是重映射的中断向量表。

好的,感谢大哥解答
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-11 10:06 , Processed in 0.709876 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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