【嵌入式系统开发17】stm32基于HAL库uCOS-III移植

一:要求

学习嵌入式实时操作系统(RTOS),以uc/OS为例,将其移植到stm32F103上,构建至少3个任务(task):其中两个task分别以1s和3s周期对LED灯进行点亮-熄灭的控制;另外一个task以2s周期通过串口发送“hello uc/OS! 欢迎来到RTOS多任务环境!”。记录详细的移植过程。

二.获取uCOS-III源码

点击以下连接可以下载https://github.com/weiji217/no9/blob/main/Software.zip

三.任务

1、移植文件

将下载好的文件复制粘贴到工程的MDK-ARM里面
如图所示
在这里插入图片描述
随后打开keil工程,点击上面的“品”
在这里插入图片描述
先创建如图几个文件,随后点击右下角的Add Files
在这里插入图片描述

①.cpu添加

添加的文件就是刚刚我们下载进来的,点击uC-CPU
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

②LIB部分

随后同理
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

③.PORT部分

点击uCOS-III\Ports\ARM-Cortex-M3\Generic\RealView
找到文件
在这里插入图片描述

在这里插入图片描述

④SOURCE部分

点击MDK-ARM\uCOS-III\Source
在这里插入图片描述
把这些所有文件都添加进去。
在这里插入图片描述

⑤CONFIG部分

点击MDK-ARM\uC-CONFIG
在这里插入图片描述
添加
在这里插入图片描述

⑥BSP部分

点击MDK-ARM\uC-BSP

添加
在这里插入图片描述
添加完成点击OK。
导入路径。
点击仙女棒,随后按如图所示添加路径即可。
在这里插入图片描述

2…代码

1)启动文件.
①打开startup_stm32f103xb.s文件

将75-76行将如图两行代码分别更改为在这里插入图片描述

OS_CPU_PendSVHandler
OS_CPU_SysTickHandler

174、175行和178、179行也这样操作
在这里插入图片描述

②打开app_cfg.h文件

将42行代码后面代为 DEF_DISABLED

在这里插入图片描述
随后在85行更改为 #define APP_TRACE(void)在这里插入图片描述

③打开includes.h文件

在这里插入图片描述
在69行插入以下代码

#include "gpio.h"
#include "app_cfg.h"

87行将#include <stm32f10x_lib.h>改为

#include “stm32f1xx_hal.h”
lib_cfg.h文件

打开
将此处改为5u
在这里插入图片描述

usart.c文件

打开
在文件尾部加入代码

/* USER CODE BEGIN 1 */

typedef struct __FILE FILE;
int fputc(int ch,FILE *f){
   
	HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff);
	return ch;
}

/* USER CODE END 1 */

在这里插入图片描述

⑥初始化管脚

在gpio.c文件的第一个函数,改为如图所示

void MX_GPIO_Init(void)
{
   

  GPIO_InitTypeDef GPIO_InitStruct = {
   0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);


  /*Configure GPIO pin : PC13|PA3 */
  GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}



⑦为bsp.c和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()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知名未几

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值