在线时间717 小时
UID3127736
ST金币1923
蝴蝶豆140
注册时间2015-5-15
该用户从未签到
论坛元老
- 最后登录
- 2020-12-3
|
自从入坑STM32,便一发不可收拾,从裸机开始,学习了uCos,但这个RTOS只是入坑RTOS的垫脚石,实际工作中用的是FreeRTOS,免费的吗,必须选它了,虽然最开始接触FreeRTOS感觉好难,代码风格不是我喜欢的类型一脸茫然,之后开窍了,干嘛非得看源码,会用就行,通过不断的玩耍,逐渐深入认识了FreeRTOS,现在看来,看看源码也能看懂用的是如鱼得水,爱不释手,手上有板子就要拿来跑一下。
之后又偶遇rt-thread,只知道这个是国人写的,简单了解了一下,有点linux的风格,借鉴了一下设备驱动框架,拿来自己用了一下。其实自己一行是想入坑linux驱动开发,看了基本书了,开发板搞了两块,进展太慢,总是搁置,看完了书,照着实验也做了一下,之后有迷茫了,没办法,老是迷失方向。想一想这么大一个系统哪有那么容易学,慢慢用,多做实验吧,现在还在默默的看书。在这期间也想试着用一下rt-thread,但是资料就官网上的那几篇,而且移植还需要调整目录接口,平台是mdk,但是我有个毛病,管理代码不喜欢更改代码的目录接口,就那ST的库来说,基本就是整个Drivers复制过来,直接加入工程,好处就是这种代码库后期方便升级,而且越来越不喜欢用mdk这样的软件来写代码,更倾向于免费的 工具gcc,makefile,cmake等来开发,虽然现在调试主要还是用IAR,所以,又扔一边了,中间也有一次成功在stm32f767-nucleo上跑起来,也就是跑了一下串口。发现rt-thread的官网和论坛最近比较活跃,所以又折腾了一下,在stm32f412-nucleo上跑起来了,这次算是足足的被吸引了,就在刚刚,一个新的工具env,成功运行这个工具并编译成功,这个用起来确实方便,有packages管理功能,用menuconfig进行配置,再加上gcc来开发代码,很好很好,我想我要从FreeRTOS逐渐迁移到rt-thread上。贴两张图,我不是打广告的,只是感觉不错,分享一下,顺便晒晒板卡。
如何适配F412
首先在bsp目录先建一个目录,用来适配自己的板卡
一、建立applications,drivers,libraries三个目录,并从其他bsp从其他板卡(有f4的板卡)文件夹中复制rtconfig.h,rtconfig.py,SConscript,SConstruct,stm32_rom.ld这几个文件,可以参考官网的env使用说明,需要Kconfig这个文件,env这个工具使用起来确实很方便。这里不使用env工具。参考已有的f4的板卡,Libraries中存放stm32f4的库,有两个文件夹,分别是CMSIS,STM32F4xx_HAL_Driver,把applications,drivers,Libraries目录中的SConscript复制过来。
以下是目录结构
bsp
|----stm32f412-nucleo
|----applications
|----drivers
|----Libraries
|----CMSIS
|----STM32F4xx_HAL_Driver
CMSIS和STM32F4xx_HAL_Driver是直接从ST的库中复制过来的,这里就不展开目录结构了。
二、需要修改的文件
1、rtconfig.py
- # toolchains options
- ARCH='arm'
- CPU='cortex-m4'
- CROSS_TOOL='gcc'
复制代码- # cross_tool provides the cross compiler
- # EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
- if CROSS_TOOL == 'gcc':
- PLATFORM = 'gcc'
- EXEC_PATH = 'C:/gcc-arm-none-eabi-5_4-2016q3-20160926-win32/bin'
复制代码 这两处CROSS_TOOL和EXEC_PATH是要更改的。
rtconfig.h见附件,我的这个文件是env生成的,这个只是一些宏。注意不要使用RT_USING_USER_MAIN,这个宏打开后,kernel的初始化工作都是由kernel自动完成的,但是经过测试并不能成功运行,主要是入口函数的问题,关掉这个,从main入口开始需要调用kernel的初始化相关的代码。
二、CMSIS文件夹下的SConscript需要修改,以适配F4
- Import('rtconfig')
- from building import *
- cwd = GetCurrentDir()
- src = Split('''
- Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
- ''')
- CPPPATH = [cwd + '/Device/ST/STM32F4xx/Include', cwd + '/Include']
- CPPDEFINES = [rtconfig.STM32_TYPE]
- # add for startup script
- if rtconfig.CROSS_TOOL == 'gcc':
- src += ['Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f412zx.s']
- elif rtconfig.CROSS_TOOL == 'keil':
- src += ['Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f412zx.s']
- elif rtconfig.CROSS_TOOL == 'iar':
- src += ['Device/ST/STM32F4xx/Source/Templates/iar/startup_stm32f412zx.s']
- group = DefineGroup('CMSIS', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
- Return('group')
复制代码 三、board.h文件从需要定义SRAM的大小
- #define STM32_SRAM_SIZE 256
- #define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024)
复制代码 四、stm32_rom.ld中DATA的LENGTH要改成256k
- MEMORY
- {
- CODE (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */
- DATA (rw) : ORIGIN = 0x20000000, LENGTH = 256k /* 128K sram */
- }
复制代码 五、安装scons和python2.7,arm-none-eabi-gcc,之后进入stm32f412-nucleo后执行scons,编译成功
Libraries中的文件未上传,库太大
|
|