文章目录
前言
这是一篇关于STM32F103C8T6基于HAL库移植uC/OS-III及逻辑分析仪波形观测的博客。在这篇文章中,我们将探讨如何在STM32F103C8T6微控制器上移植uC/OS-III操作系统,同时使用逻辑分析仪进行波形观测。HAL库是一个常用的硬件抽象库,它为开发者提供了一套统一的API接口,使得开发者可以更加便捷地进行硬件操作。uC/OS-III是一个开源的实时操作系统,适用于嵌入式系统开发。通过移植uC/OS-III到STM32F103C8T6,我们可以实现多任务管理、时间管理、内存管理等核心功能,从而提高系统的稳定性和可靠性。逻辑分析仪是一种常用的调试工具,它可以实时监测电路的信号状态,帮助开发者快速定位问题。在这篇文章中,我们将介绍STM32F103C8T6的HAL库移植uC/OS-III的基本步骤、逻辑分析仪的使用方法以及如何使用它们进行系统调试。
一、UCOSIII
UCOSIII 是一个可裁剪、可固化、可剥夺的多任务系统,没有任务数目的限制,是UCOS的第三代内核。它支持现代的实时内核所期待的大部分功能,例如资源管理、同步和任务间的通信等。
可剥夺多任务管理:UCOSIII属于可剥夺的多任务内核,总是执行当前就绪的最高优先级任务。
同优先级任务的时间片轮转调度:UCOSIII允许一个任务优先级被多个任务使用,当这个优先级处于最高就绪态的时候,UCOSIII就会轮流调度处于这个优先级的所有任务,让每个任务运行一段由用户指定的时间长度,叫做时间片。
极短的关中断时间:UCOSIII可以采用锁定内核调度的方式而不是关中断的方式来保护临界段代码,这样就可以将关中断的时间降到最低,使得UCOSIII能够非常快速地响应中断请求。
测量运行时间:UCOSIII具有完备的运行时间测量性能。
直接发送信号或消息到任务:UCOSIII允许任务直接发送信号或者消息到其它任务。
任务可以同时等待多个内核对象:UCOSIII的这个特色功能在其它的实时内核中是找不到的。
总的来说,UCOSIII是一个功能强大的实时操作系统,适用于多种嵌入式系统的开发。
二、实验过程步骤
1.建立CubeMX工程
打开stm32 cubeMX,选择芯片stm32f103c8,配置系统时钟为72M.
配置RCC
配置SYS
串口配置USART1
1.3设置PC13为GPIO_Output用于点亮LED灯
创建工程
keil打开工程
三、μC/OS
1、μC/OS简介
μC/OS是一个实时操作系统,全称为Micro-Controller Operating System,由Jean J. Labrosse于1991年设计。它是基于优先级的抢占式内核,用C语言编写,主要用于嵌入式系统。μC/OS最初被Micrium, Inc公司开发为商业版本,2016年被Silicon Laboratories收购后,在Apache许可下作为开源软件发布。
μC/OS的特点包括实时性、可裁剪性、可移植性、可扩展性和易用性。它具有严格的实时性能力,能够在预定义时间内响应外部事件、执行任务,并确保任务间不发生冲突。同时,μC/OS可以根据应用程序的需求进行裁剪,只选择必要的功能模块进行集成,从而降低系统资源占用率。由于其代码结构清晰、层次分明,因此易于移植到各种硬件平台上。它支持多任务、中断、时间片轮转等特性,可满足复杂应用程序对系统扩展性的需求。此外,μC/OS提供了丰富的API接口和用户友好的编程接口,使得开发者能够快速上手并高效地开发应用程序。
μC/OS主要由三个组成部分构成:任务、信号量和消息队列。任务是μC/OS的基本组成单元,通过任务管理器具有不同的优先级来调度任务执行顺序。信号量是一种线程同步机制,用于协调多个任务在访问共享资源时的并发访问控制。消息队列则被用于在任务之间传递数据。
μC/OS的应用范围很广,特别是在需要管理复杂资源和执行多任务的嵌入式系统中。例如,汽车电子控制单元(ECU)、医疗器械、军事设备、家用电器等领域都可以使用μC/OS进行开发。此外,μC/OS还可用于物联网设备、智能家居、智能终端等领域。
2、uCOSIII源码
进入官网下载:
链接: https://www.silabs.com/developers/micrium
进入 Micrium 公司官网下载中心:http://micrium.com/downloadcenter/
选择ST系列,点击 View all STMicroelectronics,点击 STMicroelectronics STM32F103
之后按照提示注册下载即可。
可直接下载此网盘链接内容
链接:https://pan.baidu.com/s/10RqsDRecbmVteWmDv2oUNQ
提取码:1234
3、移植前的准备
为uC-BSP文件夹新建bsp.c和bsp.h文件
给文件夹uC-CONFIG添加以下文件(从以下路径复制过来)
将uCOS相关文件复制到HAL工程的MDK-ARM文件夹下
4、移植
点击Manage Project Items
为项目新建文件夹如下
点击CPU添加如图文件
为LIB添加如图文件
为PORT添加如图文件
为SOURCE添加如图文件
为CONFIG添加如图文件
为BSP添加如图文件
全部添加完毕后,点击OK
导入文件路径
为bsp.c和bsp.h添加代码
bsp.c
// bsp.c
#include "includes.h"
#define DWT_CR *(CPU_REG32 *)0xE0001000
#define DWT_CYCCNT *(CPU_REG32 *)0xE0001004
#define DEM_CR *(CPU_REG32 *)0xE000EDFC
#define DBGMCU_CR *(CPU_REG32 *)0xE0042004
#define DEM_CR_TRCENA (1 << 24)
#define DWT_CR_CYCCNTENA (1 << 0)
CPU_INT32U BSP_CPU_ClkFreq (void)
{
return HAL_RCC_GetHCLKFreq();
}
void BSP_Tick_Init(void)
{
CPU_INT32U cpu_clk_freq;
CPU_INT32U cnts;
cpu_clk_freq = BSP_CPU_ClkFreq();
#if(OS_VERSION>=3000u)
cnts = cpu_clk_freq/(CPU_INT32U)OSCfg_TickRate_Hz;
#else
cnts = cpu_clk_freq/(CPU_INT32U)OS_TICKS_PER_SEC;
#endif
OS_CPU_SysTickInit(cnts);
}
void BSP_Init(void)
{
BSP_Tick_Init();
MX_GPIO_Init();
}
#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
void CPU_TS_TmrInit (void)
{
CPU_INT32U cpu_clk_freq_hz;
DEM_CR |= (CPU_INT32U)DEM_CR_TRCENA; /* Enable Cortex-M3's DWT CYCCNT reg. */
DWT_CYCCNT