文章目录
一、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