GD32E230 对比STM32F030 有着很好的兼容性和更高的性价比,内核和外设都有所增强。本人曾做过产品的MCU替换,将基于 STM32F0xx 1.5.0固件库的应用程序移植到 GD32E230 上,大体上来说工作量不大,移植后的效果也不错,GD32E230 相比 STM32F030 有不少功能的升级,主频也更高,可以感觉到国产 MCU 一直在进步。本人将此前的移植经验进行了整理,可帮助有需要的朋友快速将应用程序从 STM32F030 移植到GD32E230 上(基于STM32F0xx 标准库 V3.5.0 和 STM32F10x 标准库 V3.5.0)。本移植工作除基于STM32F0xx 1.5.0固件库的工程外还需准备STM32F10x 1.5.0固件库。GD32E230系列采用 Cortex-M23 内核,该内核向下兼容 Cortex-M0/M0+。由于KEIL5.25/IAR8.23及以上版本才提供了对 M23 内核的支持,因此常规情况下,必须在 KEIL5.26/IAR8.23 及以上开发环境下才可以正常使用该芯片。调试仿真器若使用 Jlink 的线,也可以用 GD 官方的 GDlink 调试,但 GDlink 在 IAR 下的支持相对差一些。据了解也有在低版本开发环境下开发 E230的方法,可询问供应商或原厂。本文的介绍开发环境使用 Keil5.26 版本。
(1) STM32F030规格书上没有TIM2,但实际是有的,若使用到这个隐藏资源需使用 GD32E230 的其他定时器替代。
本文基于Keil5.25版本进行移植,需提前准备GD32E230 IDE芯片插件,插件可到GD32MCU资料网站他们的网盘进行下载。
对比上文内容可知 GD32E230C8 和 STM32F030C8 大部分外设功能、配置以及逻辑地址都是兼容的。所以如果仅只是从 STM32F030C8 上把代码移植到 GD32E230C8 上,需改动的底层文件有 ADC 和 Flash、I2C,另外有细节设计差异需要调整 PWR 中进入 standby 的函数。下面详细的介绍一下如何对这两部分进行修改。
至此 ADC 外设的底层文件就移植完成,配置方法可参考 GD32E230 用户手册或者也可以直接参考 STM32F103 的 ADC 配置例程,功能上灵活性更好。
E230 的 ADC 设计相比 STM32F072 更加灵活,在 F072 上 adc 通道只能配置成一个组且转换顺序只能按通道号顺序来进行,在 E103 上 adc 通道可大致分为两个组且顺序排号可以自由定义,以下举例在移植后的程序中如何配置 adc 通道 14 进行连续转换:
STM32F030 系列的 Flash 和选项字节编程是按照 16 位编程的,E230 仅支持 32 位和 64 位编程,所以 Flash 文件中所有操作选项字节的函数和 Flash 操作都需要调整,修改成 32 位操作。此外选项字节字节中无读保护的值在 GD32E230 中是 A5,在 STM32F030 中是 AA。本人将需要修改的内容做了整理,步骤如下:
(2) 修改 FLASH_OB_Erase 中写选项字节的函数,原始代码是直接对 16 位的结构体成员赋值,现将其修改为 32 位操作即可,做如图 8 两处改动。其他的所有操作选项字节函数都做类似的修改,不在一一进行说明。
GD32E230 和 STM32F030 工艺、内核、Flash 上都有区别,所以在相同主频下代码效率可能会有差异,应用中如果有软件延时有必要进行调整、或使用定时器等进行精准延时。
需再次强调:在进行 Flash 编程时需注意,GD32E230 的 Flash 为 4 字节对齐,在 STM32F030 上可以对偶地址编程,移植到 GD32E230 后 Flash 编程的起始地址必须为 4 的整倍数!一般的情况编译器会自动的各类型变量都按 4 字节对齐方式分配地址,但若使用了指定地址的方式定义变量,需注意定义地址按 4 字节对齐地址。
E230 是 M23 内核,和以往 GD 型号的 M3、M4总线架构有区别,Flash 操作时 DMA 会出现阻塞,当 Flash 操作(主要是擦除时间相对来说比较久,编程操作时间短,每次编程间有间隔)时,最好暂停使用DMA 的外设,特别是 adc,避免 Flash 操作期间请求丢失导致后续搬运 buff 数据错位。
GD32E230 相比 STM32F030 很多外设功能有扩展升级,但基于 STM32F0xx 的代码移植过来的应用程序没有新功能 API,若希望发挥 E230 更多性能建议使用 GD 的官方固件库进行开发。
ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大幅度的提升了工作效率。采 ...
因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就有必要了解整一个流程了。要进一步探索,最好的方法,就是去写程序 ...
上一次已经了解ARM的中断处理过程,并能设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都要使用到调试仿真工具。 随着处理器新品种、新 ...
最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程