基于STM32HAL库的uc/OS系统移植

一、STM32CubeMX建立HAL库工程

(1)配置SYS

在这里插入图片描述

(2)配置RCC

在这里插入图片描述

(3)将PC13引脚设置为 GPIO OUT模式,点亮灯

在这里插入图片描述

(4)串口USART1设置

在这里插入图片描述

(5)工程项目设置

在这里插入图片描述在这里插入图片描述
设置完毕后点击右上角的GENERATE CODE生成代码,在keil打开创建好的工程
并在主函数main中的while循环中添加以下代码语句

		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
		HAL_Delay(500);
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
		HAL_Delay(500);

进行编译烧录,BOOT0置零,按下reset键,观察到LED灯闪烁

二、uc/OSIII源码的准备工作

1、下载

官网下载链接:http://micrium.com/downloadcenter/

2、移植准备

(1)在生成的HAL工程文件夹usOS中新建一个 uCOS的文件夹,将源码中的文件夹: Uc-CPU、 uC-LIB、 Ucos-III 复制到新建的文件夹中
在这里插入图片描述
(2)在HAL工程usOS文件目录中的core->Src文件下新建一个OS文件夹
在这里插入图片描述

(3)将刚才下载源码打开,将下图所示路径下的文件复制到上一步建立的OS文件夹中,同时新建三个空白文件: bsp.c、bsp.h、app.h
在这里插入图片描述
在这里插入图片描述

三、移植

继续在keil中打开创建好的HAL工程

1、添加uCOS文件到项目

在这里插入图片描述

2、添加文件到组件
  • 选择bsp组件,点击add file,选择文件目录core->Src->OC,添加bsp.c和bsp.h在这里插入图片描述
  • 选择ucOS-LIB组件,选择文件目录,添加文件。其中lib_mem_a asm文件在uC-LIB->Ports->ARM-Cortex-M3->RealView路径中选择添加
    在这里插入图片描述
    在这里插入图片描述
  • ucOS-CPU组件,点击add file,文件路径同上,在uC-CPU中选择三个文件并添加,在ARM-Cortex-M3->RealView中选择并添加另外三个文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • ucOS-Port组件,文件路径同上,在uCOS-III->Ports->RAM-Cortex-M3->Generic->RealView中选择文件并添加
    在这里插入图片描述
    在这里插入图片描述
  • ucOS-Source组件,文件路径同上,在uCOS-III->Source中选择All Files类型,添加所有文件
    在这里插入图片描述在这里插入图片描述
  • ucOS-sfg组件,选择Core->Src->OS,选择以下文件并添加。至此,所有文件添加完成,点击OK
    在这里插入图片描述在这里插入图片描述
3、添加头文件路径

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

四、修改和添加代码文件

1、Application/MDK-ARM->startup_stm32f103xb.s

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

2、OS-cfg->app_cfg.h


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

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

3、OS-cfg->includes.h


在这里插入图片描述

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

4、bps->bps.c,bps.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      = (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)
{
   
	C
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值