GD32替换STM32遇到的坑之《HAL库CAN无法初始化》
2022-04-14 本文已影响0人
VellBibi
问题
使用GD32F103替换STM32F103发现同样的代码,STM32可以正常初始化CAN并且通信,而GD32无法初始化CAN,HAL_CAN_Init函数返回HAL_ERROR
但我之前使用标准库,GD32和STM32是可以直接复用的
原因
经过反复对比标准库和HAL库的区别,发现写入退出睡眠的寄存器顺序刚好相反
这是标准库,先退出sleep,再初始化
![](https://img.haomeiwen.com/i35286/4d948eb60ae63c57.png)
这是HAL库,先初始化,再推出sleep
![](https://img.haomeiwen.com/i35286/da5fe5f8bcb77f6c.png)
尝试替换了下顺序,对STM32是没有什么影响的,但GD32必须是先退出sleep再初始化
解决方法
在HAL_CAN_Init前先退出sleep模式,这样可以不用修改HAL库就可以兼容GD32了
![](https://img.haomeiwen.com/i35286/681e5e49fa78f8a9.png)