STM32中USATR2_RTX怎么用

Keil5创建基于RTX的STM32工程
从keil4到keil5,keil的功能越来越强大。特别是keil5之后,出现了RTE配置环境,我感觉特别方便,省去了那么多移植步骤,对于像我们这种“懒癌”真是福音啊!RTX这款实时操作系统还是我在逛论坛是发现的,不看不知道,一看忘不了啊!从此就觉得得好好研习一番,不过实时操作系统原理基本都一样。但是RTX有它独特之处,就是它中断延时对M3/M4内核可以实现零等待,带有免版税,确定性的RTOS。话不多说,咱们开始创建RTX工程。前提是你得安装了keil5,我的是5.22版本。
1.创建一个新工程
2.选择你的平台芯片。(我的是F103VET6)
3.勾选必要的组件。这里RTOS有2个版本,我选择的是版本4,版本区别可以点击后面的Description链接查看说明。当勾选其中的一个组件时,RTE窗口会提示缺少的组件(感叹标志),此时缺少什么就勾选什么
此图是描述RTOS如何使用,就相当于用户手册一样
4.一个完整工程必要的组件。我创建的工程只是简单的使用实时系统闪了个灯。RCC、GPIO、Framework必不可少
5.勾选完组件后,点击OK,回到工程界面。然后给Source Group1增加mian.c文件
6.选择Use Code Template ,添加mian.c文件
7.配置RTE_Device.h 和 RTX_Conf_CM.c文件。RTE_devie.h文件要配置正确的时钟系统
配置RTXConf,这些选项跟UCOSIII很相似,基本上看命名上就能读懂
8.添加bsp文件到工程中去,并增加头文件路径
编写用户任务
RTX的任务编写同UCOS差不多,包括线程函数、线程ID、线程对象。其实,注释已经给你很好的提示啦,只需要按着照做就可以啦
编写完后,就可以编译下载运行了。回顾流程,RTX使用还是非常简单。没有像UCOS、FreeRTOS移植那么麻烦。当然,你使用keil4还是得移植,其移植也非常简单。另外,可能有读者发现没有中断服务文件stm32f10x_it.c,当你要使用譬如串口中断服务时,需要添加中断服务函数,这个文件的添加跟mian.c的文件是一样的。当然,读者也可以将中断服务函数写在bsp文件里,但这不是我的习惯,我比较喜欢统一管理的方式。
当然,更方便的是调试功能,从Debug选项卡选择OS Support-&System&and Thread&viewr,可以看到当前系统运行的线程状态。另一个Event viewr选型则需要平台的调试接口留出swo接口才行,也就是标准的SWD接口。否则是用不了此功能。
RTX和keil5联合使用,就如同双剑合璧,历害无比。使用keil调试RTX也是非常直观的,虽然ucos也有uc probe工具可以调试使用,但那个需要收费,不是很方便。况且,keil5的RTE环境还可以直接创建FileSystem、GUI、ETH、USB等复杂的工程,非常方便。
没有更多推荐了,21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
STM32 如何快速创建 FREERTOS和RTX 工程
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
安装 cubeMX&&由于使用MX下载固件库速度那是不说了相当慢啊&&所以下载 STM32CUBEF0固件库然后下图安装
安装之后&&新建一个工程 选择STM32F072RBT6
PINOUT 勾选&&FREERTOS和 USART
因为我们调试可能需要使用
点击软件上方&&齿轮键生成&&keil 工程&&至此
MX基于 HAL的库 生成完毕
使用MDK 打开工程
从上到下 的组依次为&&OS 的C文件
.s 启动文件
CMSIS中间件文件
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
其中 在 第一组中的 cmsis_os.c 中实现了&&cmsis_os&&到FREERTOS 的中间层转换& &稍后会讨论其中一处代码
接下来&&添加自己的代码&&首先添加 072 上面LED吧&&板子不在身边&&记得是PA5 控制
先看看&&main.c 的 64 到 105行
int main(void)
{
&&/* USER CODE BEGIN 1 */
&&/* USER CODE END 1 */
&&/* MCU Configuration----------------------------------------------------------*/
&&/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
&&HAL_Init();
&&/* Configure the system clock */
&&SystemClock_Config();
&&/* Initialize all configured peripherals */
&&MX_GPIO_Init();
&&MX_USART2_UART_Init();
&&/* USER CODE BEGIN 2 */
&&/* USER CODE END 2 */
&&/* Init code generated for FreeRTOS */
&&/* Create Start thread */
&&osThreadDef(USER_Thread, StartThread, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
&&osThreadCreate (osThread(USER_Thread), NULL);
&&/* Start scheduler */
&&osKernelStart(NULL, NULL);
&&/* We should never get here as control is now taken by the scheduler */
&&/* USER CODE BEGIN 3 */
&&/* Infinite loop */
&&while (1)
&&{
&&}
&&/* USER CODE END 3 */
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
mian函数&&C代码的入口&&初始化一些硬件后& & osThreadDef(USER_Thread, StartThread, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
& && &osThreadCreate (osThread(USER_Thread), NULL);
& && &/* Start scheduler */
& && &osKernelStart(NULL, NULL);复制代码定义了一个 线程 USER_Thread 然后启动OS&&
注意 osThreadDef&&是一个宏&&定义一个用于描述&&线程的结构体&&并不是执行函数
宏的第二项参数 StartThread 为线程 入口函数地址。
至此mian函数的工作结束了 OS将转向 就绪线程并永不返回&&也就是执行StartThread&&
修改&&StartThrea函数 如下
/* USER CODE BEGIN 4 */
void Nucleo_072_Led(const void *par);
/* USER CODE END 4 */
static void StartThread(void const * argument)
{
&&/* USER CODE BEGIN 5 */
&&osThreadDef(LED_Thread, Nucleo_072_Led, osPriorityNormal, 0, configMINIMAL_STACK_SIZE);
&&osThreadCreate (osThread(LED_Thread), NULL);
&&/* Infinite loop */
&&for(;;)
&&{
& & osDelay(1);
&&}
&&/* USER CODE END 5 */
}复制代码添加一个 LED 函数void Nucleo_072_Led(const void *par)
{
& && &&&GPIO_InitTypeDef GPIO_InitS
&&__GPIOA_CLK_ENABLE();
& && &&&
& && && &&&GPIO_InitStruct.Pin = GPIO_PIN_5;
& & GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
& & GPIO_InitStruct.Pull = GPIO_PULLUP;
& & GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
& & HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
& && &&&
& && &&&for(;;)
& && &&&{
& && && && && & GPIOA-&ODR^=GPIO_PIN_5;// PA5取反 LED闪烁
& && && && && & osDelay(500);
& && &&&}
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
到这里可以编译下载到板子上运行 观察现象了
下面创建 RXT 的工程&&新建一个工程&&
勾选 如下选项
红框 不要添加&&不知为何&&楼主添加 MDK的 startup 编译通不过
F4 的工程没有包含&&HAL&&接下来 需要自行添加HAL 库
把原来的 main.c 复制一份更名为&&rtx_main.c
文件添加完毕
接下来定义 头文件目录和 系统宏
修改 rtx_main.c&&下面两处需要修改
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
资深技术员, 积分 415, 距离下一级还需 85 积分
&&{
&&osThreadDef( StartThread, osPriorityNormal, 0, 0);
&&osThreadCreate (osThread(StartThread), NULL);
& && &&&}
osThreadDef( Nucleo_072_Led, osPriorityNormal, 0, 0);
&&osThreadCreate (osThread(Nucleo_072_Led), NULL);复制代码不知为何&&ST写的 中间件和 MDK的 接口有一点差距&&所以 创建线程的地方需要如上修改
修改 stm32f0xx_hal_conf.h
添加 图示内容&&不出意外&&下面 将可以直接编译了!!
写的有些多了&&本来想 继续写 RTOS 基于串口的&&应用&&太长了 下次发帖写了
下面提出一个讨论 MX 创建的&&工程 FREERTOS 中 cmsis_os.c 中 创建一个信号量&&
osSemaphoreCreate参数 count 直接
传递给 xSemaphoreCreateCounting的两个形参&&
原型#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) )
复制代码该宏创建一个 数值型信号量 第一个参数是 信号量最大数值&&第二个则为&&初始化值
基于串口使用信号量&&那么需要如下要求
假设 usart_sem 为串口使用的信号量
每收到一个数据 usart_sem ++&&缓冲 1024字节
需要数据的线程 osSemaphoreWait(usart_sem ); 当有数据时 线程被激活&&获取数据
如此我们知道 这个信号量的 最大值应为1024
可是使用 ST 的cmsis_os osSemaphoreCreate 创建一个信号亮 osSemaphoreCreate(0,1024);
会出现这样的问题 !&&此信号量 被赋予初值1024&&意味着 这个信号量将可以被osSemaphoreWait 1024次
显然这不是我们想要
通常&&我们需要的数值型信号量&&最大值可以很大&&但是初值 基本为0,或1
不懂&&这样设计意义何在?
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
STM32移植RTX遇到一个问题
资深技术员, 积分 482, 距离下一级还需 18 积分
资深技术员, 积分 482, 距离下一级还需 18 积分
资深技术员, 积分 482, 距离下一级还需 18 积分
资深技术员, 积分 482, 距离下一级还需 18 积分
在STM32上移植RTX遇到一个问题,程序运行到
if (os_mbx_wait (USART_MBX_RX[ctrl0], (void **)&ptrMsg, timeout) == OS_R_TMO)
这个函数的时候就死在这边了,感觉是在一直等待消息,从寄存器看USART数据已经接收到了,不知道为什么!
请用过的帮忙指点一下,谢谢啊!
, , , , , ,
---------------------
---------------------
USART 的接口驱动有没有问题呢
资深技术员, 积分 482, 距离下一级还需 18 积分
资深技术员, 积分 482, 距离下一级还需 18 积分
资深技术员, 积分 482, 距离下一级还需 18 积分
资深技术员, 积分 482, 距离下一级还需 18 积分
USART的接口没有问题,因为我在上位机可以收到STM32发的数据,看USART的寄存器,也收到了上位机发过来的数据了
高级技术员, 积分 576, 距离下一级还需 424 积分
高级技术员, 积分 576, 距离下一级还需 424 积分
高级技术员, 积分 576, 距离下一级还需 424 积分
高级技术员, 积分 576, 距离下一级还需 424 积分
鄙人的STM32一直是裸奔的。呵呵
感觉STM32移植系统的话,勉强吧。
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
你的timeout时间值是好多?我使用rtx_can也遇到了,当是0的时候,死了。当等于0xffff时接收到邮箱都没有处理。
助理工程师, 积分 1129, 距离下一级还需 871 积分
助理工程师, 积分 1129, 距离下一级还需 871 积分
助理工程师, 积分 1129, 距离下一级还需 871 积分
助理工程师, 积分 1129, 距离下一级还需 871 积分
& & RTX,邮箱中等待邮件,在发送邮件的吗?在哪发送的?
& & 光有等待邮件,没有发送邮件的,当然只能是死等或等死。
资深工程师, 积分 16330, 距离下一级还需 3670 积分
资深工程师, 积分 16330, 距离下一级还需 3670 积分
资深工程师, 积分 16330, 距离下一级还需 3670 积分
资深工程师, 积分 16330, 距离下一级还需 3670 积分
移植系统&&难度还是有点的&&呵呵
扫描二维码,随时随地手机跟帖
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
涓涓之细流
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
欢快之小溪
发帖类勋章
希望之星奖章
等级类勋章
核心会员奖章
等级类勋章
时间类勋章
您需要登录后才可以回帖mdk rtx使用
1,建立一个基本stm32库工程如下
在添加库函数之外添加
RTX_Config.c,请到keil的安装路径下找D:\Keil\ARM\RL\RTX\Examples
每个例子里面都有一个RTX_Config.c配置文件
2. 选中RTX Kernel配置
3.为了阅读rtx源代码方便添加rtx源代码,路径D:\Keil\ARM\RL\RTX\SRC\ARM,红色部分为各个架构的hal文件选择正确的架构就可以了
4.配置RTX,通过RTX_Config.c,点击该文件进入configuration wizard配置,有配置栈,调度模式,时间片等等信息
讲一下主要的RTX_Config.c配置宏
&o&Timer clock value [Hz] &1-&
&i& Set the timer clock value for selected timer.
&i& Default: 6000000
#ifndef OS_CLOCK
#define OS_CLOCK
//芯片的系统时钟我这里是72M
&o&Timer tick value [us] &1-1000000&
&i& Set the timer tick value for selected timer.
&i& Default: 10000
#ifndef OS_TICK
#define OS_TICK
//时间片的大小,一个系统滴答表示的时间
// &h&System Configuration
// =======================
// &e&Round-Robin Task switching
// =============================
// &i& Enable Round-Robin Task switching.
//配置是否轮转调度算法
#ifndef OS_ROBIN
#define OS_ROBIN
&o&Round-Robin Timeout [ticks] &1-1000&
&i& Define how long a task will execute before a task switch.
&i& Default: 5
#ifndef OS_ROBINTOUT
#define OS_ROBINTOUT
//每个人物的轮转时间长度单位为系统滴答OS_TICK
具体见mdk help 中的rtx 系统配置描述
没有更多推荐了,关于在STM32上跑RTX实时多任务操作系统 - *RTOS* - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 21058|回复: 25
关于在STM32上跑RTX实时多任务操作系统
在线时间0 小时
该用户从未签到主题帖子精华
中级会员, 积分 322, 距离下一级还需 178 积分
不知道什么原因我们公司的产品一直用的RTX操作系统,就是MDK自带的那个,最近我负责一个项目公司也让把代码移植到该操作系统上,以前从来没用过实时多任务操作系统,现在突然学这个RTX,才发现网上资料奇少,例子代码也仅有公司以前的一段代码,和MDK自带的一个例子,实在是不知道该怎么学下去啊,公司里除了老板以外就剩我自己会写代码了,怎么办?不可能什么不会都问老板吧,网友用这个的也是屈指可数,资料找不到,周围几乎没有可以请教的人,我想去网上买本书,都找不到关于RTX的书,怎么办?三天了,还是不能把自己的裸奔代码移植到RTX中去。
有谁有过RTX的学习经验,可否与小弟分享一下,有什么好点的资料可否借小弟一阅?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间14 小时
该用户从未签到主题帖子精华
中级会员, 积分 208, 距离下一级还需 292 积分
RE:关于在STM32上跑RTX实时多任务操作系统
我给你传一个RTX的中文资料吧,好好看看,多读一下,就能明白了。
11:08 上传
点击文件名下载附件
1.55 MB, 下载次数: 8434
在线时间866 小时
ST金币2349
该用户从未签到主题帖子精华
RE:关于在STM32上跑RTX实时多任务操作系统
RTX用的少,你去官方网站看看。现在大多数用ucosII。或者其他的RTOS
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间0 小时
该用户从未签到主题帖子精华
中级会员, 积分 322, 距离下一级还需 178 积分
回复:关于在STM32上跑RTX实时多任务操作系统
回复第 2 楼 于 17:15:20发表:
RTX用的少,你去官方网站看看。现在大多数用ucosII。或者其他的RTOS
嗯,还有个疑问,为什么用操作系统时,很多人写的代码都不讲究对齐缩进了,花括号也看着很乱呢?
在线时间2 小时
该用户从未签到主题帖子精华
新手上路, 积分 34, 距离下一级还需 16 积分
回复:关于在STM32上跑RTX实时多任务操作系统
回复第 3 楼 于 20:20:44发表:
回复第 2 楼 于 17:15:20发表:
RTX用的少,你去官方网站看看。现在大多数用ucosII。或者其他的RTOS
嗯,还有个疑问,为什么用操作系统时,很多人写的代码都不讲究对齐缩进了,花括号也看着很乱呢?
可能和个人的变成习惯或者不同的编程规范所导致的
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间142 小时
该用户从未签到主题帖子精华
金牌会员, 积分 2000, 距离下一级还需 3000 积分
RE:关于在STM32上跑RTX实时多任务操作系统
建议楼主去看一看uCOS的书,加深对操作系统理解。
& & 不理解操作系统,不管是用uCOS,还是RTX,你都不会用。
& & 其实,只要你理解了操作系统,利用操作系统的特性来编写代码,非常简单、容易,比裸奔容易多了。
& & 在此之前,阵痛是难免的。
在线时间11 小时
该用户从未签到主题帖子精华
初级会员, 积分 185, 距离下一级还需 15 积分
RE:关于在STM32上跑RTX实时多任务操作系统
我发个例程你看看。去我的STM32F0学习的贴子下载。
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间0 小时
该用户从未签到主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
RE:关于在STM32上跑RTX实时多任务操作系统
我最近也想研究研究这个RTX在STM32上跑的效果。
套用别人的程序,跑马灯到可以了。
对于KEIL这个RTX的中文注释好少,谁能给点中文的讲解吗?
麻烦了,在ST单片机上我是新手。
我的邮箱是:
在线时间0 小时
该用户从未签到主题帖子精华
新手上路, 积分 22, 距离下一级还需 28 积分
回复:关于在STM32上跑RTX实时多任务操作系统
回复第 4 楼 于 10:42:55发表:
我给你传一个RTX的中文资料吧,好好看看,多读一下,就能明白了。
太好了,下一个学习
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
在线时间84 小时
该用户从未签到主题帖子精华
金牌会员, 积分 1124, 距离下一级还需 3876 积分
回复:关于在STM32上跑RTX实时多任务操作系统
回复第 4 楼 于 10:42:55发表:
我给你传一个RTX的中文资料吧太好了,下一个学习,好好看看,多读一下,就能明白了。
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by}

我要回帖

更多关于 光大银行信用卡中心 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信