1. 程式人生 > >STM32開發筆記43: 使用CMSIS-RTOS建立任務

STM32開發筆記43: 使用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開發筆記43: 使用CMSIS-RTOS建立任務

微控制器型號:STM32F070F6P6 昨天,將FreeRTOS移植到STM32現有的工程後,今天希望使用RTOS進行工程設計,遇到的第1個問題,就是工程中的函式在FreeRTOS的幫助文件中全部都檢索不到。在網上仔細學習後,才發現,ST公司給的FreeRTOS例程,又進

STM32F0開發筆記14: 使用CMSIS-RTOS建立任務

昨天,將FreeRTOS移植到STM32現有的工程後,今天希望使用RTOS進行工程設計,遇到的第1個問題,就是工程中的函式在FreeRTOS的幫助文件中全部都檢索不到。在網上仔細學習後,才發現,ST公司給的FreeRTOS例程,又進行了一層封裝,這層就是CMSIS-RTOS。CMSIS-RTOS

STM32開發筆記44:RTC驅動程式的移植

微控制器型號:STM32F070F6P6 本文介紹,將RTC驅動程式移植到自己的工程專案中的方法。本專案僅使用了RTC的實時時鐘功能,沒有啟動定時報警等功能。   1、在STM32CubeMX中對RTC進行配置,如下圖所示,激活了時鐘源和日曆功能。 2、配置R

STM32開發筆記45:看門狗驅動程式的移植

微控制器型號:STM32F070F6P6 本文介紹將看門狗驅動程式移植到自己工程中的方法,本專案使用的是獨立看門狗IWDG。   1、在STM32CubeMX中使能看門狗,如下圖所示。 2、檢視看門狗時鐘。 3、對看門狗進行設定,這裡主要的是設定IW

STM32開發筆記57: 復位電路設計

本篇文章針對所有的STM32晶片,網上有不少文章敘述了有關STM32復位電路的相關內容,也有很多推薦電路,例如ALIENTEK給出的復位電路,如下圖所示。 不過還有一些推薦電路,不需加上拉電阻,或者電容也不加,那到底應該如何設計呢?還需看一下官方手冊的推薦電路,如下圖所示。

STM32開發筆記56: STM32F407VGT6的解釋

微控制器型號:STM32F407VGT6 本文件介紹STM32F407VGT6型號的具體解釋,如下圖所示。 具體解釋:STM32,gerneral purpose,乙太網介面,100引腳,1024K Flash空間,LQFP封裝,-40到85攝氏度。   原創

STM32開發筆記55:STM32F4+DP83848乙太網通訊指南系列(九):自己寫一個ARP協議

本章為系列指南的第九章,終結篇,本章主要來分析一下完整的ARP協議,並在STM32F4中實現一個精簡的ARP協議響應流程。 ARP協議的本質是使區域網內的其他主機能夠知道我在哪兒,比如在區域網上有人衝著所有人喊了一句「IP為XXXX的傢伙,你在哪兒」,我一聽,XXXX不是我的IP嗎,我得回答他啊

STM32開發筆記54:STM32F4+DP83848乙太網通訊指南系列(八):收包流程

本章為系列指南的第八章,講述如何使用STM32F407晶片配合DP83848進行乙太網資料的收包流程,將監聽到的網路包資料通過UART傳給PC,同時輔以WireShark監聽對比驗證。 關於UART,也就是串列埠通訊的使用,這裡不做贅述,我們這裡預設兩個函式分別為UART6Init()和UART

STM32開發筆記53:STM32F4+DP83848乙太網通訊指南系列(七):發包流程

本章為系列指南的第七章,講述如何在之前的基礎上,編寫程式在STM32上傳送一個網路包,並使用WireShark進行驗證。 先回顧一下之前的章節我們做好的準備工作,在《STM32F4+DP83848乙太網通訊指南第五章:MAC+DMA配置》結束時我們封裝了一個DP83848的初始化函式,該函式完成

STM32開發筆記52:STM32F4+DP83848乙太網通訊指南系列(六):Wireshark使用

本章為系列指南的第六章,這一章我們暫時離開Keil,離開STM32,離開C語言,這一章我們要去了解一些乙太網相關的知識,特別是學習使用大名鼎鼎的除錯乙太網通訊程式的利器:WireShark。 幀結構 我們從小就聽說過計算機中全都是二進位制的0和1,這個道理幾乎連考不上三本的文科生都懂,但是很

STM32開發筆記51:STM32F4+DP83848乙太網通訊指南系列(五):MAC+DMA配置

本章為系列指南的第五章,講述STM32F407上MAC層以及其DMA的配置。我們在第一章知識儲備章節說到,STM32F407會在168MHz主頻之外分配一定的時間釋放匯流排資料用來處理DMA,這其中就包含MAC層的DMA,複習一下STM32F4的匯流排架構圖,(圖片來自RM0090ST中文STM32

STM32開發筆記50:STM32F4+DP83848乙太網通訊指南系列(四):PHY配置

本章為系列指南的第四章,這一章將正式進入乙太網的配置和使用。首先我們關注一下PHY的配置,前面講到,我們的工程使用了開發板上的一顆DP83848晶片。 RMII和ADDR的確定 接下來我們來看開發板的原理圖: 通過電路原理圖可以看到接線方式是使用RMII介面模式接線的,因此接下來我

STM32開發筆記49:STM32F4+DP83848乙太網通訊指南系列(三):中斷向量

本章為系列指南的第三章,這一章將會在正式進入乙太網的配置和使用之前,複習一下STM32的中斷以及中斷向量,因為我們以後要在中斷中響應乙太網收包。 中斷—嵌入式中的多執行緒 從51微控制器到ARM架構的32位微晶片,到樹莓派、Ardunio等單板機,中斷的概念對於這些晶片都非常重要。本人是純軟

STM32開發筆記48:STM32F4+DP83848乙太網通訊指南系列(二):系統時鐘

本章為系列指南第二章,主要是介紹一下STM32F4的時鐘配置。時鐘是一個嵌入式產品從零開始開發的基石,一切邏輯都在時鐘的節奏中安靜地彈奏著,時鐘為整個電路帶來了歡快的「心跳」。開發者如果對時鐘沒有控制能力,就會把脈不準整個旋律的節奏,從而導致諸如通訊波特率、通訊時序、延時操作等關鍵功能全都紊亂,系統

STM32開發筆記47:STM32F4+DP83848乙太網通訊指南系列(一):知識儲備

微控制器型號:STM32F407VGT 本章為系列指南第一章,主要是介紹一下專案思路,並且儘可能列出從零開始著手開發這個專案過程中,所需要理解的各類知識點,關於這些知識點,如果需要更詳細的介紹,請列為看官自行百度谷歌。 STM32F407簡介 STM32F407主頻168MHz,主頻

STM32開發筆記11: 在Keil中使用C++進行程式設計

微控制器型號:STM32F030R8     希望在Keil中使用C++進行程式設計,開始時,總是報錯,經過仔細分析,原因時Keil在預設情況下不支援C++進行程式設計。本文將介紹在Keil中使用C++進行程式設計的方法。     1、在Keil中使用C++進行程式設計,首

STM32開發筆記8: STM32CubeF0介紹

微控制器型號:STM32CubeF0     本文介紹 STM32CubeF0。     STM32CubeF0 gathers, in a single package, all the generic embedded software components requi

STM32開發筆記24:STM32L0低功耗設計——需求概述

微控制器型號:STM32L053R8T6     這幾篇日誌將詳細記錄,自己應用stm32進行低功耗設計的全過程。     使用晶片:STM32L053R8T6     執行模式:         Range 1:電源電壓限制在1.71-3.6V,CPU最大執行頻率為

STM32開發筆記30:STM32L0低功耗設計——STOP_RTC模式下的休眠時間

微控制器型號:STM32L053R8T6     本文介紹STOP_RTC模式下,設定進入低功耗休眠時間的方法。     低功耗的休眠時間的設定首先需要確定RTC的基準時間,我們一般將其設定為1秒,這在《STM32L0低功耗設計4: RTC模組1秒時鐘的產生方法》中已經介

STM32開發筆記18: STM32CubeMX中Debug Serial Wire的設定問題

微控制器型號:STM32L053R8T6     使用STM32CubeMX時,可發現在SYS下,有Debug Serial Wire選項,如下圖所示。     使能該選項後,相應的IO引腳,會變為除錯引腳,如下圖所示。     最初,認為必須選中該選項才能對S