你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407 COSIS-RTOS(原RTX)入门教程

[复制链接]
adersonl 发布时间:2017-5-9 15:51
先申明我也是RTX的初学者本教程参考了:安富莱RTX教程iChamber的博客
硬件平台:STM32F407IGT6核心板
固件库版本:V1.0.2
软件平台:MDK 5.21.1.0
调试器是:JLINK
选择RTX的原因是:小巧,速度快,移植方便(基本不用移植)




在使用CMSIS-RTOS之前,请确保你有MDK有RTX的license或者是专业版的MDK的license,否则会报错,这个教程的目的是使用RTX,不是去分析RTX的源码所以不会去分析RTX的一些细节部分,我只是写下我的学习笔记供后人参考。
先建立一个工程这边不再多说,在最后我会贴上我的工程,我的工程是从安富莱V5开发板上搬过来的,修改了部分LED的管脚达到第一个实验的目的
1.设置Manage Run-Time Envirsnment,勾选CMSIS->CORE,RTOS(API)->Keil RTX,然后确认
p1.png
之后工程栏会出现如下的一组Group
p2.png
确认无误后可以开始编译,没有问题的话,应该是没有错误的
RTX的配置项全部在RTX_Conf_CM.c中,双击打开后选择
p3.png
这边是RTX的一些配置文件,暂时先不用设置,就这样就可以

  1. #include "bsp.h"
  2. #include "cmsis_os.h"

  3. void Led (void const *arg)
  4. {
  5.         for (;;)
  6.         {
  7.                 bsp_LedToggle(1);
  8.                 osDelay(100);  /* wait for 100ms   */       
  9.         }
  10. }

  11. void Led2(void const *arg)
  12. {
  13.     for(;;)
  14.     {
  15.         bsp_LedToggle(2);
  16.         osDelay(200);
  17.     }

  18. }

  19. void Led3(void const *arg)
  20. {
  21.     for(;;)
  22.     {
  23.         bsp_LedToggle(3);
  24.         osDelay(300);
  25.     }
  26. }
  27. osThreadDef(Led2, osPriorityNormal, 1, 0);
  28. osThreadDef(Led3, osPriorityNormal, 1, 0);
  29. osThreadDef(Led, osPriorityNormal, 1, 512);


  30. int main (void) {
  31.     bsp_Init();//初始化了GPIO
  32.         osThreadCreate(osThread(Led), NULL);
  33.     osThreadCreate(osThread(Led2), NULL);
  34.     osThreadCreate(osThread(Led3), NULL);
  35.     osDelay(osWaitForever);
  36.   while(1);
  37. }
复制代码
这边初始化了三个线程,线程是由osThreadCreate这个函数来创建,在线程创建的时候是可以给他传一个参数,因为这边我不需要传参数所以直接NULL即可。创建线程的时候一般还需要给该线程分配一个栈,用来保存上下文信息,线程栈是由线程结构体来分配的osThreadDef(Led2, osPriorityNormal, 1, 0)最后一个参数0就是栈的大小单位为字节,如果写0的话,RTX会为该线程分配一个默认大小的栈。因为RTX是Keil自家的,所以调试时非常方便,首先编译以上的代码然后打开调试

p4.png
将system and Thread Viewer勾上,Event Viewer在我这边是无法使用的,各位可以试一下,提示一下这个是需要用到SWO这个接口的勾上以后还需要将View->periodic window update勾上,然后界面如下图所示
p5.png

然后点全速运行,线程预览窗口
p6.png
可以很方便查看该线程的运行的状态,和优先级,还有线程栈的使用率。到这边的话,这个调试功能只有RTX才有,其他的RTOS必须要使用其他的收费辅助软件才可以查看
p7.png
这是三个线程的IO翻转操作,可以看到三个IO几乎是同时翻转,测了下,两组波形相差了2.79个us,之前也有用FPGA做过,那个是完全没有延时的。


——————————————————广告时间——————————————————————
IMG_1383.JPG
这个是我做一款调试器,带有一个JINK和两路串口还有一个逻辑分析仪,除逻辑分析以外只占用一个USB接口,可以用公头或者MircoUSB线,以上的代码的仿真调试,小波形抓取,只使用了这一个调试工具,有需要的可以联系我QQ:1501873752
收藏 4 评论5 发布时间:2017-5-9 15:51

举报

5个回答
QianFan 回答时间:2017-5-9 16:24:28
逻辑分析仪兼容salease的?
adersonl 回答时间:2017-5-9 16:46:40
QianFan 发表于 2017-5-9 16:24
逻辑分析仪兼容salease的?

嗯,
huaiqiao 回答时间:2017-5-9 20:48:39
keil5自带的这个RTX,有个不好的地方就是他集成在了mdk中,需要添加。。。。。
好像不能在工程文件夹下,不能将RTX相关的库啊之类的保存吧?我记得
adersonl 回答时间:2017-5-9 20:57:36
huaiqiao 发表于 2017-5-9 20:48
keil5自带的这个RTX,有个不好的地方就是他集成在了mdk中,需要添加。。。。。
好像不能在工程文件夹下,不 ...

可以啊,公开源文件的,不过现在换成CMSIS RTOS API全部换了
huaiqiao 回答时间:2017-5-11 22:45:16
adersonl 发表于 2017-5-9 20:57
可以啊,公开源文件的,不过现在换成CMSIS RTOS API全部换了

是的呢。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版