STM32
直播中

李中宏

7年用户 1283经验值
私信 关注
[问答]

怎样将STM32F10x程序移植到GD32E10x上去呢

怎样将STM32F10x程序移植到GD32E10x上去呢?有哪些操作流程?

回帖(1)

林倩倩

2021-12-15 11:24:34
前言:两个芯片是Pin to Pin的,因此硬件基本不用修改,只需修改软件即可。





1、开发化境
IDE:IAR,MDK
调试下载工具:stlink、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,当然最大延时时长也就发生了变化。
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、timer 6两个普通定时器,可以配置自动重载,产生更新中断。
7、串口
GD32E10x的串口从USART0开始,对应的就是STM32的USART1。其他操作和STM32类型。
例如操作GD32E10x的USART0:
初始化串口:

void CommInit(void)
{
//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)编程。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分