摘要
硬件 |
描述 |
芯片型号 |
GD32F350R8T6 |
CPU |
ARM Cortex M4 |
主频 |
108M |
片内SRAM |
16K |
片内FLASH |
64K |
下载器 |
GD-Link |
环境搭建
BSP基础工程
系统时钟
串口驱动
验证工程
完成BSP总结。
环境搭建
BSP基础工程
基础模板:首先看看RT-Thread代码仓库中已有的BSP已存在GD的多款芯片,Cortex-M3内核,Cortex-M4内核,RISC-V内核。而我要移植的是Cortex-M4内核。在原有的BSP中,gd32450z-eval就是一个Cortex-M4内核,所以只需要把它复制一份,并修改文件名为:gd32350r-eval。这样就有一个基础的工程。然后就开始增删改查,完成最终的BSP。
配置Kconfig:修改根目录的Kconfig文件,修改内容如下图。①修改成对应的SOC名字,②因为GD32350R不包含SDRAM和只有两路串口,所以去除不相关的配置。
链接脚本:修改KEIL5的连接脚本,因为GD32F350R8T6的flash大小为64K,SRAM大小为16K。所以要进行修改。其实这一步不修改也是可以的,可以在KEIL中设置,修改内容如下图:
修改库:
下载官方的库文件,下载链接:http://www.gd32mcu.com/cn/download/7?kw=GD32F3
删除BSP的Libraries目录下除了SConscript文件的其他内容
然后解压复制目录(GD32F3x0_Firmware_Library_V2.0.2\SDK v2.0.2\GD32F3x0_Firmware_Library\Firmware)下的所有内容到BSP中Libraries目录的文件。
修改Libraries中SConscript文件。修改内容如下:
修改KEIL的模板工程。双击:template.uvprojx,如下图:
修改驱动文件夹,在drivers目录中除了board.c,board.h和SConscript文件保留,其他的全部删除。然后添加两个文件:drv_usart.c和drv_usart.h。
修改驱动文件夹下的脚本SConscript。
添加gd32f3x0_libopt.h文件到BSP的drivers目录中,gd32f3x0_libopt.h存在固件库路径:\GD32F3x0_Firmware_Library_V2.0.2\SDK v2.0.2\GD32F3x0_Firmware_Library\Template。
menuconfig配置。
-> RT-Thread Components
-> Network
-> Socket abstraction layer
[ ] Enable socket abstraction layer
-> RT-Thread Components
-> Network
-> Network interface device
[ ] Enable network interface device
-> RT-Thread Components
-> Network
-> light weight TCP/IP stack
[ ] Enable lwIP stack
-> RT-Thread Components
-> POSIX layer and C standard library
[ ] Enable libc APIs from toolchain
-> RT-Thread Components
-> Device virtual file system
[ ] Using device virtual file system
重新生成MDK5的工程,在env中执行:scons --target=mdk5.
> scons --target=mdk5
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build\applications\main.o
CC build\drivers\board.o
CC build\drivers\drv_usart.o
CC build\kernel\components\drivers\misc\pin.o
CC build\kernel\components\drivers\serial\serial.o
CC build\kernel\components\drivers\src\completion.o
CC build\kernel\components\drivers\src\dataqueue.o
....
....
AS Libraries\CMSIS\GD\GD32F3x0\Source\ARM\startup_gd32f3x0.o
CC Libraries\CMSIS\GD\GD32F3x0\Source\system_gd32f3x0.o
LINK rtthread-gd32f3x0.elf
fromelf --bin rtthread-gd32f3x0.elf --output rtthread.bin
fromelf -z rtthread-gd32f3x0.elf
scons: done building targets.
修改board.h中ram的大小配置。将128修改为16即可。
编译测试。双击:project.uvprojx文件
系统时钟
void SystemClock_Config(void)
{
SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
NVIC_SetPriority(SysTick_IRQn, 0);
}
void SysTick_Handler(void)
{
/* enter interrupt */
rt_interrupt_enter();
rt_tick_increase();
/* leave interrupt */
rt_interrupt_leave();
}
串口驱动
一个基本的BSP中,串口是必不可少的,所以还需要编写串口驱动
在GD32F350中有两组驱动:UART0和UART1。
在RTT中只需要对接好串口框架中的(struct rt_uart_ops)即可。
static struct rt_uart_ops usart_ops =
{
gd32_usart_configure,
gd32_usart_control,
gd32_usart_putc,
gd32_usart_getc,
gd32_usart_dma_transmit,
};
\ | /
- RT - Thread Operating System
/ | \ 4.0.4 build Jun 22 2021
2006 - 2021 Copyright by rt-thread team
msh >
验证工程
完成BSP总结
关于RT-THREAD的移植还是比较方便的,主要是复杂地方官方都已经做好了,如调度器。
而作者移植的Cortex M4是一个比较通用的内核,rtt提供的libcpu已经包含了相关的内容,所以无需造轮子。
关于GD这款芯片的评价,我觉得官方提供的库中,API太不优雅了。这个是指的改进的,就好比一个GPIO的API就多达15个。
在上述中内容,除了适配了串口驱动,我还是适配了GPIO驱动,由于资源的问题,其他驱动我就没在适配了。
关于兆易创新的GD32350R评估板的BSP目前我也已经提交到了RT-THREAD,应该过几天就可以merge到主仓库中。
1.机器学习的未来在何方?
2.Cadence“系统动力双剑”,这么霸气的工具得用起来!
3.干货 | 分享一个实用的、可应用于单片机的内存管理模块
4.MCU、RTOS和物联网之间有什么关系?
5.香港突发:500万芯片抢劫案!全程搜捕!
6.肝 | 一种串口高效收发思路及方案
免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。