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");
    }
}

編譯運行,結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM