STM32开发笔记43: 使用CMSIS-RTOS建立任务

发布者:暗里著迷最新更新时间:2019-07-16 来源: eefocus关键字:STM32  CMSIS-RTOS  建立任务 手机看文章 扫描二维码
随时随地手机看文章

单片机型号:STM32F070F6P6


昨天,将FreeRTOS移植到STM32现有的工程后,今天希望使用RTOS进行工程设计,遇到的第1个问题,就是工程中的函数在FreeRTOS的帮助文档中全部都检索不到。在网上仔细学习后,才发现,ST公司给的FreeRTOS例程,又进行了一层封装,这层就是CMSIS-RTOS。CMSIS-RTOS是keil公司对不同RTOS的一种封装结构,可以使不同的RTOS具有相同的调用接口,以方便今后程序的移植。本文,详细介绍使用CMSIS-RTOS建立任务的方法。


使用CMSIS-RTOS建立任务需要用到两个API,分别是osThreadDef和GprsTaskHandle,其具体定义如下:


1、osThreadDef


 

#define osThreadDef( name,

                     priority,

                     instances,

                     stacksz 

)

解释:Define the attributes of a thread functions that can be created by the function osThreadCreate using osThread. The argument instances defines the number of times that osThreadCreate can be called for the same osThreadDef.


参数:name          name of the thread function.

                      priority        initial priority of the thread function.

                      instances    number of possible thread instances.

                      stacksz       stack size (in bytes) requirements for the thread function.


2、osThreadCreate


osThreadId osThreadCreate( const osThreadDef_t *thread_def,

                           void  *argument 

)

解释:Start a thread function by adding it to the Active Threads list and set it to state READY. The thread function receives the argument pointer as function argument when the function is started. When the priority of the created thread function is higher than the current RUNNING thread, the created thread function starts instantly and becomes the new RUNNING thread.


参数:[in]    thread_def    thread definition referenced with osThread.

                      [in]    argument      pointer that is passed to the thread function as start argument.


 


在osThreadDef涉及到的优先级参数,其具体定义如下:


有了上述的准备工作后,我们就可以建立自己的任务了,在下面的例子中,我们建立2个任务分别为:RfidTask和GprsTask,具体步骤如下:


1、声明任务ID


osThreadId RfidTaskHandle;

osThreadId GprsTaskHandle;

2、声明任务的函数原型


void StartRfidTask(void const * argument);

void StartGprsTask(void const * argument);

3、在main函数中创建任务


osThreadDef(RfidTask, StartRfidTask, osPriorityNormal, 0, 128);

RfidTaskHandle = osThreadCreate(osThread(RfidTask), NULL);

osThreadDef(GprsTask, StartGprsTask, osPriorityNormal, 0, 128);

GprsTaskHandle = osThreadCreate(osThread(GprsTask), NULL);

4、实现RfidTask


void StartRfidTask(void const * argument)

{

  for(;;)

  {

    Target.Iwdg.Refresh();

    Target.HAL.L1.Open();

    osDelay(1000);

    Target.HAL.L1.Shut();

    osDelay(1000);

  }

}

5、实现GprsTask


void StartGprsTask(void const * argument)

{

  for(;;)

  {

    Target.Iwdg.Refresh();

    Target.HAL.L2.Open();

    osDelay(500);

    Target.HAL.L2.Shut();

    osDelay(500);

  }

}

6、将此程序编译下载到硬件中后,可看到L1以1秒为间隔闪烁,L2以0.5秒为间隔闪烁。


关键字:STM32  CMSIS-RTOS  建立任务 引用地址:STM32开发笔记43: 使用CMSIS-RTOS建立任务

上一篇:STM32开发笔记44:RTC驱动程序的移植
下一篇:STM32开发笔记42: 移植FreeRTOS到现有工程的方法

推荐阅读最新更新时间:2024-11-09 17:15

STM32之蓝牙透传模块(迅通科技PTR5518)
一、简介 本文介绍如何使用STM32控制蓝牙透传模块,蓝牙透传模块使用迅通科技的PTR5518。 二、实验平台 库版本:STM32F10x_StdPeriph_Lib_V3.5.0 编译软件:MDK4.53 硬件平台:STM32开发板(主芯片stm32f103c8t6) 仿真器:JLINK 手机型号: 小米4S 安卓版本:安卓5.1 安卓app:BLE Tool 三、版权声明 四、实验前提 1、在进行本文步骤前,请先阅读以下博文: 1)《STM32之蓝牙透传模块(昇润科技)》:http://blog.csdn.net/feilusia/article/details/52838571
[单片机]
<font color='red'>STM32</font>之蓝牙透传模块(迅通科技PTR5518)
STM32 USMART调试组件
1、USMART是由ALIENTEK开发的一个灵巧的串口调试交互组件,通过它你可以通过串口助手调用程序里的任何函数,并执行。因此,你可以随意更改函数的输入参数(支持数字(10/16进制)、字符串、函数入口地址等作为参数),单个函数最多支持10个输入参数,并支持函数返回值显示。 2、USMART的特点 1.可以调用绝大部分用户直接编写的函数。 2.资源占用极少(最少情况:FLASH:4K; SRAM:72B)。 3.支持参数类型多(数字(包含10/16进制)、字符串、函数指针等)。 4.支持函数返回值显示。 5.支持参数及返回值格式设置。 6.支持函数执行时间计算。 7.使用方便。
[单片机]
STM32串口介绍
串口作为 MCU 的重要外部接口,同时也是软件开发重要的调试手段, 其重要性不言而喻。STM32 的串口资源相当丰富的,功能也相当强劲。ALIENTEK 战舰 STM32 开发板所使用的 STM32F103ZET6 最多可提供 5 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、 支持调制解调器操作、 智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA等。 串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能,GPIO 时钟使能 2) 串口复位 3) GPIO 端口模式设置 4) 串口参数初始化 5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤) 6) 使能串
[单片机]
基于STM32单片机的控制步进电机实验
一、实验原理(以28BYJ48步进电机为例)和51控制步进电机原理一致 1、五线四相步进电机,不同线圈得电会让步进电机的转子转动一个角度,按一定规律给不同的线圈通电,就可以让步进电机连续转动,下表就是步进电机和拆解后的图片,以及四根线通电的顺序。 注:总共五条线,一个是VCC,剩下四条分别接上ABCD相。 2、每走一个位置,都要给一定的延时,不然还没等转子到位,下一个脉冲就进来了,肯定会引起错误,导致电机堵转、异常震动。 3、通过改变延时的时间,就可以控制电机的转速,不能太慢,也不要太快,不断调试到合理范围就行,转向用了一个枚举类型,控制转向。 4、单片机IO口和电机四条线连接时,一定不能错误,要按照顺序相连接。 5、调换
[单片机]
基于<font color='red'>STM32</font>单片机的控制步进电机实验
STM32有关GPIO引脚的一些问题
/* 名称:STM32有关GPIO引脚的一些问题 说明:今天在编写一个键盘扫描程序的时候,出现了一些问题。 有的引脚能读出电平状态、有点引脚确一直读不出状态。改了一下午,查了好久,终于有点眉目了。现简述如下: 我在用引脚的时候,使用的是PB0、PB1、PB2、PB3、PB4…,将其引脚配置的方式是上拉输入。PB2、PB3、PB4一直有问题。PB0、PB1是可以读出状态的(但是只能单独使用)。 对于PB2来说,其不仅是PB2,它也是BOOT1引脚。当系统复位之后,开始的几个系统时钟使用的是BOOT1,用来判断系统从何处读取置零。之后,PB2就可以作为普通的IO引脚使用了。由于开发板设置的是从内部FLASH启动,BOOT1一直是置零的
[单片机]
stm32用什么软件编程 stm32软件推荐
stm32是嵌入式单片机,有着高性能、低成本、低功耗、可裁剪的特点。相信许多萌新小伙伴还不知道stm32用什么软件编程好,下面就来介绍一下stm32编程软件。 1.Keil MDK stm32单片机需要编程,目前keil是最广泛的STM32单片机编程环境,优点是界面友好、易操作、用户体验好,很受大家的欢迎。 2.STM32CUBE STM32CUBE是一款图形配置软件,能够查看每个单片机的引脚情况、复用功能情况、片上资源,功能很清晰。缺点是不能支持代码生成。 3.Altium Designer Altium Designer是一款原理图和PCB设计软件,我们能够根据自己的需求来设计PCB做板子调试产品。 如果是学5
[单片机]
STM32 FSMC 总结
背景 做DP开发过程中,需要将DP芯片和ARM芯片进行通信,一般有两种方式: 1)IO端口(总线)方式来进行通信; 2)FSMC-存储器映射方式来进行通信; 之前的开发是采用第一种方式在F103芯片上开发,现在换F4平台,采用第二种方式来进行交互数据。 FSMC的基础 FSMC功能是类似 51 单片机的存储器映射功能,能管理多个外部不同种类的存储设备,具有方便,简单,快捷的优点。 目前支持的类型有: SRAM 、 ROM 、 PSRAM 、 NOR Flash 和NANDFlash 存储器 。 更多的关于FSMC的资料需要阅读STM32 手册对于FSMC的详细介绍。 VPC3+C + ARM +
[单片机]
<font color='red'>STM32</font> FSMC 总结
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved