STM32f407程序移植到GD32F407

2021-04-16 11:44:22 浏览数 (1)

前言:本文记录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)选择时钟倍频方式

代码语言:javascript复制
#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是标准库。

0 人点赞