2024-12-13 16:31:51 +08:00
2024-12-11 14:30:26 +08:00
2024-12-03 15:33:54 +08:00
2024-12-11 15:42:11 +08:00
2024-12-03 15:33:54 +08:00
err
2024-12-06 17:51:11 +08:00
2024-12-13 16:31:51 +08:00
2024-12-03 15:33:54 +08:00
2024-12-03 15:33:54 +08:00
2024-12-05 19:54:31 +08:00
2024-12-03 15:33:54 +08:00
2024-12-03 15:33:54 +08:00
2024-12-10 18:04:12 +08:00
2024-12-03 15:33:54 +08:00

gd32e23x_template

本项目为GD32E230Fx系列的基于Clion的CMake开发的工程模板。本人暂未入门强行上强度放弃keil拥抱开源。遂尝试使用arm-none-eabi-gcc进行开发。 有幸寻得@mo10 大佬的帮助本项目的基础目录架构与CMakeLists.txt与toolchain.cmake均为大佬提供。

关于C标准库的printf的重写

在Keil开发中ARMClang有自己的microLIB所以直接调用然后重写fputc函数即可但在gcc中需要重写_write函数,本项目模板中已经在main.c中完成重写。 同时需要添加--spaces=nano.spaces编译参数。 但是printf本身占用flash比较大建议谨慎使用尤其是本项目搭建时候采用的型号为GD32E230F4V6内存非常有限重写后加上spaces设置目前能用。

添加源文件与头文件

ProjectDir/CMakeLists.txt中21行左右添加对应源文件即可。

set(TARGET_C_SRC
        ${CMAKE_SOURCE_DIR}/src/main.c
        ${CMAKE_SOURCE_DIR}/src/gd32e23x_it.c
        ${CMAKE_SOURCE_DIR}/src/systick.c
        ${CMAKE_SOURCE_DIR}/src/peripheral.c
)

关于链接脚本

注意芯片选型, 不同型号的芯片 FLASH 和 RAM 大小不同。需要修改链接脚本ld/gd32e23x_gcc.ld

芯片型号 FLASH RAM
GD32E230F4 16K 4K
GD32E230F8 64K 8K
/* memory map */
MEMORY
{
FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 16K
RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 4K
}

关于Startup文件

@mo10 大佬提供的一些想法,具体如下。但是我目前还没测试到实际的影响和作用范围,所以暂未同步进来,仅作为备忘内容

Reset_Handler:
    ldr   r0, =_sp
    mov   sp, r0
    ldr   r0, =_end
    msr   msplim, r0
/* copy the data segment into ram */
    movs  r1, #0
    b  LoopCopyDataInit

Ref

  1. 参考LD/Startup

https://github.com/Noveren/gd32e23x-template/blob/main/gd32e23x/template/linker.ld

https://github.com/Noveren/gd32e23x-template/blob/main/gd32e23x/template/startup.s

  1. 官方LD/Startup

使用Embedded Builder工具生成的C标准库生成的模板

Description
No description provided
Readme 14 MiB
2025-01-02 23:35:44 +08:00
Languages
C 98.5%
Assembly 0.8%
CMake 0.7%