STM32f407程序移植到GD32F407

0、前言

本文记录STM32f407程序移植到GD32F407的全过程,两个芯片是pin to pin,基本特性都是,最大168MHZ,1024k flash,192K sram,LQFP100封装。

1、安装keil对gd32f407的支持包

GigaDevice.GD32F4xx_DFP.2.0.0.pack

2、对u8、u16、u32等数据类型的支持

在gd32f4xx.h中定义
在这里插入图片描述

3、时钟选择

根据电路设计,外部使用8M,通过PLL到168M因此在sys_gd32f4xx.c文件中选择宏定义:

(1)选择时钟倍频方式

#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)

图片
(2)库函数中个别外设的计算中用到了HXTAL_VALUE这个宏,因此需要重新定义,这个宏的取值也是与所选用时钟有关系,这里使用外部8M即HXTAL_VALUE=8000000。
图片
(3)外设时钟使能
使用voidrcu_periph_clock_enable(rcu_periph_enum periph)函数,这里要注意periph的取值每次只能是某一个外设,不能用或的方式,如下:
图片

4、systick时钟

Systick属于cortex m内核的时钟,与stm32用法一样。需要注意系统时钟与最大延时。

5、GPIO外设

Gpio配置为输出与输入略有不同

例如配置某个gpio为输出:

gpio_mode_set(PORT_LED, GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP, PIN_LED);
gpio_output_options_set(PORT_LED,GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ, PIN_LED);
gpio_bit_set(PORT_LED,PIN_LED); 

多了一个gpio_output_options_set的函数,对于输入则不需要这个函数。

6、Timer

这里要注意timer所在的总线,总线不同最大时钟不同,要注意最大时钟。

7、USART、SPI、ADC外设

这些都是从0开始,例如USART0、SPI0、ADC0,对应stm32就USART1、SPI1、ADC1。用法与stm32f407类似。

8、Fsmc

在GD32中叫做EXMC,用法和stm32一样,但是GD32f407的exmc可以驱动sdram,功能上比stm32强大。
图片
这里要注意,引脚复用线与stm32不同,需要查看手册设置为相应的复用线,具体可参见手册《GD32F407xx_Datasheet_Rev2.0.pdf 》61页。

9、flash

在GD32中叫做fmc,gd32f407扇区划分、编程方式和stm32f407一样。

总结:从STM32f407程序移植到GD32F407,只需要更改相应的驱动即可,应用层可以直接使用,GD32的库函数对应stm32是标准库

版权声明:本文为CSDN博主「freemote」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/freemote/article/details/119815607

生成海报
点赞 0

freemote

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32f407程序移植到GD32F407

0、前言 本文记录STM32f407程序移植到GD32F407的全过程,两个芯片是pin to pin,基本特性都是,最大168MHZ,1024k flash,192K s

GD32F103配置SPI+DMA收发数据

GD32是国产的32位单片机,它和STM32非常非常像,就连以前的库函数都差不多(现在从GD官网下载的库函数换了一种风格)。配置SPI和DMA的方法和STM32差不多。 上图是DMA0各通

如何在MCU上通过ToD+PPS 获取同步时间(一)

欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线 在很多工业使用场景中,网络内一些设备终端与设备终端,或设备终端与主控之间需要进行时间同步。 比如给传感器数据打时间戳,比如总线的时分复用等场景