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

发布者:CreativeDreamer最新更新时间:2025-01-08 来源: jianshu关键字: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  初始化 引用地址:GD32替换STM32遇到的坑之《HAL库CAN无法初始化》

上一篇:基于STM32的(GSM+DHT11)果园环境监测系统
下一篇:IAR STM32 BootLoader

推荐阅读最新更新时间:2026-03-20 11:46

STM32F1XX系列 HAL库 CAN大量收发数据
大量收发数据时,会产生收发数据0-3分钟后不再收发数据的现象,此时是由于库函数内部将CAN总线状态改为忙碌。 可在While(1)中填写如下代码 if( HAL_BUSY == HAL_CAN_Receive_IT(hcanx, CAN_FIFO0))//开启中断接收 { /* Enable FIFO 0 overrun and message pending Interrupt */ __HAL_CAN_ENABLE_IT(&hcan1, CAN_IT_FOV0 | CAN_IT_FMP0); }
[单片机]
使用STM32F1xx_HAL库实现CAN通信的问题
硬件平台:处理器为STM32F103R8,板子为自设计电路板,数码管显示+CAN通信。 软件开发平台:Keil V5 操作系统:FreeRTOS 问题描述: 使用HAL硬件库实现CAN通信时,CAN中断无法进入,不能够使用中断方式进行数据的接收。CAN的发送是没有问题,寄存器也接收到了响应的数据,就是中断没有被触发。研究了一天没有搞定,现把问题放下,先改用轮训读取的方式实现。 主要的代码如下: 1、接收中断 /** * @brief This function handles CAN1 RX0 interrupt request. * @param None * @retval None */ void
[单片机]
基于CubeMX HAL库CAN的配置
首先说说使用时候的两个坑。 (1)要使能Swap PA9/10 – PA11/12,这个时候PA11和PA12引脚才能出现。 (2)我第一步用的是回环模式。 大致是这样的。 While { SendCanMessage(); } Can_interrupt { HAL_CAN_Receive_IT(hcan,CAN_FIFO0); } 却发现只能中断一次不能返回了。 原因,配置好CAN后状态为HAL_CAN_STATE_READY。 设置为接收,状态为HAL_CAN_STATE_BUSY_RX0。 接收到数据一般会在继续设置为接收。这样一直可以接收。
[单片机]
基于CubeMX <font color='red'>HAL库</font><font color='red'>CAN</font>的配置
STM32 HAL库 模拟SPI驱动 ADS1118
首先是SPI相关的简介: https://www.bilibili.com/opus/515342298243272188 然后是用STM32CubeMx初始化模拟SPI的引脚: STM32CubeMx的GPIO输入输出的配置可以参考: https://www.bilibili.com/opus/484177792198506654 我所用到的四个输出口分别对应ADS1118上的三个SPI通信口。 SYNC:PA4 SCLK:PA5 DOUT:PA6 DIN:PA7 在具体的应用中可以自行修改头文件中的GPIO口以配合硬件完成工程。 ADS1
[单片机]
STM32 HAL库 模拟SPI驱动 DAC8560
网上关于DAC8560相关的模拟SPI驱动的资料少的可怜,甚至连DAC8560的中文资料都不多,更不要提用HAL库进行编程的了,这实在是一块冷门芯片,本文主要是介绍讲解STM32 HAL库使用模拟SPI驱动DAC8560。 首先是SPI相关的简介: SPI通信 高冠避役 · 800阅读 然后是用STM32CubeMx初始化模拟SPI的引脚: STM32CubeMx的GPIO输出的配置可以参考: STM32CubeMx GPIO口输出 高冠避役 · 960阅读 这里之所以是只用开三个GPIO输出来模拟SPI是因为它只用到了半双工通信。 我所用到的三个输出口分别对应8560上的三个SPI通信口。 SYNC:PA6 SCLK
[单片机]
<font color='red'>STM32</font> <font color='red'>HAL库</font> 模拟SPI驱动 DAC8560
嵌入式STM32开发方式的本质区别:寄存器、标准库与HAL库对比(嵌入式初级开发者必读)
作为嵌入式初级开发者,理解STM32的三种开发方式(寄存器、标准库、HAL库)的本质区别及其适用场景,是掌握STM32开发的关键。以下是专业且通俗的对比分析: 1. 寄存器开发(Register-Level) 本质 直接通过读写硬件寄存器控制外设,开发者需手动配置每一个寄存器的位字段,完全掌控底层硬件。 代码示例 // 配置GPIOA的Pin0为输出模式 RCC- APB2ENR |= 1 2; // 使能GPIOA时钟 GPIOA- CRL &= ~(0x0F 0); // 清除Pin0原有配置 GPIOA- CRL |= 0x03 0; // 推挽输出,50MHz速度 GPIOA- ODR |= 1
[单片机]
STM32 HAL库HAL库的简介及文件结构
文章内容偏向HAL库的移植,以个人观点及了解为主,若与事实不符,则以www.st.com、www.stmcu.org.cn等平台为准。 使用的软件:VSCode(1.36版,带C/C++ IntelliSense插件) 芯片:STM32H743ZIT6(Nucleo-H743平台) 所使用的库:STM32Cube_FW_H7_V1.3.0,下载地址(截至当前的最新版本为1.5.0版):https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-m
[单片机]
【<font color='red'>STM32</font> <font color='red'>HAL库</font>】<font color='red'>HAL库</font>的简介及文件结构
基于STM32 HAL库的平衡循迹小车技术详解:串级PID控制、MPU移植及电赛应用
1.硬件设计(仅限参考) 先是原理图如下 主要模块:灰度,电源,mpu(陀螺仪),oled,tb6612,含有编码器的电机 2.mpu模块的使用和移植 想要使平衡车保持平衡,mpu是最重要的模块,大家可以参考这个博主写的 http://t.csdnimg.cn/ITLI3 如果大家没有时间或者移植失败,也可以直接移植我代码之中的mpu模块: 链接: https://pan.baidu.com/s/1-9Vstj5v0Wgqkm1AFrCt_w?pwd=k8g8 提取码: k8g8 3.代码的主要逻辑 1.通过mpu获得pitch,roll,yaw的值来进行处理 2.获得编码器的数值3.通过处理之后的数据
[单片机]
基于<font color='red'>STM32</font> <font color='red'>HAL库</font>的平衡循迹小车技术详解:串级PID控制、MPU移植及电赛应用
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved