自从ARM keil升级到keil5系列版本后,Keil工具对操作系统,以及各种库文件的移植大大简化了
只需要动动手指,勾选一些库文件就能实现移植工作了。
1:假设你安装了keil 5.24(稍早点版本支持的os偏少),并且下载了你需要的支持包。
首先,安装KEIL5,简单 不作描述
其次,下载 PACK 简单不作描述(根据具体的STM32期间选型相应的DFP文件)
下载需要的middle
下载需要的ucosiii
假设你用MCU芯片是stm32f10x,就点击pack install 左边选择器件stm32f1系列,右边把你要用的OS,arm基本库,stm32f10x_DFP就是stm的库支持包,以及编译器自动在线更新好。
例如下图,我选择了DFP,CMSIS,编译器,middleware,uCOSIII, freertos9(最近在看这个,就顺手下了).
2: Keil创建工程
依次project-new project- 选择位置,选择器件,直到出现下面窗口,以前的教程都是让你直接点击cancel,然后去手动移植uCOS,手动安装库文件,这不是傻么。
按下图勾上core,startup,uCOSIII(还可以不用uCOS或者选择华为的liteOS,或者热门的FREERtos,前提是你在pack intall里面先在线安装了),点击确认,第一个工程就建设好了。
请注意上面的蓝色部分,stdPeriph Drivers ,这就是ST的官方库,点击进入,用到IO就勾上GPIO,用到串口就勾上Usart... 其中有2个是选了其他的就必选的。
一个是RCC,一个是framwork,记得只要都变绿了就正常了,如果没有,就看看坐下,那些是关联的,也勾上。
3:工程文件预览
下面是我的示例工程,我用到了GPIO口输出LED,模拟的时候可以看我的程序是否正常工作。
记住里面的带锁的文件是不建议你修改的,这些文件是你的keil工程公用的,在Keil目录下。
不带锁的文件都是给你修改的
RTE_Device.h是你的外设配置文件,打开后点击下面的config wizard标签,可以通过勾选来配置你的外设参数,例如使用端口,频率,复用映射之类的。
设置后会关联stm32f10x.conf.h,所以后者你不用管。
system_stm32f10x.c是系统初始化程序,新版本systeminit是自动调用,然后跳到main(的,你如果需要在main前初始化系统某些参数可以修改。
startup_stm32f10x_hd.s NVIC的中断映射表,非常关键,需要修改,后面会提到。
RTOS下面是uCOSIII的文件。
其中app_cfg.c是空文件,是你的app.c的头文件,不过我们一般都是用main.c main.h...
cpu_cfg.h 和 lib_cfg.g 是几个简单的CPU和Lib的参数,基本不用修改。
os_cfg.h 是OS的裁剪配置文件,就是关闭一些你用不上的函数和功能块,例如消息队列Q你没用这个功能,那么Q,Q的del,abort函数等,都能禁止,主要是减少代码大小用的。按需要修改
os_app_cfg.h 系统心跳频率,以及几个系统任务stat systick tmr idle的优先级,堆栈大小等的配置参数。按需要修改。
os_cpu.c.c 没错,整个OS就这一个.c能让你修改,因为这就是所有的空钩子函数,你需要用到就填写代码好了,还有systick中断处理函数也在这里。
4 创建app.c添加到source gourp1 喜欢就单击改个名字不叫source group1..
写上你的main函数,创建你几个任务。
例如任务1创建任务23,2亮闪烁LED1, 3闪烁LED2。
但是你会发现uCOS没工作。
uCOS工作,需要几个条件。
1:启用systick定时器。
OS_CPU_SysTickInit(9000); // 72M下,8分频,1ms心跳的初始值。
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //上面自带的初始化频率是72M,这里选择外部时钟 HCLK/8
然后OSInit(); 创建主任务,OSStart();
2 中断向量映射
OS需要用到2个中断,一个是PendSV_handler,一个是SysTick_handler。
OS自带了这2个中断函数,但是名字是OS_CPU_PendSV_handler一个是OS_CPU_SysTick_handler.
以前的做法之一是把后面的改成前面的名字。但是这个新版本os_cpu_a.s是禁止修改的,说明keil不建议这样做。
你如果不想用系统的,就得自己写2个同名函数,但是没必要。
那么我们直接修改中断向量表文件,把startup_stm32f10x_hd.s 里面的PendSV_handler全替换成OS_CPU_PendSV_handler。
把SysTick_handler全替换成OS_CPU_SysTick_handler。 这个目的和结果和改名是一样的。
不同芯片的中断相连表文件会不同,如果不用OS,stm标准库以前带了个stm32f10x_it.c文件,里面就是几个系统中断的同名函数。
5.24是没有stm32f10x_it.c,bsp.c之类文件的。如果你没用到uCOS,就需要自己写这些函数了。
5 模拟仿真
按下面配置就能模拟仿真,并且监视IO波形图,如果有串口,还能监测串口。
上面的图2的配置是可以随时修改的,也就是你想加个ADC,勾上,想用其他的外设库,勾上,前提是你知道你勾上的是啥。。。。
Keil会自动把文件加到你的工程。牢记,带锁的文件肯定是不建议你修改的。
上一篇:STM32跑RTOS操作系统之ucosii串口中断实现
下一篇:关于stm32HardFault_Handler异常(死机)的处理
推荐阅读最新更新时间:2024-03-16 16:15