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

适用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
楼主你把中断处理的部分代码发出来,大家一块看看是哪儿的问题。
12下一页

所属标签

相似问题

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