
ST的价格和交期不用多说,大家都明白,在产品中大量使用ST的芯片的公司都在寻找国产替代的出路。我们的产品追求的的是MCU的串口相应速度,在网友的使用评价和我们针对性测试之后,GD32最终被定为最优的产品,不仅性能符合要求,价格也是十分便宜,用来替换ST最好不过了。项目的初期,我们和GD的代理进行了面对面的交流,他们推介通过修改相关寄存器直接烧录ST的代码,但是我们实测并不理想。于是在他们的配合下成功使用GD自带的固件库替换掉了ST的芯片。产品实测无任何问题,甚至由于GD更高的主频,运行效果远超预期!国产芯片,未来可期! 需要注意: STM32F030 外设编号从 1 开始, GD32E103 外设编号从 0 开始,且命名有差异。 这里介绍了STM32F030 系列和 GD32E230 系列内部资源对比总览 ![]() 因为GD在主频上高于ST,所以在使用直接烧录的方式移植时会出现延时不同等问题,这也是我不采用此方法的原因,不如直接重写代码。 ![]() 我们需要对GPIO的时钟进行初始化,然后定义端口的复用模式,然后设置PA9,PA10的IO模式速度等参数。因为使用了RS485,还要对使能口进行设置,这一点在GD上同样需要进行。 ![]() : l$ z/ V/ L( E/ j 只不过相对于ST的库函数,GD的更加简洁,因为GD的库函数的集成度更高,使用起来更加方便快捷。 / Y) v/ T+ y7 V 代码的最后两行应该是设置端口的输出高低电平,我采用了寄存器的方式。加快代码运行速度。: q) R# `, F3 N7 b+ H6 Q5 Z 原型是:gpio_bit_set(uint32_t gpio_periph,uint32_t pin);6 m& Z& R2 q( Q* Pgpio_bit_reset(uint32_t gpio_periph,uint32_t pin);. v8 K/ F6 b. G' k: c4 L- z2 O2 h 串口:GPIO初始化完成之后我们需要配置串口: ![]() 这里大家都知道的,配置串口的时钟,波特率,起始位,停止位,数据位。这一点在GD上面同样的体现模式: " U3 I9 M6 H: }7 J
![]() 可以看得到的是代码的简洁程度是不同的,GD的外设配置和ST的HAL库有些类似,精简了代码量,但是设置的东西还是一样的。 . W% |3 S( t2 ?6 U# @ 设置完成后就可以使用库函数的发送和接收函数:* ?' ~: l( ?$ |( }6 c5 s
![]() ![]() 需要提的一点是,串口发送完成的判断应该使用while(RESET == usart_flag_get(USART0, USART_FLAG_TC));我在这里卡住过,这个是最优的方式。 5 m! i; K7 Z& f# c. p* g3 D1 C 接收函数的代码执行效率着实不高。我使用的是直接操作寄存器,有需要的可以借鉴一下。![]() 如果需要使用串口中断,直接调用一下几个函数: 1 L0 X+ j/ R! p7 o1 H 先到这里,会跟进。 |