历史上的今天
今天是:2024年10月06日(星期日)
2018年10月06日 | keil5.24创建uCOSIII工程实现stm32实时操作系统(环境配置)
2018-10-06 来源:eefocus
自从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会自动把文件加到你的工程。牢记,带锁的文件肯定是不建议你修改的。
史海拾趣
|
这是一个真实的案例。在某型号的核心网络交换机设备中,为调试方便,实现了一个把内存内容从终端打印的功能,也就是dump memory,屏幕的左边显示十六进制,右边以ASCII形式显示, 用过UltraEdit的十六进制编辑功能朋友应该都很了解。显示ASCII码部 ...… 查看全部问答> |
|
GPS/GPRS远程定位监控、的模块又朋友搞定没有呀,又的话来一块好吧 GPS/GPRS远程定位监控、的模块又朋友搞定没有呀,又的话来一块好吧 有搞定利用GPRS的UDP协议传送GPS信号到指定IP的模块的朋友吗?有的话跟帖,或者电话短消息,13838539322… 查看全部问答> |
|
指纹模块 活体真皮指纹模块 生物射频指纹模块 指纹锁模块、指纹采集模块、指纹采集头、指纹识别模块、指纹识别 C500 、C501 产品介绍: C500、C501是通用的指纹识别模块,采用了最先进的射频式指纹敏感器、高速信号处理器DSP、高性能 ...… 查看全部问答> |
|
在一个 switch() 语句里,新添加一个分支 case 20: //正在编辑 A_ON_Time 参数,LED1长亮 break; 这种情况下编译器跳出严重错误,如下图所示,然后找了半天错误,最后发现在case 20里添加一句话如下面所示代码: ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 2011年 预测控制类 雷达资料 我想下其他的东西需要下载币,无奈只得收费了 [ 本帖最后由 lightstar1989 于 2011-8-27 18:34 编辑 ] … 查看全部问答> |
|
TI是非常大方的一个公司,对于学生党来说,芯片性能很高,足以应付各种比赛和日常的一些小的项目。 首先,个人认为TI样片申请主要是两个目的,第一个是对芯片性能进行测试,看用户体验,虽然对 ...… 查看全部问答> |




