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是标准库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值