STM32
直播中

那些年儿ing

11年用户 1296经验值
擅长:84784
私信 关注
[问答]

STM32F042的CAN通信,初始化过不了的原因?

今天搞STM32F042的CAN通信,以为会像STM32F1系列的一样,参考下例程就搞出来,结果参考例程初始化过不了,一通百度才发现没有复用上     SYSCFG->CFGR1 |= SYSCFG_CFGR1_PA11_PA12_RMP;//PA11 and PA12 remap on QFN28 and TSSOP20 packages    这个是只针对于STM32F042的  fuck!。初始化完成后又进不去中断,我的启动代码是 startup_stm32f0xx.s   没有can中断,但是stm32f0xx。h里面又定义了#define CEC_IRQn                          CEC_CAN_IRQn,然后就进不去中断,搞了半天,   鬼使神差的用了一下KEIL自带的device才发现人家的启动代码是 startup_stm32f042.s   干!坑死了。最后修改下启动代码,让后就ok了

回帖(1)

刘芳

2024-5-8 17:11:44
STM32F042的CAN通信初始化失败和中断问题可能由以下几个原因导致:

1. 复用配置问题:如你所述,STM32F042需要进行复用配置,以确保PA11和PA12引脚被正确映射到CAN接口。在初始化CAN之前,确保执行以下操作:

```c
SYSCFG->CFGR1 |= SYSCFG_CFGR1_PA11_PA12_RMP;
```

2. 时钟配置问题:确保为CAN接口配置了正确的时钟。在初始化CAN之前,检查时钟树配置,确保为CAN分配了足够的时钟频率。

3. CAN初始化参数设置错误:检查CAN初始化函数中的参数设置,确保波特率、时钟分频、采样点等参数设置正确。

4. 中断配置问题:确保在初始化CAN后,正确配置了CAN中断。这包括使能CAN中断、配置NVIC(嵌套向量中断控制器)等。

5. 中断服务函数未实现:如果CAN中断配置正确,但中断服务函数(ISR)未实现,可能导致中断无法进入。确保实现了CAN中断服务函数,并在NVIC中注册了该函数。

6. 启动代码问题:你提到使用的启动代码是`startup_stm32f0xx.s`,这个启动文件可能没有包含CAN中断处理。可以尝试使用其他启动文件,或者在当前启动文件中添加CAN中断处理。

7. STM32CubeMX配置问题:如果你使用的是STM32CubeMX进行配置,确保在生成代码之前,正确设置了CAN的配置参数。

8. 硬件问题:如果以上步骤都正确无误,但问题仍然存在,可能是硬件问题,如CAN收发器损坏或连接不良等。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分