GD32E103/F303系列替换STM32F103

news/2024/11/18 22:34:34/

注:本文档仅针对GD32E103/F303系列替代STM32F103系列

版权:威尔健科技有限公司

联系方式:18816824119(微信同号)
本人:GD技术支持

明:GD32E103/GD32F10x/GD32F30x都是和STM32F10x系列是完全PIN TO PIN兼容的,因此GD32F30x系列不是完全和STM32F30X系列兼容的。
在这里插入图片描述
GD32F103是GD早期的产品,GD32E103和GD32F303是对GD32F103的升级和优化,所以4者是兼容的,虽然内核不同,但是通用外设几乎很少涉及到内核部分,在时间急迫的情况下可以使用ST的库开发。

一、相同点
1)、外围引脚PIN TO PIN兼容,每个引脚上的复用功能也完全相同。
2)、芯片内部寄存器、外部IP寄存器地址和逻辑地址完全相同,但是有些寄存器默认值不同,有些外设模块的设计时序上和STM32有差异,这点差异主要体现在软件上修改,详情见下文。
3)、编译工具:完全相同例如:KEIL 、IAR
4)、型号命名方式完全相同,所以替代只需找尾缀相同的型号即可,例如:STM32F103C8T6 与 GD32E103C8T6。
5)、仿真工具:JLINK GDLINK

二、外围硬件区别
在这里插入图片描述
三、硬件替换需要注意的地方
从上面的介绍中,我们可以看出,GD32F30/E103系列和STM32F103系列是兼容的,但也需要一些注意的地方。
1)、BOOT0必须接10K下拉或接GND,ST可悬空,这点很重要。
2)、RC复位电路必须要有,否则MCU可能不能正常工作,ST的有时候可以不要。
3)、有时候发现用仿真器连接不上。因为GD的swd接口驱动能力比ST弱,可以有如下几种方式解决:
a、线尽可能短一些;
b、降低SWD通讯速率;
c、SWDIO接10k上拉,SWCLK接10k下拉。
4)、使用电池供电等,注意GD的工作电压,例如跌落到2.0V~2.6V区间,ST还能工作,GD可能无法启动或工作异常。
四、使用ST标准库开发需要修改的地方
1)、GD对时序要求严格,配置外设需要先打开时钟,在进行外设配置,否则可能导致外设无法配置成功;ST的可以先配置在开时钟。

2)、修改外部晶振起振超时时间,不用外部晶振可跳过这步。
原因:GD与ST的启动时间存在差异,为了让GD MCU更准确复位。
修改:

将宏定义:
#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)
修改为:
#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)

3)、GD32F10X flash取值零等待,而ST需要2个等待周期,因此,一些精确延时或者模拟IIC或SPI的代码可能需要修改。
原因:GD32采用专利技术提高了相同工作频率下的代码执行速度。
修改:如果使用for或while循环做精确定时的,定时会由于代码执行速度加快而使循环的时间变短,因此需要仿真重新计算设计延时。使用Timer定时器无影响。

4)、在代码中设置读保护,如果使用外部工具读保护比如JFLASH或脱机烧录器设置,可跳过此步骤。
在写完KEY序列后,需要读该位确认key已生效,修改如下:
在这里插入图片描述
总共需要修改如下四个函数:

FLASH_Status FLASH_EraseOptionBytes(void);
FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);
uint32_t FLASH_GetWriteProtectionOptionByte(void);
FlagStatus FLASH_GetReadOutProtectionStatus(void);

5)、GD与ST在flash的Erase和Program时间上有差异,修改如下:
在这里插入图片描述
6)、需求flash大于256K注意,小于256K可以忽略这项。
与ST不同,GD的flash存在分区的概念,前256K,CPU执行指令零等待,称code区,此范围外称为dataZ区。两者在擦写操作上没有区别,但在读操作时间上存在较大差别,code区代码取值零等待,data区执行代码有较大延迟,代码执行效率比code区慢一个数量级,因此data区通常不建议运行对实时性要求高的代码,为解决这个问题,可以使用分散加载的方法,比如把初始化代码,图片代码等放到data区。

总结:至此,经过以上修改,在不使用USB和网络能复杂协议的代码,就可以使用ST的代码操作了。


http://www.ppmy.cn/news/894760.html

相关文章

stm32F103驱动lcd1602

接线 GPIOG0-7:D0-D7 RS:GPIOD13 RW:GPIOD14 EN:GPIOD15 程序 lcd.h #ifndef _lcd_H #define _lcd_H #include "stm32f10x.h" #include "SysTick.h"#define RS GPIO_Pin_13 #define RW GPIO_Pin_14 #d…

STM32F103-LCD1602驱动

STM32驱动LCD1602,不是很难,主要注意GPIO_Write(GPIOD,(GPIO_ReadOutputData(GPIOD) & 0xff00) | cmd);对电平的读取是整个驱动的核心,其他均与51驱动一致。 lcd.h文件 #ifndef __LCD_H__ #define __LCD_H__ #include "stm3…

stm32f103

配置:PLLCLK 32 参考电路图stlink与正点原子的接口连的时候,注意板子上接口实际正反是反的 蓝牙模块 一 蓝牙的AT指令模式 注意EN要接3.3v/EN什么都不接,长按蓝牙按钮的同时然后再上电. 慢闪是AT模式,快闪是透传模式. 指令集: AT //返回OK ATNAME? //返回蓝牙模块的名字…

【mcuclub】时钟模块DS1302

一、实物图 二、原理图 编号名称功能1VCC2双供电配置中的主电源供应引脚。DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电。当VCC1比VCC2高时, VCC1给DS1302供电2X132.768kHz晶振引脚3X24GND电源地5CE使能引脚。输入信号,在…

STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号:STM32F103C8T6 在日常生活中,很多情况下会需要使用时间,单片机中虽然也是有定时器但并不能较为准备的实现计时功能,而且定时计时…

高等数学❤️第一章~第二节~极限❤️极限的概念与性质~函数极限(自变量趋于有限值时的极限)详解

【精讲】高等数学中函数极限:自变量趋于有限值时的极限 博主:命运之光的主页 专栏:高等数学 目录 【精讲】高等数学中函数极限:自变量趋于有限值时的极限 导言 二、函数极限自变量趋于有限值的判定方法 三、函数极限自变量趋于…

【LLM】Langchain使用[三](基于文档的问答)

文章目录 一、基于文档的问答1. 创建向量存储2. 不同类型的chain链 二、本地知识库问答Reference 一、基于文档的问答 1. 创建向量存储 使用Dock Array内存搜索向量存储,作为一个内存向量存储,不需要连接外部数据库创建向量存储:导入一个索…

MySQL8.0 msi 版本安装教程

MySQL8.0 msi 版本安装教程 MySQL8.0 msi 版本安装教程 1> 官网下载安装包 MySQL官网下载地址如下:https://dev.mysql.com/downloads/mysql/ 说明: 如果需要8.0版本下的其他小版本,可以参考下图: 如需5.7及其之前版本&#…