-
2022-02-09 22:25:09
文章源自微信公众号(8号线攻城狮)
1.GD32简述
GD32F103是GD早期的产品,GD32E103和GD32F303是对GD32F103的升级和优化,所以4者是兼容的,虽然内核不同,但是通用外设几乎很少涉及到内核部分,在时间急迫的情况下可以使用ST的库开发。2.二者之间的相同点
- 1.外围引脚PIN TO PIN兼容,每个引脚上的复用功能也完全相同。
- 2.芯片内部寄存器、外部IP寄存器地址和逻辑地址完全相同,但是有些寄存器默认值不同,有些外设模块的设计时序上和STM32有差异,这点差异主要体现在软件上修改。
- 3.编译工具:完全相同例如:KEIL 、IAR
- 4.型号命名方式完全相同,所以替代只需找尾缀相同的型号即可,例如:STM32F103C8T6 与GD32E103C8T6。
- 5.仿真工具:JLINK GDLINK
3.外围硬件的区别
从上面的介绍中,我们可以看出,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可能无法启动或工作异常。
4.使用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区。
5.总结
至此,经过以上修改,在不使用USB和网络能复杂协议的代码,就可以使用ST的代码操作了。
更多相关内容 -
使用GD32替换STM32
2022-02-22 10:14:09使用GD32替换STM32 -
GD32替换STM32注意事项.pdf
2020-04-12 17:25:28GD32 介绍与 STM32 兼容性汇总。STM32的代码直接在GD32上运行需要小部分的修改。按教程做对应修改就行哈。 -
GD32替换STM32,有哪些区别?这些坑你别踩...
2022-03-26 00:58:10点击上方“小麦大叔”,选择“置顶/星标公众号”福利干货,第一时间送达大家好,我是小麦,昨天ST又发涨价涵了,GD32作为一款替换STM32的国产芯片,和STM32有哪些区别,有哪些需要注意的地方呢?下面我们来看看吧。...点击上方“小麦大叔”,选择“置顶/星标公众号”
福利干货,第一时间送达
大家好,我是小麦,昨天ST又发涨价涵了,GD32作为一款替换STM32的国产芯片,和STM32有哪些区别,有哪些需要注意的地方呢?下面我们来看看吧。
一、前言
什么是GD32?
GD32是国内兆易创新公司开发的一款单片机。
GD32和STM32有很多地方都是相似的,不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的东西还是有区别的。相同的地方我们就不说了,下面我给大家讲一下不同的地方。
二、区别
1、内核
GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。
2、主频
使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M
使用HSI(高速内部时钟):GD32的主频最大108M,STM32的主频最大64M
主频大意味着单片机代码运行的速度会更快,项目中如果需要进行刷屏,开方运算,电机控制等操作,GD是一个不错的选择。3、供电
外部供电:GD32外部供电范围是2.6~3.6V,STM32外部供电范围是2~3.6V。
GD的供电范围比STM32相对要窄一点。
内核电压:GD32内核电压是1.2V,STM32内核电压是1.8V。GD的内核电压比STM32的内核电压要低,所以GD的芯片在运行的时候运行功耗更低。4、Flash差异
GD32的Flash是自主研发的,和STM32的不一样。
GD Flash执行速度:GD32 Flash中程序执行为0等待周期。
STM32 Flash执行速度:ST系统频率不访问flash等待时间关系:0等待周期,当0<SYSCLK<24MHz,1等待周期,当24MHz<SYSCLK≤48MHz,2等待周期,当48MHz<SYSCLK≤72MHz。
Flash擦除时间:GD擦除的时间要久一点,官方给出的数据是这样的:GD32F103/101系列Flash 128KB 及以下的型号, Page Erase 典型值100ms, 实际测量60ms 左右。对应的ST 产品Page Erase 典型值 20~40ms。5、功耗
从下面的表可以看出GD的产品在相同主频情况下,GD的运行功耗比STM32小,但是在相同的设置下GD的停机模式、待机模式、睡眠模式比STM32还是要高的。
6、串口
GD在连续发送数据的时候每两个字节之间会有一个Bit的Idle,而STM32没有,如下图。
GD的串口在发送的时候停止位只有1/2两种停止位模式。STM32有0.5/1/1.5/2四种停止位模式。
GD 和STM32 USART的这两个差异对通信基本没有影响,只是GD的通信时间会加长一点。7、ADC差异
GD的输入阻抗和采样时间的设置和ST有一定差异,相同配置GD采样的输入阻抗相对来说要小。具体情况见下表这是跑在72M的主频下,ADC的采样时钟为14M的输入阻抗和采样周期的关系:
8、FSMC
STM32只有100Pin以上的大容量(256K及以上)才有FSMC,GD32所有的100Pin或100Pin以上的都有FSMC。
9、103系列RAM&FLASH大小差别
GD103系列和ST103系列的ram和flash对比如下图:
10、105&107系列STM32和GD的差别
GD的105/107的选择比ST的多很多,具体见下表:
11、抗干扰能力
关于这一点,官方没有给出,我也是在做项目的时候偶然发现的,项目原本是用STM32F103C8T6,后来换成GD F103C8T6,这两个芯片的引脚完全一致,然后单片机用了的两个邻近的引脚作为SPI的时钟引脚和数据输出引脚,然后发现STM32的SPI能正常通讯,GD的不行,经过检查发现PCB板SPI的铜线背面有两根IIC的铜线经过,信号应该是受到影响了。
用示波器看了一下引脚的电平,发现确实是,STM32和GD的数据引脚波形都不正常,但是STM32的波形要好很多,波形虽然差了点,但是SPI通讯依然正常。
而GD则不能正常通讯了。然后我又把SPI的通讯速率减慢,发现STM32的数据引脚很快就恢复正常波形了,而GD的依然差,直到速率降到很低才恢复正常。初步怀疑是STM32内部对引脚有做一些滤波的电路,而GD则没有。
虽然我用的这个电路板本身布线有些不合理,但是在同样恶劣的环境下,STM32依然保证了通讯的正常,而GD不行,这在一定程度上说明了GD的抗干扰能力不如STM32。
转自公众号:技术让梦想更伟大
版权声明:本文来源网络,版权归原作者所有。版权问题,请联系删除。
—— The End ——
往期推荐
你点的每个好看,我都认真当成了喜欢
-
GD32替换STM32移植过程
2021-12-09 16:27:30硬件上使用对应的GD32芯片替换STM32,如使用 GD32F103RET6 替换 STM32F103RET6,其引脚数与引脚定义都是一样的 到兆易创新官网 - 资料下载 - 对应系列芯片 - 应用软件 - 找到GD32F1x0_Addon_V3.1.0.rar,解压安装 3....1. 硬件芯片移植
下面以 GD32F103RET6 替换 STM32F103RET6为例
- 硬件上使用对应的GD32芯片替换STM32,如使用 GD32F103RET6 替换 STM32F103RET6,其引脚数与引脚定义都是一样的
- 到兆易创新官网 - 资料下载 - 对应系列芯片 - 应用软件 - 找到
GD32F1x0_Addon_V3.1.0.rar
,解压安装
3. 更换算法文件(.FLM)到Keil 的Flash文件夹中(Keil_v5\ARM\Flash)
算法文件资源下载:GD32F10xxx Keil IDE Config.rar
2. 软件配置
下图取自STM32 参考手册,配置DMA 通道时须根据此表对应功能配置,如使用DMA 作为串口1的接收功能,就必须使用DMA1 的通道5 .
2.1 修改外部晶振起振超时时间
⚠ 不用外部晶振可跳过此步
由于GD芯片与ST芯片的启动时间存在差异,需要对下面参数进行修改
搜索以下代码 #define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) 修改为: #define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)
2.2 增加DMA 功能
下面以串口3为例
GD32替换STM32的最大问题就是串口收发问题,经常出现丢数据异常,使用DMA处理串口数据,可有效解决该问题。
- 首先引入STM32 官方头文件
stm32f10x_dma.h
#include "stm32f10x_dma.h"
- 串口3与DMA初始化函数
#define USE_USART3_DMA_RX 1 // 宏定义一个条件变量 char Usart3data[200]; // 串口数据接收数组 u8 Usart3flag =0; // 标志位 u8 usart3Count=0; // 串口数据计数 void USART3_Configuration(u32 BaudRate) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; DMA_InitTypeDef DMA_InitStruct; // 定义dma 结构体 //打开usart3要使用的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //配置串口TX作为推挽复用端口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); //配置串口RX作为浮空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); //配置NVIC NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //一个抢占优先级,3个从优先级 NVIC_InitStructure.NVIC_IRQChannel =USART3_IRQn; //和库函数手册不一样 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //主优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道 NVIC_Init(&NVIC_InitStructure); //配置USART USART_InitStructure.USART_BaudRate = BaudRate; //波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位 USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶校验 USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None; //数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //模式 USART_Init(USART3, &USART_InitStructure); //写入结构体 // USART_Cmd(USART3, ENABLE); //使能usart3 USART_ITConfig(USART3,USART_IT_PE,ENABLE); USART_ITConfig(USART3, USART_IT_RXNE,ENABLE); //打开usart3的接收中断 USART_ClearFlag(USART3,USART_IT_RXNE); //清除中断标志 // USART_ClearFlag(USART3, USART_FLAG_TC); // 清标志 /********************************以下是对DMA的参数初始化**********************************/ #if USE_USART3_DMA_RX USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); // 开启串口3空闲中断 DMA_DeInit(DMA1_Channel3); // 查上表可知,串口3 接收功能对应DMA1 的通道3 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // DMA1时钟初始化 // RX DMA1 ??5 DMA_InitStruct.DMA_BufferSize = sizeof(Usart3data); // 传输的数据大小,其中Usart3data 就是串口数据接收变量 DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC; // 外设作为数据的来源 DMA_InitStruct.DMA_M2M = DMA_M2M_Disable; // 不使能M TO M传输 DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)Usart3data; // 设置DMA源地址:串口数据寄存器 DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // 内存数据单元 DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; // 外设地址不增 DMA_InitStruct.DMA_Mode = DMA_Mode_Normal; // DMA模式一次或者循环模式 //DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; // DMA模式一次或者循环模式 DMA_InitStruct.DMA_PeripheralBaseAddr = USART3_BASE + 0x04; // 设置DMA源地址:串口数据寄存器地址 DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 外设数据单元 DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址不增加 DMA_InitStruct.DMA_Priority = DMA_Priority_High; // 优先级为中 // 配置DMA通道 DMA_Init(DMA1_Channel3, &DMA_InitStruct); // 清除DMA所有标志 DMA_ClearFlag(DMA1_FLAG_TC3); DMA_ITConfig(DMA1_Channel3, DMA_IT_TE,ENABLE); USART_DMACmd(USART3, USART_DMAReq_Rx, ENABLE);//开启串口DMA接收 DMA_Cmd(DMA1_Channel3, ENABLE); // 使能DMA通道 #else USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // 开启串口接收中断 #endif // USART_ClearFlag(USART3, USART_FLAG_TC); /* 清除标志避免第一个字符丢失 */ // 使用GD32时,发送第一个数据前不要清除 USART_FLAG_TC(发送完成标志位) USART_Cmd(USART3, ENABLE); //使能串口 }
- 串口3中断服务函数
void USART3_IRQHandler(void) //串口1中断服务程序 { u8 Res; #if USE_USART3_DMA_RX if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) 读取接收中断标志位后自动清零接收中断标志位 { Receice_DataPack(3); Res = USART3->SR; Res = USART3->DR; } #else #endif } #define USART_RX_BUFF_SIZE 200 void Receice_DataPack(uint8_t channel) { //接收到的数据长度 uint32_t buff_length; u32 i; static uint8_t byteindex = 0; switch(channel) { case 3: { //获取这一帧数据个数,此处注意 USART_RX_BUFF_SIZE 的长度要跟 Usart3data 定义的长度相同,否则会发生异常 buff_length = USART_RX_BUFF_SIZE - DMA_GetCurrDataCounter(DMA1_Channel3); for(;byteindex < buff_length;byteindex++) { Putch(USART3,Usart3data[byteindex]); }//回显处理 byteindex = buff_length; if(Usart3data[buff_length-1] == '\r' ||Usart3data[buff_length-1] == '\n') //接收到了一帧完整的命令 { Usart3flag = 1;//接收到空行的命令 Putch(USART3,'\n');//MAC下不发送新行会覆盖输入 byteindex = 0; if(Usart3data[buff_length-1] == '\n' || Usart3data[buff_length-1] == '\r')//去掉接受数据中尾部的回车换行符 { Usart3data[buff_length-1] = 0; } if(Usart3data[buff_length-2] == '\r') { Usart3data[buff_length-2] = 0; } return; } if(buff_length >= 50) { byteindex = 0; DMA1_Channel3->CCR&=~(1<<0); //关闭DMA接受中断 DMA1_Channel3->CNDTR=USART_RX_BUFF_SIZE; //清空DMA数据计数器,重新计数下一帧数据 DMA1_Channel3->CCR|=1<<0; } break; } default: break; } } void Putch(USART_TypeDef* USARTx,u8 k) // 回显函数 { if(k == '\n') { USART_SendData(USARTx,'\r'); while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);//等待发送结束 USART_SendData(USARTx,'\n'); while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);//等待发送结束 } else if(k == '\b')//接收到 { USART_SendData(USARTx,'\b'); while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);//等待发送结束 USART_SendData(USARTx,' '); while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);//等待发送结束 USART_SendData(USARTx,'\b'); while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);//等待发送结束 } else { while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);//等待发送结束 USART_SendData(USARTx,k); //while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } }
- main函数
int main() { ... //省略代码 while(1) { ... //省略代码 if(Usart3flag==1) //接收完成 { port_Index=3; CheckUartCmd(Usart3data); Usart3flag=0; memset(Usart3data,'\0',sizeof(Usart3data));//清空接收缓冲区 DMA1_Channel3->CCR&=~(1<<0); //关闭DMA接受中断 DMA1_Channel3->CNDTR=sizeof(Usart3data); //清空DMA数据计数器,重新计数下一帧数据 DMA1_Channel3->CCR|=1<<0; usart3Count=0; } } }
-
想用GD32替换STM32? 这些细节一定要知道
2021-10-19 01:08:21关注、星标公众号,直达精彩内容来源:网络素材GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。所以GD32和STM32有很多地方都是...关注、星标公众号,直达精彩内容
来源:网络素材
GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。所以GD32和STM32有很多地方都是一样的。
不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的东西还是有区别的。
相同的地方我们就不说了,下面列一下不同的地方。
1 内核
GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。
2 主频
使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M
使用HSI(高速内部时钟):GD32的主频最大108M,STM32的主频最大64M
主频大意味着单片机代码运行的速度会更快,项目中如果需要进行刷屏,开方运算,电机控制等操作,GD是一个不错的选择。
3 供电
外部供电:GD32外部供电范围是2.6-3.6V,STM32外部供电范围是2-3.6V。GD的供电范围比STM32相对要窄一点。
内核电压:GD32内核电压是1.2V,STM32内核电压是1.8V。GD的内核电压比STM32的内核电压要低,所以GD的芯片在运行的时候运行功耗更低。
4 Flash差异
GD32的Flash是自主研发的,和STM32的不一样。
GD Flash执行速度:GD32 Flash中程序执行为0等待周期。
STM32 Flash执行速度:ST系统频率不访问flash等待时间关系,0等待周期,当0<SYSCLK<24MHz;1等待周期,当24MHz<SYSCLK≤48MHz;2等待周期,当48MHz<SYSCLK≤72MHz。
Flash擦除时间:GD擦除的时间要久一点,官方给出的数据是这样的“GD32F103/101系列Flash 128KB及以下的型号,Page Erase典型值100ms, 实际测量60ms左右。”对应的ST 产品Page Erase典型值 20~40ms。
5 功耗
从下面的表可以看出GD的产品在相同主频情况下,GD的运行功耗比STM32小,但是在相同的设置下GD的停机模式、待机模式、睡眠模式比STM32还是要高的。
6 串口
GD在连续发送数据的时候每两个字节之间会有一个Bit的Idle,而STM32没有,如下图。
GD的串口在发送的时候停止位只有1/2两种停止位模式。STM32有0.5/1/1.5/2四种停止位模式。
GD 和STM32 USART的这两个差异对通信基本没有影响,只是GD的通信时间会加长一点。
7 ADC差异
GD的输入阻抗和采样时间的设置和ST有一定差异,相同配置GD采样的输入阻抗相对来说要小。具体情况见下表这是跑在72M的主频下,ADC的采样时钟为14M的输入阻抗和采样周期的关系:
8 FSMC
STM32只有100Pin以上的大容量(256K及以上)才有FSMC,GD32所有的100Pin或100Pin以上的都有FSMC。
9 103系列RAM&FLASH大小差别
GD103系列和ST103系列的ram和flash对比如下图:
10 105&107系列STM32和GD的差别
GD的105/107的选择比ST的多很多,具体见下表:
11 抗干扰能力
关于这一点,官方没有给出,笔者也是在做项目的时候偶然发现的。
项目原本是用STM32F103C8T6,后来换成GDF103C8T6。这两个芯片的引脚完全一致,单片机用了的两个邻近的引脚作为SPI的时钟引脚和数据输出引脚,然后发现STM32的SPI能正常通讯,GD的不行;经过检查发现PCB板SPI的铜线背面有两根IIC的铜线经过,信号应该是受到影响了。
用示波器看了一下引脚的电平,发现确实是,STM32和GD的数据引脚波形都不正常,但是STM32的波形要好很多,波形虽然差了点,但是SPI通讯依然正常。而GD则不能正常通讯了。
然后笔者又把SPI的通讯速率减慢,发现STM32的数据引脚很快就恢复正常波形了,而GD的依然差,直到速率降到很低才恢复正常。初步怀疑是STM32内部对引脚有做一些滤波的电路,而GD则没有。
虽然用的这个电路板本身布线有些不合理,但是在同样恶劣的环境下,STM32依然保证了通讯的正常,而GD不行,这在一定程度上说明了GD的抗干扰能力不如STM32。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ 关注我的微信公众号,回复“加群”按规则加入技术交流群。 欢迎关注我的视频号:
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。
-
GD32替换STM32程序运行异常
2021-10-15 18:19:59stm32程序使用CubeMX生成,HAL库为最新库,将代码烧写到GD32上运行异常,该问题是GD32不能兼容最新的HAL库,需要使用旧的HAL库 -
GD32替换STM32,这些细节一定要知道。
2021-02-09 12:45:58今日份视频号视频----正文----一、 GD32 与 STM32 异同1.相同点1)外围引脚定义:相同型号的管脚定义相同2) Cortex M3 内核:STM32F103 内核 R1... -
GD32替换STM32遇到HAL库CAN无法初始化
2022-04-21 13:54:32项目场景: GD32替换STM32遇到HAL库CAN无法初始化 问题描述 GD32替换STM32遇到HAL库CAN无法初始化 void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(canHandle->... -
GD32F330替换STM32F301做逆变电源经验.pdf
2021-03-01 14:20:40STM32 三相逆变器 国产芯片 -
GD32替换STM32注意事项!!!
2020-04-12 17:41:45直接上文档,比较具体,下载观看就行。 GD32替换STM32注意事项!!! -
GD32替换STM32F103芯片过程中,SPI通讯数据出现问题
2021-05-13 20:13:12将STM32F103芯片换成GD32的芯片,但是依然是STM32的工程,其中#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)替换为#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF) 发现 CAN和串口通讯正常,... -
国产单片机GD32替换STM32,这些细节别忽略!
2022-04-14 00:21:3400 前言缺料危机还在持续,MCU从国外ST...兆易创新GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。所以GD32和STM32有很多地方都是一样的。不过GD32毕竟是不同的产品... -
GD32与STM32的区别.doc
2021-06-17 01:05:29GD32与STM32的区别 -
GD32如何替换STM32?
2021-01-11 15:32:45关注、星标公众号,直达精彩内容作者:笙歌君独忧链接:https://blog.csdn.net/qq_23852045/article/details/109802955GD32F103... -
GD32F103替换STM32F103
2022-02-24 10:28:26注:本文档仅针对GD32F103系列替代STM32F103系列 一、相同点** 1)、外围引脚PIN TO PIN兼容,每个引脚上的复用功能也完全相同。 2)、芯片内部寄存器、外部IP寄存器地址和逻辑地址完全相同,但是有些寄存器默认值... -
芯慌啊,GD32替换STM32之环境搭建 闪烁LED
2021-08-12 10:40:51由于疫情的原因,STM32芯片供货紧张、货期长。就算可以购买到现货,但现货价格高的离谱。另外,就此大环境,拆机件大量涌现,拆机件你真的敢用吗? 2021芯慌啊,我早期设计使用的STM32F030C8T6,原厂都不给排单了,... -
GD32能否替换STM32?几点细节比较一下
2021-11-23 13:50:53GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。所以GD32和STM32有很多地方都是一样的。 不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的... -
如何替换_GD32如何替换STM32?
2021-03-19 22:43:40GD32F103是GD早期的产品,GD32E103和GD32F303是对GD32F103的升级和优化,所以4者是兼容的,虽然内核不同,但是通用外设几乎很少涉及到内核部分,在时间急迫的情况下可以使用ST的库开发。 一、相同点 1)外围引脚PIN... -
【看完就懂】GD32替代STM32全过程记录
2021-05-05 00:51:28STM32程序改个数值,生成的编译文件直接下载到GD32里面就能运行!!! -
用GD32替代STM32,是什么体验?
2021-08-19 00:12:25一、前言大家好,我是张巧龙,最近ST涨价厉害,单位的物料成本也是频频告急。网上一直传,什么完美替代,直接就能用。说不心动吧,那是假的。看到嵌入式ARM这篇关于GD32替代STM32的文章... -
图解 GD32时钟配置.zip
2020-06-07 08:46:54GD32系列MCU时钟配置图解说明,时钟树图与固件库函数的对应关系图解。快速上手时钟配置。GD32新手必备。 -
关于GD32替代STM32的注意事项
2021-12-24 10:53:51背景 在中美摩擦日益增大的情况下,芯片的国产替代也愈发重要,尤其是最近芯片价格疯...我记得那时我的领导问我,stm32f103c8t6有没有国产替代的,我找了半天也只有三四家,可以同型号替代。时间来到了2021年,芯片厂商 -
AT32与STM32或GD32替换说明.xlsx
2021-05-22 10:20:00本文件是AT32(雅特力)与STM32、GD32替换说明表,很详细 -
GD32F450和STM32F4xx兼容性说明.pdf
2020-07-15 10:50:161、GDF10x、GDF1x0、GDF20x、GDF450、STF10x、STF0xx、STF20x、STF4xx的硬件兼容性 2、GDF450和STF4xx是否硬件pin to pin? 3、GDF450和STF4xx是否软件兼容? 4、为什么GDF450要跟STF4xx兼容而不是和GDF10x、GDF20x... -
GD32F103C8T6代替STM32F103C8T6操作记录-Chain.rar
2021-07-23 14:07:59本资源详尽讲述了使用GD32F103C8T6芯片替换STM32F103C8T6芯片的全部过程,并附有实操全过程及过程截图和必备软件。 -
GD32F450替换STM32F429
2022-01-28 10:25:17用GD芯片替换STM32,解决出现的flash、usb以及HAL库兼容问题。 -
从STM32F030移植到GD32E230.pdf
2021-03-23 17:35:58从STM32F030移植到GD32E230心得