历史上的今天
返回首页

历史上的今天

今天是: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(最近在看这个,就顺手下了).

keil5.24创建uCOSIII工程实现stm32实时操作系统(环境配置)


2: Keil创建工程

    依次project-new project- 选择位置,选择器件,直到出现下面窗口,以前的教程都是让你直接点击cancel,然后去手动移植uCOS,手动安装库文件,这不是傻么。

    按下图勾上core,startup,uCOSIII(还可以不用uCOS或者选择华为的liteOS,或者热门的FREERtos,前提是你在pack intall里面先在线安装了),点击确认,第一个工程就建设好了。

  keil5.24创建uCOSIII工程实现stm32实时操作系统(环境配置)


  请注意上面的蓝色部分,stdPeriph Drivers ,这就是ST的官方库,点击进入,用到IO就勾上GPIO,用到串口就勾上Usart... 其中有2个是选了其他的就必选的。

一个是RCC,一个是framwork,记得只要都变绿了就正常了,如果没有,就看看坐下,那些是关联的,也勾上。


3:工程文件预览

  下面是我的示例工程,我用到了GPIO口输出LED,模拟的时候可以看我的程序是否正常工作。

keil5.24创建uCOSIII工程实现stm32实时操作系统(环境配置)

记住里面的带锁的文件是不建议你修改的,这些文件是你的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波形图,如果有串口,还能监测串口。

keil5.24创建uCOSIII工程实现stm32实时操作系统(环境配置)


上面的图2的配置是可以随时修改的,也就是你想加个ADC,勾上,想用其他的外设库,勾上,前提是你知道你勾上的是啥。。。。

Keil会自动把文件加到你的工程。牢记,带锁的文件肯定是不建议你修改的。


推荐阅读

史海拾趣

Eureka Microelectronics Inc公司的发展小趣事

为了支持公司的持续发展和业务扩张,Eureka成功完成了多轮融资。这些融资不仅为公司提供了充足的资金支持,也吸引了众多投资者的关注。借助这些资金,Eureka加大了在研发、生产、销售等方面的投入,进一步提升了公司的竞争力和市场地位。同时,公司也积极开展战略合作,与上下游企业建立了紧密的合作关系,共同推动产业链的发展。

Crocus公司的发展小趣事

展望未来,Crocus将继续致力于TMR传感器技术的研发与创新。公司计划进一步拓展产品线,提升产品性能,满足更多领域的需求。同时,Crocus还将加强与产业链上下游企业的合作,共同推动整个电子行业的发展。

这五个故事展示了Crocus公司在电子行业中的发展历程和取得的成就。从创立初期的艰难探索到技术突破、产品升级、与Allegro的合并、市场拓展以及未来的持续创新,Crocus始终保持着积极进取的精神和不断创新的态度,为电子行业的发展做出了重要贡献。

Bce Sud公司的发展小趣事

随着公司规模的扩大和市场份额的提升,Bce Sud开始实施国际化战略。公司先后在多个国家和地区设立了研发中心和销售网络,进一步扩大了市场份额。通过与国际知名企业的合作与交流,Bce Sud不断提升自身的技术水平和国际竞争力。

Altus Technology Inc公司的发展小趣事

Altus深知人才是企业发展的根本。因此,公司一直注重人才培养和引进工作。通过建立完善的培训体系和激励机制,Altus吸引了大量优秀人才加入公司,并为他们提供了广阔的发展空间和职业晋升机会。这些人才在公司的各个岗位上发挥着重要作用,推动了公司的技术创新和市场拓展。同时,Altus还注重员工的福利待遇和文化建设,营造了积极向上、团结和谐的工作氛围。

Aristo-Craft/ L M P Inc公司的发展小趣事

品质是公司的生命线。Aristo-Craft/L M P Inc一直注重品质管理,从原材料采购到生产过程的每一个环节都进行严格把控。公司建立了完善的质量管理体系,并通过了多项国际质量认证。同时,公司还注重品牌建设,通过广告宣传、参加行业活动等方式提高品牌知名度和美誉度。

Global Connector Technology公司的发展小趣事
根据电动机和电源系统的要求,检查并调整继电器的参数设置。

问答坊 | AI 解惑

生命树教你如何获得优质低价的数码照片

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 …

查看全部问答>

C语言降龙十八掌——第二掌 printf藏玄机

这是一个真实的案例。在某型号的核心网络交换机设备中,为调试方便,实现了一个把内存内容从终端打印的功能,也就是dump memory,屏幕的左边显示十六进制,右边以ASCII形式显示, 用过UltraEdit的十六进制编辑功能朋友应该都很了解。显示ASCII码部 ...…

查看全部问答>

GPS/GPRS远程定位监控、的模块又朋友搞定没有呀,又的话来一块好吧

GPS/GPRS远程定位监控、的模块又朋友搞定没有呀,又的话来一块好吧 有搞定利用GPRS的UDP协议传送GPS信号到指定IP的模块的朋友吗?有的话跟帖,或者电话短消息,13838539322…

查看全部问答>

指纹模块 活体真皮指纹模块 生物射频指纹模块 指纹采集模块

指纹模块 活体真皮指纹模块 生物射频指纹模块 指纹锁模块、指纹采集模块、指纹采集头、指纹识别模块、指纹识别 C500 、C501  产品介绍: C500、C501是通用的指纹识别模块,采用了最先进的射频式指纹敏感器、高速信号处理器DSP、高性能 ...…

查看全部问答>

IAREWSTM8还是有些粗糙呀,CASE语句处理太严格

在一个 switch() 语句里,新添加一个分支 case 20: //正在编辑 A_ON_Time 参数,LED1长亮       break; 这种情况下编译器跳出严重错误,如下图所示,然后找了半天错误,最后发现在case 20里添加一句话如下面所示代码: ...…

查看全部问答>

2011年 预测控制类 雷达资料

本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 2011年 预测控制类 雷达资料 我想下其他的东西需要下载币,无奈只得收费了 [ 本帖最后由 lightstar1989 于 2011-8-27 18:34 编辑 ]  …

查看全部问答>

电平相反

max7221片选端低电平有效,clk上升沿din接收数据,可我仿真时,片选端一直高电平啊,clk也不见脉冲,只看见低电平,就算脉冲太快,看不到,片选端也不应该高电平啊,所驱动的数码管还显示呢。哎。。。。。。…

查看全部问答>

flashmagic怎么下呀

没有账号,也没有注册的地方。高手指点。…

查看全部问答>

【晒样片】+TI芯片申请小体会

     TI是非常大方的一个公司,对于学生党来说,芯片性能很高,足以应付各种比赛和日常的一些小的项目。      首先,个人认为TI样片申请主要是两个目的,第一个是对芯片性能进行测试,看用户体验,虽然对 ...…

查看全部问答>