GD32E230 开发环境搭建

(一)GD32F230F4P6

GD32F230F4P6 是 GD 基于 ARM ® CortexTM-M23 内核 推出的超值型单片机 GD32E230 系列中的一个型号,

基本特征有:

  • 16K Flash 4K RAM
  • SOP20 封装,可用 IO 有 15 个,跟 ST32F0 & STM32L0 系列 中的 TSSOP20 封装的芯片是 PIN2PIN的
  • 1 个 I2C、1 个 SPI 、1 个 UART
  • 9 个外部 + 2 个 内部 通道的 分辨率高达 12 bit 的 ADC

等等,

(二)GD32F230F4P6 的资源

要把该芯片用起来所需的基本资源在官网就能找到:

(三)GD32F230F4P6 最小系统

搞这行,只有软件不行,还得有实际得硬件,我使用的板子是这个:

左边是焊接了 GD32F230F4P6 的最小系统,这板子本来是给 STM32F042F4 做的,有点不好看,右边是我用 STM32F042F4 做的 Daplink。

(四)用起来

首先把 GD32E23x_AddOn 下载下来并安装,里面分 IAR 跟 KEIL,安装对应的即可

然后下载固件库gd32e230xxxx-firmware-library,里面有外设库、外设例程、工程模板。这里直接使用里面的工程模板。

我这里使用 keil,进入相关目录打开工程:

在现有的环境下我要用最少的时间,验证下我的环境能不能用、我的板子能不能跑起来,当然最简单的是控制个 IO 口来点个灯,可是我的板子上的 MCU 的 IO 没有接 LED灯,所幸的是我的 Daplink 有 USB 转 TTL 功能,也连接到了 MCU ,看了下 SDK 里面的例程,也有 UART 部分,那我实现一个 MCU 通过 UART 发送数据的程序就可以验证了。

那么要在我的板子上跑起来,需要做 4 个修改:

  • 修改调试器,没有合适的调试器,就无法给 GD32E230 下载程序、调试程序了
  • 时钟,我的板子上没有晶振,只能用内部时钟
  • 把例程里面的 uart 适配到我的板子
  • 实现测试程序

(4.1)修改调试器

首先修改所用调试器,选择使用 CMISI-DAP,然后进入调试器设置选中,使用 SW 接口,如下:

(4.2)修改时钟

工程中 GD32F230 使用的时钟是外部晶振的,我的板子上没有外部晶振,只能使用内如 RC 了,打开文件 system_gd32e23x.c,修改为如下:

(4.3)修改 UART

我这个 Daplink 上有个 usb 转 ttl,RX、TX 分别连接到 GD32F230F4p6 的 PA2、PA3,看了下源码,还需要改下代码上使用的 UART0 对应的 IO,打开 gd32e230c_eval.h,修改如下:

(4.4)测试程序

然后是应用,测试程序,本来是这样的:

int main(void)
{
    /* configure systick */
    systick_config();
    /* initilize the LEDs, USART and key */
    gd_eval_led_init(LED1); 
    gd_eval_led_init(LED2); 
    gd_eval_led_init(LED3);
    gd_eval_com_init(EVAL_COM);
    gd_eval_key_init(KEY_WAKEUP, KEY_MODE_GPIO);
    
    /* print out the clock frequency of system, AHB, APB1 and APB2 */
    printf("\r\nCK_SYS is %d", rcu_clock_freq_get(CK_SYS));
    printf("\r\nCK_AHB is %d", rcu_clock_freq_get(CK_AHB));
    printf("\r\nCK_APB1 is %d", rcu_clock_freq_get(CK_APB1));
    printf("\r\nCK_APB2 is %d", rcu_clock_freq_get(CK_APB2));

    while (1){
        if(SET == gd_eval_key_state_get(KEY_WAKEUP)){
            gd_eval_led_on(LED2);
            delay_1ms(500);
            gd_eval_led_off(LED2);
            gd_eval_led_toggle(LED3);
        }
    }
}

由于板子上没有 LED 灯、按键,这里把 LED 灯跟按键部分去掉,保留串口部分,如下:

int main(void)
{
    /* configure systick */
    systick_config();
    /* initilize the LEDs, USART and key */
    gd_eval_com_init(EVAL_COM);
    
    /* print out the clock frequency of system, AHB, APB1 and APB2 */
    printf("\r\nCK_SYS is %d", rcu_clock_freq_get(CK_SYS));
    printf("\r\nCK_AHB is %d", rcu_clock_freq_get(CK_AHB));
    printf("\r\nCK_APB1 is %d", rcu_clock_freq_get(CK_APB1));
    printf("\r\nCK_APB2 is %d\r\n", rcu_clock_freq_get(CK_APB2));

    while (1){
			delay_1ms(500);
			printf("This is GD32E230F4P6\r\n");
    }
}

编译运行,结果如下:

posted @ 2021-07-25 23:18  哈拎  阅读(3157)  评论(0编辑  收藏  举报