008:MDK下基于STM32固件库V3.5.0的FreeRTOS移植笔记(转)

时间:2021-09-30 16:47:45

    有个小项目,用什么MCU无所谓,所以我想试试已经1年多没用的STM32,这么长时间没关注她,竟然多出来那么多系列,我还是使用103系列,这次我用的是STM32F103VCT6,主要是因为她有DAC,我需要,还因为她有USB,虽然我的小项目目前没有用到,但我想以后扩展功能,需要用到,再加上她不到20元,这么便宜,我不用都感觉自己吃亏了。。。http://tinyurl.com/bt9wfxg

    FreeRTOS官网上有STM32的移植,但固件库的版本太低了,竟然没有DAC的固件库,而且新老版本固件兼容性不是很好,我在想是把固件库移植到FreeRTOS的例程上,还是把FreeRTOS移植到固件库的例程上,为此我内心挣扎了好久,再加上我是个OS新手,uCOS才用了不到1年,此前我尝试过把uCos-III、RTT等移植到最新的固件库上,但都未果,为啥未果,我也来说道说道。。。

    uCOS-III的官方移植是基于107的,我用的是103,我着手改动,发现丫的竟然把STM32的固件库给改了一部分,这加深了我往103移植的难度和风险,因为我不能把全部代码看完,以确定他哪些改了哪些没改,而且他改了以后,固件库对各个CPU的兼容性支持较差,本来定义一个宏,就可以支持不同型号的STM32,所以放弃。。。http://tinyurl.com/bt9wfxg

    后来考虑过RTT,听说这是国产的,想支持下国货,由于我现在这个小项目不是正式产品,我可以随意使用我喜欢的OS,稳定性什么的不是很重要(呃。。。不要怀疑,是这样的)而且中文资料比较全,但文档看了一半开始退缩了,他开始跟我讲面向对象,讲C++的好处,我看了一年的VC都没学会,我这么笨的人,这么缺乏面向对象概念的人,怎么可能学会一个用C++思想的OS,所以放弃。。。http://tinyurl.com/bt9wfxg

    终于可以进入正题了,需要准备两个东西,一个是STM32固件库V3.5.0,另一个是FreeRTOS源代码V7.0.2,都是目前最新版的,我加入了链接,如果你是转发我的文章,可能这个链接就没了,所以转发注明出处http://tinyurl.com/bt9wfxg

    解压固件库,目录“..\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\MDK-ARM” 下打开工程文件,由于我用的是STM32F03VCT6,所以选择“STM3210E-EVAL”,同时打开解压FreeRTOS,打开关于103的例程keil版本,在这个目录下“..\FreeRTOSv7.0.2\FreeRTOSv7.0.2\Demo\CORTEX_STM32F103_Keil”

    这个是以VCT6为例移植,其他型号一样

    1、 参照FreeRtos中的STM32F10x.s修改startup_stm32f10x_hd.s(我用的是103VCT6所以选择这个文件,用其他CPU用其他启动文件)

    添加:

1 IMPORT xPortPendSVHandler
2 IMPORT xPortSysTickHandler
3 IMPORT vPortSVCHandler
4 //IMPORT vUARTInterruptHandler
5 //IMPORT vTimer2IntHandler

 

后两个不要添加,因为这不是FreeRTOS核心代码,是他demo用到的,我们不需要

    对应后面的中断入口地址需要更改

1 DCD     vPortSVCHandler            ; SVC_Handler
2
3 ...
4
5 DCD xPortPendSVHandler ; PendSV_Handler
6 DCD xPortSysTickHandler ; SysTick_Handler

 

    两者还有一点小小的不同是复位时进入main函数之前的那段代码,新版本固件库的启动代码中,在进入main()函数之前执行函数SystemInit()初始化了时钟,这个根据目标板不同,注意此段代码

    2、把..\FreeRTOSv7.0.2 文件夹下的Source文件夹复制到..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries 并重命名为FreeRTOS

    3、FreeRTOSConfig.h复制到“..\STM32F10x_StdPeriph_Lib_V3.5.0\Utilities\STM32_EVAL\STM3210E_EVAL”下http://tinyurl.com/bt9wfxg

    4、参照FreeRTOS例程在STM32的固件库例程中加入组FreeRTOS,并加入文件,我截个图吧

008:MDK下基于STM32固件库V3.5.0的FreeRTOS移植笔记(转)

    5、当然,在Keil里该包含的文件要包含,也截图吧

008:MDK下基于STM32固件库V3.5.0的FreeRTOS移植笔记(转)

    就这么简单,呃。。。我应该没落下什么东西吧。。。把原来的main函数修改一下,执行我的代码,我的任务已经可以调度了http://tinyurl.com/bt9wfxg

    补充一句,我很喜欢FreeRTOS变量和函数的命名风格 

本来想把我改的工程传上来,这附件怎么限制2M啊。。。固件库好几十兆,我这样看能看懂吧

文章有不对的地方请留言,也可以email我arm-cortex#qq.com

转载请注明出处。。。来自青岛小庄。。。2011.11.28。。。。arm-cortex#qq.com