GD32替换STM32遇到的坑之《HAL库CAN无法初始化》

问题

使用GD32F103替换STM32F103发现同样的代码,STM32可以正常初始化CAN并且通信,而GD32无法初始化CAN,HAL_CAN_Init函数返回HAL_ERROR
但我之前使用标准库,GD32和STM32是可以直接复用的

原因

经过反复对比标准库和HAL库的区别,发现写入退出睡眠的寄存器顺序刚好相反
这是标准库,先退出sleep,再初始化


这是HAL库,先初始化,再推出sleep


尝试替换了下顺序,对STM32是没有什么影响的,但GD32必须是先退出sleep再初始化

解决方法

在HAL_CAN_Init前先退出sleep模式,这样可以不用修改HAL库就可以兼容GD32了


你可能感兴趣的:(GD32替换STM32遇到的坑之《HAL库CAN无法初始化》)