实验目标:
在STM32F103C8微控制器上成功运行uCOSIII实时操作系统。
验证HAL库的功能和性能。
实验步骤:
准备开发环境:安装Keil uVision IDE和相关工具链。
创建项目:使用Keil uVision创建STM32F103C8项目。
配置硬件:根据STM32F103C8的数据手册配置相关硬件,如时钟、GPIO等。
编写代码:
移植uCOSIII:根据uCOSIII的移植指南,进行相关配置和代码修改。
编写应用程序:基于uCOSIII的任务调度和HAL库,编写简单的任务代码。
编译:使用Keil uVision编译项目。
调试:使用Keil uVision的调试功能,单步执行并观察程序运行状态。
一.建立CubeMX工程
配置RCC
配置SYS
串口配置USART1
生成代码
二、获取uC/OS-III源码
官网下载地址:https://www.silabs.com/developers/micrium
三、代码移植
四、修改代码
- 修改bsp.c和bsp.h文件
修改bsp.h文件如下:
// bsp.h
#ifndef __BSP_H__
#define __BSP_H__
#include "stm32f1xx_hal.h"
void BSP_Init(void);
#endif
修改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 = (CPU_INT32U)0u;
DWT_CR |= (CPU_INT32U)DWT_CR_CYCCNTENA;
cpu_clk_freq_hz = BSP_CPU_ClkFreq();
CPU_TS_TmrFreqSet(cpu_clk_freq_hz);
}
#endif
#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
CPU_TS_TMR CPU_TS_TmrRd