STM32F0->GD32E230代码移植,非直接烧录

ST的价格和交期不用多说,大家都明白,在产品中大量使用ST的芯片的公司都在寻找国产替代的出路。我们的产品追求的的是MCU的串口相应速度,在网友的使用评价和我们针对性测试之后,GD32最终被定为最优的产品,不仅性能符合要求,价格也是十分便宜,用来替换ST最好不过了。项目的初期,我们和GD的代理进行了面对面的交流,他们推介通过修改相关寄存器直接烧录ST的代码,但是我们实测并不理想。于是在他们的配合下成功使用GD自带的固件库替换掉了ST的芯片。产品实测无任何问题,甚至由于GD更高的主频,运行效果远超预期!国产芯片,未来可期!
下面就进行ST对GD的代码移植:
区别:
GD32E230 对比 STM32F030 有着很好的兼容性和更高的性价比,内核和外设都有所增强。
STM32F030 与 GD32E230 在相同封装下是 Pin To Pin 兼容的。 外设上本人觉得 GD32E230
功能覆盖 STM32F030,大部分外设 GD32E230 完全兼容 STM32F030, 后文我会具体介绍。 需要
注意: STM32F030 外设编号从 1 开始, GD32E103 外设编号从 0 开始,且命名有差异。 这里介绍了STM32F030 系列和 GD32E230 系列内部资源对比总览
  
   

 因为GD在主频上高于ST,所以在使用直接烧录的方式移植时会出现延时不同等问题,这也是我不采用此方法的原因,不如直接重写代码。
我们可以从最常用的开始,因为时间原因,不可能全部的函数都移植,这里介绍最常用的。
GPIO:
例如我们使用STM32 USART1前需要初始化相关的IO操作:

 我们需要对GPIO的时钟进行初始化,然后定义端口的复用模式,然后设置PA9,PA10的IO模式速度等参数。因为使用了RS485,还要对使能口进行设置,这一点在GD上同样需要进行。

只不过相对于ST的库函数,GD的更加简洁,因为GD的库函数的集成度更高,使用起来更加方便快捷。
代码的最后两行应该是设置端口的输出高低电平,我采用了寄存器的方式。加快代码运行速度。
原型是:gpio_bit_set(uint32_t gpio_periph,uint32_t pin);
             gpio_bit_reset(uint32_t gpio_periph,uint32_t pin);
串口:
GPIO初始化完成之后我们需要配置串口: 

这里大家都知道的,配置串口的时钟,波特率,起始位,停止位,数据位。这一点在GD上面同样的体现模式:

可以看得到的是代码的简洁程度是不同的,GD的外设配置和ST的HAL库有些类似,精简了代码量,但是设置的东西还是一样的。
设置完成后就可以使用库函数的发送和接收函数:

 



 

 需要提的一点是,串口发送完成的判断应该使用while(RESET == usart_flag_get(USART0, USART_FLAG_TC));我在这里卡住过,这个是最优的方式。
接收函数的代码执行效率着实不高。我使用的是直接操作寄存器,有需要的可以借鉴一下。

如果需要使用串口中断,直接调用一下几个函数:
nvic_irq_enable(USART0_IRQn, 0);
usart_interrupt_enable(USART0, USART_INT_RBNE);
先到这里,会跟进。
从STM32F030移植到GD32E230的手册见附件(直接烧录)
GD32E230的固件库中文版见附件2518751-20220729214325272-1963396870.gif编辑 从STM32F030移植到GD32E230(1)(2).pdf (511.14 KB)


2518751-20220729214325272-1963396870.gif编辑 GD32E230_gujiankuyonghuzhinan_V1.0.pdf (9.1 MB)
---------------------
作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

如果需要使用串口中断,直接调用一下几个函数:
nvic_irq_enable(USART0_IRQn, 0);
usart_interrupt_enable(USART0, USART_INT_RBNE);
先到这里,会跟进。
从STM32F030移植到GD32E230的手册见附件(直接烧录)
GD32E230的固件库中文版见附件

作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

如果需要使用串口中断,直接调用一下几个函数:
nvic_irq_enable(USART0_IRQn, 0);
usart_interrupt_enable(USART0, USART_INT_RBNE);
先到这里,会跟进。
从STM32F030移植到GD32E230的手册见附件(直接烧录)
GD32E230的固件库中文版见附件2518751-20220729214325272-1963396870.gif编辑 从STM32F030移植到GD32E230(1)(2).pdf (511.14 KB)


2518751-20220729214325272-1963396870.gif编辑 GD32E230_gujiankuyonghuzhinan_V1.0.pdf (9.1 MB)
---------------------
作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

---------------------
作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html

来源:21ic.com

此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

任何人未经允许禁止转载。

作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
---------------------
作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

---------------------
作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
因为GD在主频上高于ST,所以在使用直接烧录的方式移植时会出现延时不同等问题,这也是我不采用此方法的原因,不如直接重写代码。
我们可以从最常用的开始,因为时间原因,不可能全部的函数都移植,这里介绍最常用的。
GPIO:
例如我们使用STM32 USART1前需要初始化相关的IO操作:

2518751-20220729214325272-1963396870.gif编辑
我们需要对GPIO的时钟进行初始化,然后定义端口的复用模式,然后设置PA9,PA10的IO模式速度等参数。因为使用了RS485,还要对使能口进行设置,这一点在GD上同样需要进行。
2518751-20220729214325272-1963396870.gif编辑
只不过相对于ST的库函数,GD的更加简洁,因为GD的库函数的集成度更高,使用起来更加方便快捷。
代码的最后两行应该是设置端口的输出高低电平,我采用了寄存器的方式。加快代码运行速度。
原型是:gpio_bit_set(uint32_t gpio_periph,uint32_t pin);
             gpio_bit_reset(uint32_t gpio_periph,uint32_t pin);
串口:
GPIO初始化完成之后我们需要配置串口:
2518751-20220729214325272-1963396870.gif编辑
这里大家都知道的,配置串口的时钟,波特率,起始位,停止位,数据位。这一点在GD上面同样的体现模式:
2518751-20220729214325272-1963396870.gif编辑
可以看得到的是代码的简洁程度是不同的,GD的外设配置和ST的HAL库有些类似,精简了代码量,但是设置的东西还是一样的。
设置完成后就可以使用库函数的发送和接收函数:
2518751-20220729214325272-1963396870.gif编辑
2518751-20220729214325272-1963396870.gif编辑
需要提的一点是,串口发送完成的判断应该使用while(RESET == usart_flag_get(USART0, USART_FLAG_TC));我在这里卡住过,这个是最优的方式。
接收函数的代码执行效率着实不高。我使用的是直接操作寄存器,有需要的可以借鉴一下。
2518751-20220729214325272-1963396870.gif编辑
如果需要使用串口中断,直接调用一下几个函数:
nvic_irq_enable(USART0_IRQn, 0);
usart_interrupt_enable(USART0, USART_INT_RBNE);
先到这里,会跟进。
从STM32F030移植到GD32E230的手册见附件(直接烧录)
GD32E230的固件库中文版见附件2518751-20220729214325272-1963396870.gif编辑 从STM32F030移植到GD32E230(1)(2).pdf (511.14 KB)


2518751-20220729214325272-1963396870.gif编辑 GD32E230_gujiankuyonghuzhinan_V1.0.pdf (9.1 MB)
---------------------
作者:呐咯密密
链接:https://bbs.21ic.com/icview-3058594-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值