基于STM32CubeMX移植uC/OS-|||系统

本文详细介绍了如何在STM32CubeMX环境下移植uC/OS-II操作系统,包括获取源码、整理文件夹、设置环境、改写代码等步骤,并解决了编译过程中的内存溢出问题。
摘要由CSDN通过智能技术生成

一、获取uC/OS-|||源码

链接:https://pan.baidu.com/s/1_Wk-hbeQ7KrvnoA0GwJXdA
提取码:qwer

二、整理文件夹

2.1新建文件夹

在下载的文件夹中新建两个文件夹uC-BSP和uC-CONFIG,后续操作会使用。
在这里插入图片描述

2.2创建空文件

用vc、dev或者其他变成软件创建bsp.c和bsp.h文件
在这里插入图片描述

2.3导入源码

在这里插入图片描述

2.4设置STM32cubemx环境

设置gpio管脚PB0,PB1来观察两个task任务下的led闪烁,并且设置串口usart1,中断不用开启。同时要设置sys,rcc,以及clock72MHZ

关于详情的管脚设置请参考以前的博客:https://blog.csdn.net/qq_45917157/article/details/121161981?spm=1001.2014.3001.5502

配置Rcc
在这里插入图片描述

设置PB0,PB1为GPIO_Output
在这里插入图片描述

设置串口USART1
在这里插入图片描述

设置时钟参数

在这里插入图片描述

建立工程
在这里插入图片描述
在这里插入图片描述

2.5导入文件和增加头函数路径

在这里插入图片描述

2.6打开keil,增加item

添加如下六个groups
在这里插入图片描述

2.6.1 在BSP,file下添加前文创建的空白文件bsp.c,bsp.h

在这里插入图片描述
在这里插入图片描述

2.6.2在CONFIG添加file,共8个

在这里插入图片描述

2.6.3在SOURCE添加20个

在这里插入图片描述
在这里插入图片描述

2.6.4 PORT下添加3个

在这里插入图片描述

2.6.5CPU下添加6个

其中包括uC-CPU下的3个和realview下的3个
在这里插入图片描述
在这里插入图片描述

2.6.6LIB下添加10个

和2.6.6CPU操作相似
在这里插入图片描述

2.7加入文件编译路径

在这里插入图片描述

三、改写代码

3.1 修改startup文件

PendSV_Handler -----> OS_CPU_PendSVHandler
SysTick_Handler -----> OS_CPU_SysTickHandler

共四处需要修改
在这里插入图片描述

在这里插入图片描述

3.2修改CONFIG/app_cfg.h

#define APP_CFG_SERIAL_EN DEF_ENABLED ------>

#define APP_CFG_SERIAL_EN DEF_DISABLED

#define APP_TRACE BSP_Ser_Printf --------> #define APP_TRACE (void)

在这里插入图片描述

在这里插入图片描述

3.3修改CONFIG/includes.h

在#include<bsp.h>后加上
#include “gpio.h”
#include “app_cfg.h”

将#include <stm32f10x_lib.h> 改为 #include “stm32f1xx_hal.h”
在这里插入图片描述

3.4 修改BSP/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 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值