STM32F103C8移植uCOSIII

本文详细介绍了如何在STM32F103C8上移植uCOSIII操作系统,从使用STM32CubeMX建立HAL库,下载并添加uCOSIII源码,到配置Keil工程,修改代码,烧录,以及最终的结果展示。在移植过程中,遇到了一些问题,但通过学习和交流得以解决,为后续深入学习uCOSIII打下了基础。
摘要由CSDN通过智能技术生成

一、移植uc/OS-III

1.使用STM32CubeMX建立hal库

建立工程选择STM32F103C8芯片
在这里插入图片描述
RCC中的HSE为Crystal/Ceramic Resonator
在这里插入图片描述
SYS中,在Debug处选择Serial Wire
在这里插入图片描述
设置串口USART1
在这里插入图片描述
设置PC13与PA3为GPIO_Output
在这里插入图片描述
点击Clock Configuration进行如下配置
在这里插入图片描述
在Code Generator中勾选
在这里插入图片描述
最后,更改如下设置即可
在这里插入图片描述

2.下载uC/OS-III源码

①官网下载:http://micrium.com/downloadcenter/
②将以下文件复制到刚才新建工程的MDK-ARM文件夹下
在这里插入图片描述

3.uCOSIII源码移植

Keil打开工程,将uCOSIII的文件添加到工程
在这里插入图片描述
将下载的源文件夹复制到该新建文件中
在这里插入图片描述
在Core中的Src文件夹下新建一个OS文件夹
在这里插入图片描述
将Micrium\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-III下的这些文件复制到OS文件中
在这里插入图片描述
在OS文件夹中新建三个空白文件 bsp.c bsp.h app.h

在这里插入图片描述

4.添加工程组件及路径

添加六个新组
在这里插入图片描述
将app.c添加进Application/User/Core组,将Core/Src/OS中的bsp.c、bsp.h添加进bsp组
在这里插入图片描述
在这里插入图片描述
将uCOS/uC-CPU中的cpu_core.c、cpu_core.h、cpu_def.h和uCOS/uC-CPU/ARM-Cortex-M3/RealView中的cpu.h、cpu_c.c、cpu_a.asm添加进uCOSIII_CPU组
在这里插入图片描述
将uCOS/uC-LIB中的9个文件和uCOS/uC-LIB/Ports/ARM-Cortex-M3/Realview中的lib_mem_a.asm添加到uCOSIII-LIB组
在这里插入图片描述
将uCOS/uCOS-III/Ports/ARM-Cortex-M3/Generic/RealView中的3个文件添加到uCOSIII_Ports组
在这里插入图片描述
点击魔法棒,进行添加如下路径
在这里插入图片描述
并且点击Target,修改相关参数
在这里插入图片描述

5.添加代码及修改代码

在这里插入图片描述
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 (void)
{
   
    return ((CPU_TS_TMR)DWT_CYCCNT);
}
#endif
 
 
#if (CPU_CFG_TS_32_EN == DEF_ENABLED)
CPU_INT64U  CPU_TS32_to_uSec (CPU_TS32  ts_cnts)
{
   
	CPU_INT64U  ts_us;
  CPU_INT64U  fclk_freq;
 
 
  fclk_freq = BSP_CPU_ClkFreq();
  ts_us     = ts_cnts / (fclk_freq / DEF_TIME_NBR_uS_PER_SEC);
 
  return (ts_us);
}
#endif
 
 
#if (CPU_CFG_TS_64_EN == DEF_ENABLED)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值