stm32cubemx_pack

This commit is contained in:
LinwCui
2021-11-15 15:54:57 +08:00
parent 78925ffcbd
commit d5446cb563

View File

@@ -0,0 +1,656 @@
![](media/7cdcedffbe9a424e13fbb8b9d86c710d.png)
# 基于STM32Cube MX开发的TencentOS-Tiny软件包
TencentOS-Tiny software package based on STM32Cube MX
2021/11/10
东南大学
导师:汪礼超
学员:崔林威
Email1797878653@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软件包介绍](#1stm32-cube-mx软件包介绍)
[1.1 软件包简介](#11-软件包简介)
[1.2 软件包制作](#12-软件包开发)
[1.2.1 软件包开发过程](#121-软件包开发过程)
[1.2.2 PDSC文件的编写](#122-利用stm32packcreator制作软件包)
[1.2.3 生成软件包](#_Toc82013881)
[2、TencentOS-tiny软件包](#2tencentos-tiny软件包)
[2.1 软件包内容](#21-软件包内容)
[2.2 软件包安装](#22-软件包安装)
[3、软件包测试](#3软件包测试)
[3.1 ARM内核移植TencentOS
tiny软件包](#31-stm32-mcu移植测试生成stm32-cubeide工程)
[3.2 STM32不依赖裸机工程移植](#32-stm32-board移植测试生成mdk-arm-v5工程)
[3.3 单片机裸机工程移植](#33-单片机测试)
[4、总结](#_Toc82013889)
[5、开发参考](#4开发参考)
[6、附录-移植配置参考](#_Toc82013891)
[6.1 MDK5.14版本移植到ARM内核](#_Toc82013892)
[6.1.1 Cortex-M0内核移植](#_Toc82013893)
[6.1.2 Cortex-M0+内核移植](#_Toc82013894)
[6.1.3 Cortex-M3内核移植](#_Toc82013895)
[6.1.4 Cortex-M4内核移植](#_Toc82013896)
[6.1.5 Cortex-M7内核移植](#_Toc82013897)
[6.2 MDK5.14版本移植到基于ARM内核的芯片](#_Toc82013898)
[6.2.1 移植到stm32f103c8芯片](#_Toc82013899)
[6.2.2 移植到stm32f767igt芯片](#_Toc82013900)
[6.3
MDK5.30和MDK5.35版本移植Cortex-M0+、0、3、4、7内核和芯片](#_Toc82013901)
[6.4 MDK5.30和MDK5.35版本移植Cortex-M23、33](#_Toc82013902)
[6.4.1 Cortex-M23内核移植](#_Toc82013903)
[6.4.2 Cortex-M33内核移植](#_Toc82013904)
# 1、STM32 Cube MX软件包介绍
## 1.1 软件包简介
在进行嵌入式软件开发时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的配置问题。
![在这里插入图片描述](media/e7f22ab88c1c1a558d17287582631d83.png)
图1.1 STM32PackCreator使用要求
具体步骤如下:
1安装STM32CubeMX6.2.0[STM32CubeMX - STM32Cube初始化代码生成器 -
STMicroelectronics](https://www.st.com/zh/development-tools/stm32cubemx.html#get-software)
![在这里插入图片描述](media/bece761bd6b5e020a7eb2f315023f5d2.png)
图1.2 下载STM32CubeMX6.2.0
2双击安装目录下的STM32PackCreator此时会提示需要安装JRE点击确定跳转到[https://java.com/zh-CN/download/](https://aijishu.com/link?target=https%3A%2F%2Fjava.com%2Fzh-CN%2Fdownload%2F),然后下载安装。
![在这里插入图片描述](media/95511cb01e058ea0e8b39f299f69b5e3.png)
![在这里插入图片描述](media/fd5ec491a0fe52b056f0c5e0f1a862b7.png)
![在这里插入图片描述](media/18bd45f297b4028820de6851bd922274.png)
图1.3 STM32PackCreator使用前的配置
3然后再次双击打开STM32PackCreator.exeSTM32 PackCreator的界面如下图所示。
![](media/bbc029d5204e1f954af5c3adb0717d00.png)
图1.4 STM32 PackCreator界面
## 1.2 软件包开发
### 1.2.1 软件包开发过程
软件包的开发过程相当于完成了一项产品的制作因此引入产品生命周期管理PLM的概念PLM包括以下四个阶段1概念的产生基于软件包需求进行产品定义并创建第一个功能原型2设计根据技术特征和要求进行原型测试和产品的实施通过广泛的测试验证产品的功能与规格3发布产品被制造出来并推向市场4服务对产品的维护包括对客户的支持最后不断优化结束产品的周期。
在制作软件包时,主要面临以下几个过程:
![](media/b2be2d798f47f13077e4eafee94fad29.png)
图1.5 软件包开发流程
首先根据特定组件生成软件包即根据需求将相应的头文件、库文件等软件组件利用PDSC文件进行组织在组织完成后即可利用软件包生成工具生成对应版本的软件包然后对新生成的软件包进行测试给出示例测试程序再将其包含如PDSC文件中最后经测试完成后生成最终的软件包。
### 1.2.2 利用STM32PackCreator制作软件包
STM32PackCreator能够通过图形化界面设计软件包省去了我们手动编写PDSC文件和软件包生成脚本文件的步骤使用起来非常方便快捷以下是使用STM32PackCreator制作软件包的步骤。
1打开STM32 PackCreator后点击File-new project from scratch。
![在这里插入图片描述](media/075a0efa2aac322fa7f04f18e494170c.png)
图1.6 生成新软件包
2进行软件包的配置包括软件包生成的文件夹、软件包的vendor、name和description属性。
![在这里插入图片描述](media/cc16fd410629fd560c7438445e30084f.png)
图1.7 软件包初始配置
3配置完成后可以看到有四个属性栏他们分别代表软件包的基本配置、版本控制、组件内容和附加文件如图1.7所示:
![在这里插入图片描述](media/59fc851e13b1db9fa9967a14d720317b.png)
图1.8 软件包属性栏
4如下为制作Tencent OS-tiny软件包时的配置
![在这里插入图片描述](media/08f21f42eb03be8560ac0aa54248040d.png)
a基础配置
![在这里插入图片描述](media/60608e9a968a8164576bec6fe00bdb99.png)
b软件包版本控制
图1.9 软件包配置
5制作软件包的关键在于Pack
Details的配置这里实际上就是手工编写PDSC文件的图形化界面显示我们按照ARM
PDSC文件的编写规范设计condition、设计组件结构、添加组件即可。
![在这里插入图片描述](media/0700d9cae7ef1ae1de93fc03bb09668d.png)
图1.10 软件包组件配置
6添加附件在Additional
Files中我们需要添加上软件包的说明文件README.md、利用软件包生成的示例工程Projects和STM32CubeMX文件夹此时我们点击File-Save
and Generate
Pack可以在之前设定的路径下看到软件包。然后我们再次将这个软件包也加入到Additional
Files中如图1.11所示我们再次点击File-Save and Generate
Pack就可以生成一个完整的STM32CubeMX软件包了。
![](media/4315430d5fce58833e07811993aab0ad.png)
图1.11 STM32CubeMX文件夹
![](media/9da795e383943b24b6502dcecbfc1720.png)
图1.12 Additional Files界面
![在这里插入图片描述](media/8f3894f199a4fd3f480f2b9d8881e45f.png)
![](media/a5518d6314ecc5d20dc9f5ddd21e4952.png)
图1.13 生成软件包
7另外STM32PackCreator提供了参数预先配置的功能使得我们在STM32 Cube
MX生成工程时可以对软件包的参数进行提前配置。首先在图1.13(a)中添加我们需要用户提前配置的一系列参数然后在图1.13(b)中制作一个模板文件此处我设置为头文件的形式然后将之前设置的一系列参数添加过来并保存这样用户在使用软件包生成工程的时候就可以预先配置参数并在生成工程时自动生成名为tos_config的文件。
![](media/7cfea692c4f0cf573994647241c2a666.png)
![](media/0dc47d61ee9335677e6f1230aaa2aa22.png)
a b
图1.14 软件包参数配置
# 2、TencentOS-tiny软件包
## 2.1 软件包内容
结合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的文件 | |
| example | helloworld_main | 用于测试软件包的main文件 |
| | 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的功能进行裁剪。
## 2.2 软件包安装
接下来介绍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)所示。
![](media/ba55cec0f5647efd53f9a8f4ee4dd49e.png)![](media/33809a718992a785c9601305ca1b2706.png)
a b
图2.1 软件包安装
安装好的软件包可以在安装路径中查看内容路径在Help-Updater Settings中查看。
![](media/078139b6bd2274da5fa133a02e31707a.png)
(a)安装路径
![](media/595f8808efff49057812ba88be66a7c8.png)
(b) 软件包安装查看
图2.2 软件包安装
# 3、软件包测试
## 3.1 STM32 MCU移植测试生成STM32 CubeIDE工程
移植步骤如下:
1点击ACCESS TO MCU SELECTOR
![](media/7d19cc0ecebfe342f6102fb63ddc48c0.png)
图3.1 打开MCU选择的界面
2选择STM32F407ZGTx点击Start Project
![](media/1c357c9b931d9ca757cff186bea35cee.png)
图3.2 选择MCU
3点击红框中选项
![](media/f85e252032706686b1509648da2ad34b.png)
图3.3 选择软件包
4此时生成使用STM32
CubeIDE编译的工程首先选择gcc版本的arch如果是MDK-ARM版本的话就点击armcc版本的arch然后点击黄色感叹号再点击Resolve。之后手动添加helloworld_main和cmsis_os并选择对应MCU版本的mcu_platform。最后点击ok完成配置。
![](media/1cbb77bbe19809ad29348e80d449a28f.png)
![](media/9aa108534e529c9dc6974682d42ba98a.png)
图3.4 软件包配置
5点击Software Packs打勾并在下方进行软件包的参数配置。
![](media/80d8807155995bdfc49bfa6bb76a4f95.png)
图3.5 软件包参数配置
6注释掉中断函数PendSV()、void
SysTick_Handler(void)等,这些在软件包中都进行了配置。
![](media/96c9b931cff86a48dbb47953b80ad114.png)
图3.6 中断函数处理
7进行生成工程配置按如下界面进行配置最后点击GENERATE CODE并点击Open
Project。
![](media/9dc4a0abb5af8ded362902f988d49697.png)
![](media/a9cf1b1a0aeb488bbcc0cf27f937a331.png)
![](media/4c814923c4381488406c90a55e61b703.png)
图3.7 工程生成配置
8在tos_config头文件中加入头文件**\#include**
"mcu_platform_M4.h"点击Build All如下界面所示编译通过完成软件包的移植。
![](media/ebec579e6ab8041ad25a1b969a25f8ee.png)
图3.8 工程配置与编译
## 3.2 STM32 Board移植测试生成MDK-ARM v5工程
1点击ACCESS TO BOARD SELECTOR选择Board为NUCLEO-F401RE点击Start Project
![](media/5f2d8da51e008ca34d307348243d4f79.png)
![](media/6d042e869f8150df48283e994a69a658.png)
图3.9 Board选择
2点击红框中选项
![](media/f85e252032706686b1509648da2ad34b.png)
图3.10 选择软件包
3此时生成使用MDK-ARM编译的工程首先选择armcc版本的arch如果是STM32
CubeIDE版本的话就点击gcc版本的arch然后点击黄色感叹号再点击Resolve。之后手动添加helloworld_main和cmsis_os并选择对应MCU版本的mcu_platform。最后点击ok完成配置。
![](media/ad29e758a59f2cbaa4a3d2a9074f4cc4.png)
![](media/369b97c66d8f160c7f6e32237b22ecb7.png)
图3.11 软件包配置
4点击Software Packs打勾并在下方进行软件包的参数配置。
![](media/80d8807155995bdfc49bfa6bb76a4f95.png)
图3.12 软件包参数配置
5注释掉中断函数PendSV()、void
SysTick_Handler(void)等,这些在软件包中都进行了配置。
![](media/96c9b931cff86a48dbb47953b80ad114.png)
图3.13 中断函数处理
6进行生成工程配置按如下界面进行配置最后点击GENERATE CODE并点击Open
Project。
![](media/c5e8dc1958c672144bfb2300540bd2ff.png)
![](media/f7596c4361d6b6688700018ef4c8d8a0.png)
![](media/f64c22f774625cc3e1df74194231ce98.png)
图3.14 工程生成配置
8打开main_example.c跳转到tos_config头文件在其中加入头文件**\#include**
"mcu_platform_M4.h"点击Build All如下界面所示编译通过完成软件包的移植。
![](media/4682072cfe5bad6cbf4da59010037ddf.png)
图3.15 移植编译
## 3.3 单片机测试
对单片机开发板进行测试以正点原子探索者STM32F407ZGT6为例介绍TencentOS-tiny软件包的移植。
1点击ACCESS TO MCU SELECTOR
![](media/7d19cc0ecebfe342f6102fb63ddc48c0.png)
图3.16 打开MCU选择的界面
2选择STM32F407ZGTx点击Start Project
![](media/1c357c9b931d9ca757cff186bea35cee.png)
图3.17 选择MCU
3点击红框中选项
![](media/f85e252032706686b1509648da2ad34b.png)
图3.18 选择软件包
4此时生成使用MDK-ARM编译的工程首先选择armcc版本的arch如果是STM32
CubeIDE版本的话就点击gcc版本的arch然后点击黄色感叹号再点击Resolve。之后手动添加cmsis_os并选择对应MCU版本的mcu_platform。最后点击ok完成配置。
![](media/42a491cb7b7351c6ab5db4fe11010a6b.png)
图3.19 软件包配置
5点击Software Packs打勾并在下方进行软件包的参数配置。
![](media/80d8807155995bdfc49bfa6bb76a4f95.png)
图3.20 软件包参数配置
6注释掉中断函数PendSV()、void
SysTick_Handler(void)等,这些在软件包中都进行了配置,然后我们还需要对串口、下载等模块进行修改,如下:
![](media/96c9b931cff86a48dbb47953b80ad114.png)
a中断函数处理
![](media/8808da3c4fb3e4a3d04283d2eeeacbad.png)
b中断优先级配置
![](media/44e4a8429efc9d8f3258bd455d7c5b9f.png)
cRCC配置
![](media/3655de0bd1a7df8340684ccc43aedfa9.png)
dSYS配置
![](media/d930f57f1821a959e0dd9f522a2a6c4f.png)
e串口1配置
![](media/ef798ec862f32dc341a9d72777193977.png)
f时钟树配置
图3.21 模块配置
7进行生成工程配置按如下界面进行配置最后点击右上角GENERATE
CODE生成工程后点击Open Project。
![](media/726701d4d352048af6380ee3fb7dd31e.png)
![](media/82fd548a37df739720f71faa065b7dde.png)
图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 512
void task1(void \*pdata);
osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);
//task2
\#define TASK2_STK_SIZE 512
void 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下载到正点原子探索者单片机中
![](media/e5fa29fccefcb0cf1675ab7e763fa087.png)
图3.23 编译、下载程序
10使用串口助手查看两个任务的延时设置不一样运行效果也不一样
![](media/c1a77804bb7bdff73a478692034146cd.png)
图3.24 串口查看界面
# 4、开发参考
1、腾讯物联网操作系统网址<https://github.com/OpenAtomFoundation/TencentOS-tiny>
2、ST官方教程[How to develop a STM32Cube Expansion Package - stm32mcu
(stmicroelectronics.cn)](https://wiki.stmicroelectronics.cn/stm32mcu/wiki/How_to_develop_a_STM32Cube_Expansion_Package)
3、[制作STM32Cube软件包-STM32 PackCreator的使用及软件包的制作 - 极术社区 -
连接开发者与智能计算生态 (aijishu.com)](https://aijishu.com/a/1060000000243533)
4、[1STM32
CubeMX软件包的制作---STM32PackCreator的使用_linwei_Cui的博客-CSDN博客](https://blog.csdn.net/qq_40259429/article/details/120557456?spm=1001.2014.3001.5501)
5、[2STM32
CubeMX软件包的制作---简易软件包的制作_linwei_Cui的博客-CSDN博客](https://blog.csdn.net/qq_40259429/article/details/120583659?spm=1001.2014.3001.5501)