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

适用STMCubeX Hal 库驱动CAN 接收 hardHardFault

[复制链接]
DarkG 提问时间:2017-1-4 21:36 /
芯片 STM32F103C8T6
同样的板子,用标准函数库,CAN收发都正常。
用hal 库 就会出现收到消息之后可以进中断,表示过滤器工作正常,但是接着程序就会跑到

void HardFault_Handler(void) {
        /* USER CODE BEGIN HardFault_IRQn 0 */
        asm("BX LR");//return to the errror
        /* USER CODE END HardFault_IRQn 0 */
        while (1) {
        }
        /* USER CODE BEGIN HardFault_IRQn 1 */

        /* USER CODE END HardFault_IRQn 1 */
}
我添加了,asm("BX LR");//return to the errror 跳转回出错点的语句,发现收到消息之后对can 的很多操作都会跳回到HardFault_Handler 。

Hal 库版本
STM32Cube FW_F1 V1.4.0

不知道有谁遇到过HAL库的这些问题
收藏 1 评论10 发布时间:2017-1-4 21:36

举报

10个回答
DarkG 回答时间:2017-1-9 23:28:36
安 发表于 2017-1-9 11:06
楼主你把中断处理的部分代码发出来,大家一块看看是哪儿的问题。

CanTxMsgTypeDef        TxMessage;
CanRxMsgTypeDef        RxMessage;

/* CAN init function */
static void MX_CAN_Init(void)
{


  hcan.Instance = CAN1;

  hcan.pTxMsg = &TxMessage;
  hcan.pRxMsg = &RxMessage;


  hcan.Init.Prescaler = 12;
  hcan.Init.Mode = CAN_MODE_NORMAL;
  hcan.Init.SJW = CAN_SJW_1TQ;
  hcan.Init.BS1 = CAN_BS1_3TQ;
  hcan.Init.BS2 = CAN_BS2_2TQ;
  hcan.Init.TTCM = DISABLE;
  hcan.Init.ABOM = DISABLE;
  hcan.Init.AWUM = ENABLE;
  hcan.Init.NART = ENABLE;
  hcan.Init.RFLM = DISABLE;
  hcan.Init.TXFP = DISABLE;
  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    Error_Handler();
  }

}
DarkG 回答时间:2017-1-9 23:20:56
安 发表于 2017-1-9 11:06
楼主你把中断处理的部分代码发出来,大家一块看看是哪儿的问题。

已经 解决了 就是指针 和变量的问题

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

DarkG 回答时间:2017-1-5 00:08:43
太伤心了,又重新安装STM32Cube 提供的官方例子干了一边,还是会有hard fault
这是怎么一回事
但是我不用hal 的教程很正常
奏奏奏 回答时间:2017-1-5 07:10:36
HardFault_Handler本身应该不是出错处理
HAL_CAN_ErrorCallback才是出错处理

评分

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

查看全部评分

andypanfan 回答时间:2017-1-5 09:59:55
:)  还没有研究过
andypanfan 回答时间:2017-1-5 10:03:21
还没有研究过!!!
废鱼 回答时间:2017-1-5 11:13:04
楼主看一下CAN结构体里面的接收和发送,这个是指针型的,需要初始化CAN时进行赋值。
hcan1.pTxMsg = &TxMessage;
  hcan1.pRxMsg = &RxMessage;

评分

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

查看全部评分

DarkG 回答时间:2017-1-8 21:48:07
安 发表于 2017-1-5 11:13
楼主看一下CAN结构体里面的接收和发送,这个是指针型的,需要初始化CAN时进行赋值。
hcan1.pTxMsg = &TxMe ...

还是没解决问题
DarkG 回答时间:2017-1-9 00:04:31
安 发表于 2017-1-5 11:13
楼主看一下CAN结构体里面的接收和发送,这个是指针型的,需要初始化CAN时进行赋值。
hcan1.pTxMsg = &TxMe ...

感谢,按照你的提示,可以接收到数据 正常进入回调程序了,不过在回掉程序里面,操作can 的接收和发送,还是容易发生 hard_fault ,这个问题应该还是,指针使用得不当导致的问题,继续折腾中。
废鱼 回答时间:2017-1-9 11:06:13
楼主你把中断处理的部分代码发出来,大家一块看看是哪儿的问题。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版