专栏首页物联网思考用GD32E10x替代STM32F10x程序移植记录

用GD32E10x替代STM32F10x程序移植记录

前言:本文记录一下用GD32E10x替代STM32F10x程序移植过程,两个芯片是pin to pin的,因此无须修改硬件设计,只需修改软件即可。

1、开发工具

IDE:MDK、IAR均可

调试下载工具:stlink v2、jlink ob、jlink均可。

2、数据类型定义

在stm32早期的库中使用了u8,u16,u32等数据类型,需要在gd32e10x.h文件中定义u8,u16,u32等数据类型。

3、时钟配置

根据硬件设计,在system_gd32e10x.c里选择使用内部8M,倍频到120M。

4、systick延时

由于GD32E10x最大主频是120M,STM32f10x只能到72M,所以在延时函数里面的SysTick->LOAD 赋值上要把72改为120,当然最大延时时长也就发生了变化。systick属于内核的东西,两个芯片的寄存器包括命名都是一样的。

5、gpio操作

stm32需要先创建一个结构体变量,再给结构体成员赋值;GD32更简单,直接用gpio_init函数初始化,例如:

gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ,GPIO_PIN_2);

6、Timer

操作和STM32基本一样,在GD32E10x系列中,使用普通定时器timer 5,配置自动重载,1ms产生更新一次中断。

7、串口

GD32E10x的串口从USART0开始,对应的就是STM32的USART1。其他操作和STM32类型。例如操作GD32E10x的USART0:

初始化串口:

//a、时钟使能
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_USART0);
//b、GPIO配置
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
//c、串口配置
usart_deinit(USART0);
usart_baudrate_set(USART0, 115200U);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);

usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
//d、中断配置
nvic_irq_enable(USART0_IRQn, 3, 0);
usart_interrupt_enable(USART0, USART_INT_RBNE);

串口中断:

void USART0_IRQHandler(void)
{
  u8 ch;
  if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE))
  {
    ch = usart_data_receive(USART0);
    usart_data_transmit(USART0,ch);
  }
}

8、flash编程

GD32E10x系列flash只能字(32bit)、双字(64bit)编程,不支持半字(16bit)编程。

注意在GD32的外设中,将flash命名为fmc,相应的库文件是gd32e10x_fmc.c/h。

通过移植可以看出,GD32的库文件和STM32的很像,甚至有的库函数用起来比STM32更简单,但是在外设的命名以及一些细微之处还是有区别的。

本文分享自微信公众号 - 物联网思考(everythinglink),作者:everythinglink

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LoRa终端设备ASR6505驱动DHT11

    DHT11是一款比较典型的温湿度传感器,温度0-50°±2°,湿度:20-90%RH。几乎是开发板绕不开的东西,读写时序也是比较经典的。

    ManInRoad
  • LoRa连接到腾讯云物联网平台

    腾讯也是LoRa联盟成员之一,在深圳部署了LoRa物联网。腾讯云也将LoRa Server的功能集成了进去,目前也是可以免费使用的。用微信或者QQ登录即可。目前...

    ManInRoad
  • ASR推出首颗国产LoRa SoC芯片ASR6601

    继ASR6501、ASR6502、ASR6505之后ASR推出首颗国产LoRa SoC芯片ASR6601,ASR6501、ASR6502、ASR6505都是SI...

    ManInRoad
  • 周末给女友讲了遍加密算法,没想到...

    哈哈哈,其实只是周末看了小舞而已啦,铁铁们没追更的,赶快去补一下这集,特效炸裂。好了,不扯了,进入正题,最近做的项目,涉及到一些加密算法的选择,小羽在这里顺便也...

    浅羽的IT小屋
  • SAP最佳业务实践:SD–信用管理(108)-1业务概览

    用途 创建或更改销售凭证时,可以进行信用额度检查。 优点 降低坏帐风险 集中可靠和可获利的客户 快速的信用检查 加速检查客户信用额度的流程 全面识别公司...

    SAP最佳业务实践
  • SQL Server通过整理索引碎片和重建索引提高速度

    本文章转载:http://database.51cto.com/art/201108/282408.htm

    跟着阿笨一起玩NET
  • python基础—作用域

    对比这两个函数,第二个函数会报错:UnboundLocalError: local variable ‘x’ referenced before assignm...

    dogfei
  • 数字资产交易平台开发,期货合约系统开发

    10月22日,美国洲际交易所(ICE)宣布,其数字资产交易平台Bakkt将于12月12日正式推出。届时,该交易平台将开始提供实物结算的比特币期货合约,这是新平台...

    电微13823115027
  • Palantir开源项目 【第一章节 -- SF社区成员打造】

    上面的路由比较简单,如果这个人登陆过,持久化存储在服务端Session信息中的login为true,那么就不需要密码登陆,前端给予控制路由即可。

    Peter谭金杰
  • Django REST 框架的 FBV 与 CBV 选择

    浏览器通过url传给路由,由as_view 进入ChildView,ChildView通过View的 dispatch 方法来根据不同请求方法执行不同的方法

    白墨石

扫码关注云+社区

领取腾讯云代金券