摘要:基于開發的軟件包導師汪禮超學員崔林威摘要騰訊物聯網操作系統是騰訊面向物聯網領域開發的實時操作系統,具有低功耗,低資源占用,模塊化,可裁剪等特性。圖中斷函數處理進行生成工程配置,按如下界面進行配置,最后點擊,并點擊。
TencentOS-Tiny software package based on STM32Cube MX
2021/11/10
導師:汪禮超
學員:崔林威
Email:1797878653@qq.com
https://github.com/OpenAtomFoundation/TencentOS-tiny
騰訊物聯網操作系統(TencentOS tiny)是騰訊面向物聯網領域開發的實時操作系統,具有低功耗,低資源占用,模塊化,可裁剪等特性。TencentOS
tiny提供了最精簡的 RTOS 內核,內核組件可裁剪可配置,可靈活移植到多種終端
MCU上;基于RTOS內核提供了COAP/MQTT/TLS/DTLS等常用物聯網協議棧及組件,方便用戶快速接入騰訊云物聯網通信IoT Hub;同時,為物聯網終端廠家提供一站式軟件解決方案,方便各種物聯網設備快速接入騰訊云,可支撐智慧城市、智能穿戴、車聯網等多種行業應用。
為了減少開發人員移植TencentOS tiny到STM32系列單片機上的開發時間,研究了STM32Cube MX軟件包的制作,基于STM32 PackCreator完成了TencentOS Tiny軟件包的封裝,并在STM32Cube IDE和MDK-ARM v5上完成了軟件包的移植測試,從而用戶在安裝本軟件包后,能夠使用pack在STM32Cube MX上直接生成適合不同MCU的TencentOS Tiny工程。
目錄
1、STM32 Cube MX軟件包介紹
1.1 軟件包簡介
1.2 軟件包制作
1.2.1 軟件包開發過程
1.2.2 PDSC文件的編寫
1.2.3 生成軟件包
2、TencentOS-tiny軟件包
2.1 軟件包內容
2.2 軟件包安裝
3、軟件包測試
3.1 ARM內核移植TencentOS tiny軟件包
3.2 STM32不依賴裸機工程移植
3.3 單片機裸機工程移植
4、總結
5、開發參考
6、附錄-移植配置參考
6.1 MDK5.14版本移植到ARM內核
6.1.1 Cortex-M0內核移植
6.1.2 Cortex-M0+內核移植
6.1.3 Cortex-M3內核移植
6.1.4 Cortex-M4內核移植
6.1.5 Cortex-M7內核移植
6.2 MDK5.14版本移植到基于ARM內核的芯片
6.2.1 移植到stm32f103c8芯片
6.2.2 移植到stm32f767igt芯片
6.3 MDK5.30和MDK5.35版本移植(Cortex-M0+、0、3、4、7內核和芯片)
6.4 MDK5.30和MDK5.35版本移植(Cortex-M23、33)
6.4.1 Cortex-M23內核移植
6.4.2 Cortex-M33內核移植
在進行嵌入式軟件開發時,ARM為我們提供了軟件包功能,能夠將軟件算法等模塊進行集成封裝,從而方便第三方用戶使用。ARM軟件包能夠為微控制器設備和開發板提供支持,包含軟件組件(Software
Component)如驅動程序和中間件,還可以包含示例項目和代碼模板等,主要有以下類型的軟件包:
(1) 器件系列包(Device Family Pack):由硅供應商或工具供應商生成,為特定的目標微控制器創建軟件應用提供支持;
(2) 板級支持包(Board Support Pack):由電路板供應商發布,為安裝在電路板上的外圍硬件提供軟件支持。
(3) CMSIS軟件包:由ARM提供,包括對CMSIS核心、DSP和RTOS的支持;
(4) 中間件包(Middleware
Pack):由芯片供應商、工具供應商或第三方創建;通過提供對常用軟件組件(如軟件堆棧、特殊硬件庫等)的軟件集成,從而減少開發時間;(5) 內部組件(In-house components):由工具用戶開發,用于內部或外部分發。
軟件組件包括以下幾部分:
(1) 源代碼、庫、頭文件/配置文件和文檔;
(2) 完整的示例項目,展示了軟件組件的使用,可以下載并在評估硬件上執行;
(3) 代碼模板,方便使用軟件組件。
一個完整的軟件包是一個ZIP文件,包含所有需要的軟件庫和文件,以及一個包含軟件包所有信息的包描述文件(PDSC文件),ARM軟件包的結構是在CMSIS中定義的(http://www.keil.com/CMSIS/Pack)。
STM32 CubeMX是ST公司推出了專門用于生成STM32的HAL代碼的代碼生成軟件,可以通過可視化界面完成工程的配置,同時生成能夠在STM32 CubeMX、Keil等軟件中運行的工程。STM32 Cube MX軟件包是在ARM軟件包的基礎上,結合ST公司提供的軟件包生成工具STM32 PackCreator制作的,利用這個軟件我們可以很方便地以圖形化界面的方式進行軟件包的制作。
如下圖所示,使用STM32PackCreator需要我們的操作系統安裝Java? Runtime Environment (JRE)和JavaFX?,目前STM32CubeMX已經更新到了6.3版本,但這個版本并沒有集成JavaFX,最為方便的方式是安裝STM32
CubeMX 6.2版本,省去了JavaFX的配置問題。
圖1.1 STM32PackCreator使用要求
具體步驟如下:
(1)安裝STM32CubeMX6.2.0:STM32CubeMX - STM32Cube初始化代碼生成器 -
STMicroelectronics;
圖1.2 下載STM32CubeMX6.2.0
(2)雙擊安裝目錄下的STM32PackCreator,此時會提示需要安裝JRE,點擊確定,跳轉到https://java.com/zh-CN/download/,然后下載安裝。
圖1.3 STM32PackCreator使用前的配置
(3)然后再次雙擊打開STM32PackCreator.exe,STM32 PackCreator的界面如下圖所示。
圖1.4 STM32 PackCreator界面
軟件包的開發過程相當于完成了一項產品的制作,因此引入產品生命周期管理(PLM)的概念,PLM包括以下四個階段:(1)概念的產生,基于軟件包需求進行產品定義,并創建第一個功能原型;(2)設計,根據技術特征和要求,進行原型測試和產品的實施,通過廣泛的測試驗證產品的功能與規格;(3)發布,產品被制造出來并推向市場;(4)服務,對產品的維護,包括對客戶的支持,最后不斷優化,結束產品的周期。
在制作軟件包時,主要面臨以下幾個過程:
圖1.5 軟件包開發流程
首先,根據特定組件生成軟件包即根據需求將相應的頭文件、庫文件等軟件組件利用PDSC文件進行組織,在組織完成后即可利用軟件包生成工具生成對應版本的軟件包,然后對新生成的軟件包進行測試,給出示例測試程序,再將其包含如PDSC文件中,最后經測試完成后生成最終的軟件包。
STM32PackCreator能夠通過圖形化界面設計軟件包,省去了我們手動編寫PDSC文件和軟件包生成腳本文件的步驟,使用起來非常方便快捷,以下是使用STM32PackCreator制作軟件包的步驟。
(1)打開STM32 PackCreator后,點擊File-new project from scratch。
圖1.6 生成新軟件包
(2)進行軟件包的配置,包括軟件包生成的文件夾、軟件包的vendor、name和description屬性。
圖1.7 軟件包初始配置
(3)配置完成后,可以看到有四個屬性欄,他們分別代表軟件包的基本配置、版本控制、組件內容和附加文件,如圖1.7所示:
圖1.8 軟件包屬性欄
(4)如下為制作Tencent OS-tiny軟件包時的配置:
(a)基礎配置
(b)軟件包版本控制
圖1.9 軟件包配置
(5)制作軟件包的關鍵在于Pack
Details的配置,這里實際上就是手工編寫PDSC文件的圖形化界面顯示,我們按照ARM
PDSC文件的編寫規范設計condition、設計組件結構、添加組件即可。
圖1.10 軟件包組件配置
(6)添加附件,在Additional Files中,我們需要添加上軟件包的說明文件(README.md)、利用軟件包生成的示例工程(Projects)和STM32CubeMX文件夾,此時我們點擊File-Save and Generate Pack,可以在之前設定的路徑下看到軟件包。然后我們再次將這個軟件包也加入到Additional Files中,如圖1.11所示,我們再次點擊File-Save and Generate Pack,就可以生成一個完整的STM32CubeMX軟件包了。
圖1.11 STM32CubeMX文件夾
圖1.12 Additional Files界面
圖1.13 生成軟件包
(7)另外,STM32PackCreator提供了參數預先配置的功能,使得我們在STM32 CubeMX生成工程時,可以對軟件包的參數進行提前配置。首先在圖1.13(a)中添加我們需要用戶提前配置的一系列參數,然后在圖1.13(b)中制作一個模板文件,此處我設置為頭文件的形式,然后將之前設置的一系列參數添加過來并保存,這樣用戶在使用軟件包生成工程的時候就可以預先配置參數,并在生成工程時自動生成名為tos_config的文件。
圖1.14 軟件包參數配置
結合TencentOS tiny的算法架構,本文設計的軟件包包括如表2-1所示的內容:
表2-1 軟件包內容
內容 | 功能 | |
---|---|---|
arch | 包括TencentOS-tiny/arch/arm下內核為Cortex-M0+、Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23、Cortex-M33的arch文件 | |
kernel | 包括TencentOS-tiny/kernel下的core、hal路徑中的文件、tos_config文件 | |
cmsis_os | 對應TencentOS-tiny/osal/cmsis_os的文件 | |
helloworld_main | 用于測試軟件包的main文件 | |
example | mcu_it.c | 移植軟件包時需要按照該文件對中斷函數進行修改 |
mcu_platform.h | 用戶可在此文件在添加對應單片機的頭文件 |
軟件包具有以下功能:
(1)軟件包針對ARMCortex-M0+、Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23和Cortex-M33內核進行了TencentOS tiny軟件的封裝,用戶在安裝軟件包后能夠快速將TencentOS tiny相應內核的Keil工程中;
(2)軟件包能夠自動適應用戶所選的內核,arch文件能夠根據內核自動顯示,從而方便用戶使用;
(3)用戶在勾選一個組件時,軟件包會自動提示還需要勾選其他模塊,并可利用界面中的Resolve一鍵勾選,防止遺漏;
(4)用戶可在STM32CubeMX上修改tos_config文件中的參數,對TencentOS tiny的功能進行裁剪。
接下來介紹Tencent.TencentOS-tiny軟件包的安裝,首先打開STM32 Cube
MX軟件,如圖2.1(a)所示,點擊INSTALL/REMOVE,然后將軟件包拖進來,點擊I agree to
all the terms of the preceding License
Agreement,再點擊next進行安裝,安裝完成界面如圖2.1(b)所示。
(a)
(b)
圖2.1 軟件包安裝
安裝好的軟件包可以在安裝路徑中查看內容,路徑在Help-Updater Settings中查看。
(a)安裝路徑
(b) 軟件包安裝查看
圖2.2 軟件包安裝
移植步驟如下:
(1)點擊ACCESS TO MCU SELECTOR:
圖3.1 打開MCU選擇的界面
(2)選擇STM32F407ZGTx,點擊Start Project:
圖3.2 選擇MCU
(3)點擊紅框中選項
圖3.3 選擇軟件包
(4)此時生成使用STM32
CubeIDE編譯的工程,首先選擇gcc版本的arch(如果是MDK-ARM版本的話就點擊armcc版本的arch),然后點擊黃色感嘆號,再點擊Resolve。之后手動添加helloworld_main和cmsis_os,并選擇對應MCU版本的mcu_platform。最后點擊ok完成配置。
圖3.4 軟件包配置
(5)點擊Software Packs,打勾,并在下方進行軟件包的參數配置。
圖3.5 軟件包參數配置
(6)注釋掉中斷函數PendSV()、void SysTick_Handler(void)等,這些在軟件包中都進行了配置。
圖3.6 中斷函數處理
(7)進行生成工程配置,按如下界面進行配置,最后點擊GENERATE CODE,并點擊Open
Project。
圖3.7 工程生成配置
(8)在tos_config頭文件中加入頭文件:#include
“mcu_platform_M4.h”,點擊Build All,如下界面所示,編譯通過,完成軟件包的移植。
圖3.8 工程配置與編譯
(1)點擊ACCESS TO BOARD SELECTOR,選擇Board為NUCLEO-F401RE,點擊Start Project:
圖3.9 Board選擇
(2)點擊紅框中選項
圖3.10 選擇軟件包
(3)此時生成使用MDK-ARM編譯的工程,首先選擇armcc版本的arch(如果是STM32 CubeIDE版本的話就點擊gcc版本的arch),然后點擊黃色感嘆號,再點擊Resolve。之后手動添加helloworld_main和cmsis_os,并選擇對應MCU版本的mcu_platform。最后點擊ok完成配置。
圖3.11 軟件包配置
(4)點擊Software Packs,打勾,并在下方進行軟件包的參數配置。
圖3.12 軟件包參數配置
(5)注釋掉中斷函數PendSV()、void SysTick_Handler(void)等,這些在軟件包中都進行了配置。
圖3.13 中斷函數處理
(6)進行生成工程配置,按如下界面進行配置,最后點擊GENERATE CODE,并點擊Open Project。
圖3.14 工程生成配置
(8)打開main_example.c,跳轉到tos_config頭文件,在其中加入頭文件:#include “mcu_platform_M4.h”,點擊Build All,如下界面所示,編譯通過,完成軟件包的移植。
圖3.15 移植編譯
對單片機開發板進行測試,以正點原子探索者STM32F407ZGT6為例介紹TencentOS-tiny軟件包的移植。
(1)點擊ACCESS TO MCU SELECTOR:
圖3.16 打開MCU選擇的界面
(2)選擇STM32F407ZGTx,點擊Start Project:
圖3.17 選擇MCU
(3)點擊紅框中選項
圖3.18 選擇軟件包
(4)此時生成使用MDK-ARM編譯的工程,首先選擇armcc版本的arch(如果是STM32 CubeIDE版本的話就點擊gcc版本的arch),然后點擊黃色感嘆號,再點擊Resolve。之后手動添加cmsis_os,并選擇對應MCU版本的mcu_platform。最后點擊ok完成配置。
圖3.19 軟件包配置
(5)點擊Software Packs,打勾,并在下方進行軟件包的參數配置。
圖3.20 軟件包參數配置
(6)注釋掉中斷函數PendSV()、void SysTick_Handler(void)等,這些在軟件包中都進行了配置,然后我們還需要對串口、下載等模塊進行修改,如下:
(a)中斷函數處理
(b)中斷優先級配置
(c)RCC配置
(d)SYS配置
(e)串口1配置
(f)時鐘樹配置
圖3.21 模塊配置
(7)進行生成工程配置,按如下界面進行配置,最后點擊右上角GENERATE CODE,生成工程后點擊Open Project。
圖3.22 工程配置
(8)打開tos_config頭文件,在其中加入頭文件:#include "mcu_platform_M4.h"
,然后使用如下的main文件:
/* USER CODE BEGIN Includes */#include "cmsis_os.h"/* USER CODE END Includes *//* USER CODE BEGIN 0 *///task1#define TASK1_STK_SIZE 512void task1(void *pdata);osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);//task2#define TASK2_STK_SIZE 512void task2(void *pdata);osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);void task1(void *pdata){ int count = 1; char buffer[64] = {0}; while(1) { snprintf(buffer, sizeof(buffer), "task 1 %04d/r/n", count++); HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), 0xFFFF); osDelay(2000); }}void task2(void *pdata){ int count = 1; char buffer[64] = {0}; while(1) { snprintf(buffer, sizeof(buffer), "task 2 %04d/r/n", count++); HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), 0xFFFF); osDelay(1000); }}/* USER CODE END 0 */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(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ osKernelInitialize(); //TOS Tiny kernel initialize osThreadCreate(osThread(task1), NULL);// Create task1 osThreadCreate(osThread(task2), NULL);// Create task2 osKernelStart(); //Start TOS Tiny /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */}
(9)編譯,然后使用ST-LINK下載到正點原子探索者單片機中
圖3.23 編譯、下載程序
(10)使用串口助手查看,兩個任務的延時設置不一樣,運行效果也不一樣:
圖3.24 串口查看界面
1、騰訊物聯網操作系統網址https://github.com/OpenAtomFoundation/TencentOS-tiny
2、ST官方教程How to develop a STM32Cube Expansion Package - stm32mcu (stmicroelectronics.cn)
3、制作STM32Cube軟件包-STM32 PackCreator的使用及軟件包的制作 - 極術社區 - 連接開發者與智能計算生態 (aijishu.com)
4、(1)STM32 CubeMX軟件包的制作—STM32PackCreator的使用_linwei_Cui的博客-CSDN博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/123563.html
摘要:利用可視化界面來進行的相關配置,所以時鐘滴答定時器串口等就不用根據數據手冊去操作標準庫甚至是寄存器了,可以通過軟件直接生成。 使用STM32CubeMX初始化ST...
摘要:總線掛載的外設有等。外設地址映射片上外設區分為三條總線,根據外設速度的不同,不同總線掛載著不同的外設,掛載低速外設,和掛載高速外設。 第二章 STM32資源介紹 2...
摘要:電源控制狀態寄存器中的用來表明是高于還是低于的電壓閥值。當下降到閥值以下或上升到閥值之上時,通過外部中斷線上升或下降邊沿觸發設置,產生中斷。在中斷處理函數中做相應的保護措施。 在單片機低功耗的應用中,我們常常需要使用外部中斷,在無中斷的情況下進行休眠,這里講解一下使用STM32 Stm32Cube配置外部IO中斷,將io口...
摘要:灰度傳感器利用不同顏色的檢測面對光的反射程度不同的原理進行顏色深淺檢測。這就是我們用的數字量灰度傳感器。數字量的灰度傳感器如果加入的是單片機處理數據,那么可以把得到的原始數據加入濾波算法數據混合算法得到一個波動小適應環境強的數字傳感器。 文章目錄 引言 1.尋跡傳感器工作原理介紹 2.使用方...
閱讀 3163·2023-04-25 18:22
閱讀 2404·2021-11-17 09:33
閱讀 3324·2021-10-11 10:59
閱讀 3244·2021-09-22 15:50
閱讀 2821·2021-09-10 10:50
閱讀 867·2019-08-30 15:53
閱讀 456·2019-08-29 11:21
閱讀 2923·2019-08-26 13:58