嵌入式技术william hill官网
直播中

刘伟

7年用户 1663经验值
私信 关注
[经验]

告诉你怎么投机取巧移植RT-Thread到HC32L136芯片上

1.jpg

2.jpg

拿到这个板子,首先肯定是去看看RT-THREAD是否已经包含这个BSP了,答案:没有这个HC32L13X系列的BSP。那必须把他移植个RTT,然后PR一个BSP上去才行。

移植M系列的BSP还是比较简单的,我主要分为5个步骤:

1、环境搭建

2、BSP基础工程

3、GPIO驱动

4、串口驱动

5、完成BSP总结

环境搭建

编程器,板载有CMSIS-DAP,也可以使用JLINK进行下载调试。

集成开发环境,安装KEIL5,IAR。

串口助手使用的是SecureCRT。

BSP基础工程

其实移植RT-THREAD到一些比较通用的内核还是比较方便的,因为可以投机取巧。那接下来告诉你怎么投机取巧移植RT-Thread到国产MCU。

本文只适配KEIL5的环境,GCC、KEIL4和IAR环境不做讲解。

基础模板:首先看看RT-Thread代码仓库中已有的BSP已存在华大的芯片hc32f4a0。而我要移植的是HC32L136,Cortex-M0内核。拷贝hc32f4a0工程,这样就有一个基础的工程。然后就开始增删改查,完成最终的BSP。

1.jpg

修改board文件夹下的board.c,board.h,将主频修改为24MHz。

1.jpg

修改board/Kconfig文件,修改内容如下图。修改成对应的SOC名字,所以去除不相关的配置。

1.jpg

2.jpg

链接脚本:修改KEIL5的连接脚本,flash大小为64K,SRAM大小为8K。所以要进行修改。其实这一步不修改也是可以的,可以在KEIL中设置,修改内容如下图:

1.jpg

修改库:

1、下载HC32L130_SDK。

2、删除BSP的Libraries目录下除了SConscript文件的其他内容

3、Bsp的Libraries目录下,增加HC32L136_StdPeriph_Driver目录,将HC32L130_SDK/drivers的文件拷贝到HC32L136_StdPeriph_Drive目录下。

4、将SDK中的启动文件startup_hc32l136.s,IAR和MDK两个版本的文件拷贝分别拷贝到

HC32L136_StdPeriph_Drive/CMSIS/Device/HDSC/HC32L136/Source/ARM/startup_hc32l136.S,

HC32L136_StdPeriph_Drive/CMSIS/Device/HDSC/HC32L136/Source/IAR/startup_hc32l136.S

修改Libraries中SConscript文件。修改内容如下:

1.jpg

修改驱动文件夹,保留如下文件,如何修改驱动,稍后再讲,假定现在都已编写完成。

1.jpg

修改KEIL的模板工程。双击:template.uvprojx,如下图:

1.jpg

2.jpg

3.jpg

修改驱动文件夹下的脚本SConscript

1.jpg

修改bsp目录下的rtconfig.py文件,将m4替换为m0,将HC32F460替换为HC32L136。

1.jpg

menuconfig配置,关闭文件系统,将main和shell的任务堆栈改为512。

1.jpg

2.jpg

生成mdk工程,scons —target=mdk5

1.jpg

PIN驱动

为了跟其他rt—thread工程一样用统一的方法控制GPIO,移植PIN功能很有必要。关键是要实现好IO port和pin的映射关系,中断的映射关系。

1.jpg

串口驱动

一个基本的BSP中,串口是必不可少的,所以还需要编写串口驱动

在hc32l136中有两组驱动:UART0和UART1,lpuart暂时没有实现。由于改芯片的驱动没有人实现过,我们需要自己去实现,参考其他bsp的例子,只能慢慢磨了。

1.jpg

完成BSP总结

关于RT-THREAD的移植还是比较方便的,主要是复杂地方官方都已经做好了,如调度器。Gpio和Uart驱动这块,由于没有写好的例子,所以要自己花一些例子实现了。所以也难免会存在bug,希望大家多多谅解。

关于华大这款芯片,修改了库函数的Uart_SendData。测试中发现,如果在console中疯狂按下Tab键,会卡死在while(FALSE == Uart_GetStatus(u8Idx,UartTC))。所以将库函数做了修改。

1.jpg

原作者:ching

更多回帖

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