记录STM32F4移植GD32F4遇到的错误

博主在尝试将STM32F1上的程序移植到STM32F4时遇到问题,主要在于STM32F4的GPIO输入输出寄存器地址与F1不同,导致LCD屏幕无法正常工作。博主通过检查HAL库的GPIO配置未发现错误,最终定位到问题根源是寄存器操作部分,特别是IO口映射函数的地址不匹配。
摘要由CSDN通过智能技术生成

本人新手小白,因为最近需要将原来是在STM32F1上运行的程序给移植到GDF4上,在移植的时候,发现原来能在STM32F1上驱动的LCD屏幕在F4上怎么都运行不了,刚开始是怀疑GPIO的配置问题,但是是HAL库生成的代码,GPIO配置检查了好几遍,确实没有配置错误。

最后发现是在寄存器操作这块。下面是F1的IO口映射函数,在驱动LCD的文件里用了许多这种PXout这种操作IO口的函数,但是F1和F4输入输出寄存器的地址是不一样的。

#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C

#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08

#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  

#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  

#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  

#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  

#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  

#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32F4GD32F4 都是基于ARM Cortex-M4内核的微控制器系列,因此在移植这两个系列之间不会涉及到太多的硬件和指令集方面的差异。所以可以通过以下步骤将STM32F4移植GD32F4上: 1. 开发环境的准备:首先,需要下载并安装GD32的开发工具链和开发板的驱动程序,可在官方网站上获取。然后,将原来为STM32F4编写的代码和工程文件导入到GD32的开发环境中。 2. 底层驱动的替换:由于GD32F4STM32F4在外设控制器的寄存器映射和配置上可能有一些差异,需要修改底层驱动层的相关代码。替换原来的STM32外设驱动代码为GD32外设驱动代码,并根据GD32的数据手册调整相关寄存器的配置。 3. 系统时钟的配置:STM32GD32的系统时钟配置方式可能有所不同,需要根据GD32的数据手册重新配置系统时钟。通常情况下,GD32的时钟配置方式与STM32相似,可以通过修改相关寄存器的值来实现。 4. 中断和中断向量表的处理:GD32的中断向量表可能与STM32不同,需要根据GD32的数据手册进行相应的修改。另外,如果在工程中使用了中断,需要将原来的中断服务函数与新的中断向量表进行对应。 5. 硬件资源的适配:GD32开发板上的引脚配置和STM32开发板上的可能有一些差异,需要根据实际情况进行适配。可以通过修改引脚映射和配置文件来实现。 6. 编译、调试和测试:进行移植后,需要重新编译和链接工程,并通过调试工具对代码进行调试。同时,还需要进行严格的测试来确保软硬件的兼容性和正常运行。 需要注意的是,尽管STM32F4GD32F4在硬件和指令集上非常相似,但仍然存在一些差异和不兼容性。因此,在移植过程中需要仔细检查和调试代码,确保系统的稳定性和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值