STM32F103ZET6_移植uC/OS_HAL

1下载源码

网址

GitHub - weston-embedded/uC-OS2: µC/OS-II is a preemptive, highly portable, and scalable real-time kernels. Designed for ease of use on a huge number of CPU architectures.

需要下载三个文件

1看你使用是ucos2还是3(第一个文件)

2第二个文件

3第三个文件

文件意思

|   |-- cpu/             # CPU相关代码,通常包含特定架构的移植文件|   |-- os/              # μC/OS-II的核心源代码
Cfg配置文件
Ports接口连接文件
Source核心文件|   |-- lib/             # 库文件,可能包含第三方库或通用功能实现

官网也可以下载官网下载的慢

但比较集中下载方便(好找)(内部参数官方会改好)

我的主页有官方的资源,要一积分才能下载

以积分没有的化可以在评论区把邮箱写如并说要什么资源,我免费发给你们

μC/OS-II/
|
|-- Documentation/       # 文档目录,包含μC/OS-II的手册和参考资料
|
|-- Source/              # 源代码目录
|   |-- cpu/             # CPU相关代码,通常包含特定架构的移植文件
|   |   |-- arm-cortex-m/ # Cortex-M系列处理器的特定代码
|   |   |   |-- common/  # 通用代码,如中断和上下文切换
|   |   |   |-- gcc/     # GNU编译器集合(GCC)相关的编译文件
|   |   |   |-- iar/     # IAR编译器相关的编译文件
|   |   |   |-- keil/    # Keil编译器相关的编译文件
|   |   |   |-- ucosii.c # Cortex-M架构的主要移植文件
|   |   |   |-- ucosii.h # Cortex-M架构的主要头文件
|   |
|   |-- os/              # μC/OS-II的核心源代码
|   |   |-- core/        # 核心功能,如任务管理、时间管理等
|   |   |-- portable/    # 可移植层,包含与硬件无关的代码
|   |   |-- shell/       # 命令行外壳(如果支持)
|   |   |-- source/      # 核心源文件
|   |   |-- ucos_ii.c    # μC/OS-II的主要实现文件
|   |   |-- ucos_ii.h    # μC/OS-II的主要头文件
|   |
|   |-- board/           # 板级支持包(BSP),包含特定硬件平台的初始化代码
|   |   |-- stm32f1xx/   # STM32F1系列微控制器的BSP
|   |   |-- stm32f4xx/   # STM32F4系列微控制器的BSP
|   |   |-- ...          # 其他可能的BSP
|   |
|   |-- lib/             # 库文件,可能包含第三方库或通用功能实现
|   |
|   |-- test/            # 测试代码和应用程序示例
|   |
|   |-- Makefile         # 用于编译工程的Makefile文件
|
|-- Examples/            # 示例工程目录,包含针对不同硬件平台的示例项目
|   |-- stm32f103/       # 针对STM32F103系列微控制器的示例项目
|   |-- stm32f429/       # 针对STM32F429系列微控制器的示例项目
|   |-- ...              # 其他可能的示例项目
|
|-- Include/             # 头文件目录,包含所有公共的头文件
|   |-- cpu/             # CPU相关的头文件
|   |-- os/              # μC/OS-II核心的头文件
|   |-- board/           # BSP相关的头文件
|   |-- lib/             # 库相关的头文件
|
|-- Tools/               # 工具和脚本目录,可能包含用于配置或生成代码的工具
|
|-- License.txt          # μC/OS-II的许可证文件
|
|-- Readme.txt           # 有关μC/OS-II的简要信息和安装指南

2实现移植(以官网下载的为例)

1建立基本项目(实现LED的点亮uCOS实现)

1配置时钟和调试接口

2配置gpio(以实现创建任务实现LED)

3创建项目

2移植ucos代码

1在klie5的项目中创建6个分组

对应的下五个文件(ucosiii才分了两个)

注意

cpu的文件中app.和app.h文件可以不用导入进去它们可以用main.h文件代替

main.h文件格局项目例程的app.c更改

2开始为五个分组导入文件

2.1

将ucos文件放入项目文件中

(app.c  app.h可以不添加)(我添加了但没写只添加了头文件如图)

2.2导入bsp文件在导入路径后面我就不把路径的截图放进去了请自己添加

2.3导入cpu 文件

2.4导入第三方库LIB

2.5导入ucos的文件

2.6导入配置文件

注意

文件在下图的选中的文件内下图上面两个不是

修改文件

1找到图中的文件双击

2再到下列代码

代码前

代码后

代码前

代码后

3在main.c中添加头文件并创建任务运行即可

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <includes.h>
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */
//任务控制块
static  OS_TCB   AppTaskStartTCB;//任务堆栈
static  CPU_STK  AppTaskStartStk[APP_TASK_START_STK_SIZE];/* 私有函数原形 --------------------------------------------------------------*/
static  void  AppTaskStart(void *p_arg);
/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 */OS_ERR  err;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit */OSInit(&err);/* USER CODE END SysInit *//* Initialize all configured peripherals */// MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE *//* 创建任务 */OSTaskCreate((OS_TCB     *)&AppTaskStartTCB,                /* Create the start task                                */(CPU_CHAR   *)"App Task Start",(OS_TASK_PTR ) AppTaskStart,(void       *) 0,(OS_PRIO     ) APP_TASK_START_PRIO,(CPU_STK    *)&AppTaskStartStk[0],(CPU_STK_SIZE) APP_TASK_START_STK_SIZE / 10,(CPU_STK_SIZE) APP_TASK_START_STK_SIZE,(OS_MSG_QTY  ) 0,(OS_TICK     ) 0,(void       *) 0,(OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),(OS_ERR     *)&err);/* 启动多任务系统,控制权交给uC/OS-III */OSStart(&err);            /* Start multitasking (i.e. give control to uC/OS-III). */}/*** 函数功能: 启动任务函数体。* 输入参数: p_arg 是在创建该任务时传递的形参* 返 回 值: 无* 说    明:无*/
static  void  AppTaskStart (void *p_arg)
{OS_ERR      err;BSP_Init();                                                 /* Initialize BSP functions                             */CPU_Init();//必须添加也可以写在创建任务之前while (1){HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);OSTimeDlyHMSM(0, 0, 3, 0,OS_OPT_TIME_HMSM_STRICT,&err);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

总结

如果使用GitHub要修改配置文件

使用官网的官方已经修改好了

导入时要注意路径是否正确

有问题评论区见

最终的项目可在资源中找到

本项目重点讲解如何配置和导入ucos文件,创建任务的过程有点不严谨

任务的创建后续会讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】类和对象高级特性

目录 前言 类变量与实例变量 类方法 静态方法 私有属性和方法 多重继承 元类 描述符 总结 前言 在前一篇文章中&#xff0c;我们讨论了 Python 类和对象的基本概念。本文将深入探讨一些高级特性&#xff0c;这些特性可以帮助你更有效地使用 Python 进行面向对象编程。…

Next.js开发中使用useRouter实现点击返回到上一页

在使用Next.js框架做前端页面开发时&#xff0c;如果想返回到上一页&#xff0c;可以利用useRouter钩子提供的back()方法&#xff0c;可以这样做: import {useRouter} from "next/navigation"; import {Space} from "antd"; import {ArrowLeftOutlined} f…

Mendix 创客访谈录|医疗设备领域的数字化转型利器

本期创客 尚衍亮 爱德亚&#xff08;北京&#xff09;医疗科技有限公司 应用开发和数字化事业部开发经理 大家好&#xff0c;我叫尚衍亮。毕业于软件工程专业&#xff0c;有6年的软件开发经验。从2021年开始&#xff0c;我在爱德亚&#xff08;北京&#xff09;医疗科技有限公司…

智能合约开发的过程

智能合约是一种运行在区块链上的程序&#xff0c;可以自动执行预先设定的条款和条件。智能合约具有去中心化、透明、不可篡改等特点&#xff0c;因此被广泛应用于金融、供应链、物联网等领域。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

Spring Boot集成Minio插件快速入门

1 Minio介绍 MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是任意大小&…

LSM-Tree数据结构原理

LSM-Tree树原理 什么是LSM-Tree LSM-Tree 即 Log Structrued Merge Tree&#xff0c;这是一种分层有序&#xff0c;硬盘友好的数据结构。核心思想是利用磁盘顺序写性能远高于随机写。 LSM-Tree 并不是一种严格的树结构&#xff0c;而是一种内存磁盘的多层存储结构。HBase、L…

基于Baichuan2的新冠流感中医自我诊断治疗(大模型微调+Gradio)

一、项目说明 项目使用paddleNLP提供的大模型套件对Baichuan2-7b/13b进行微调&#xff0c;使用《中医治疗新冠流感支原体感染等有效病历集》进行Lora训练&#xff0c;使大模型具备使用中医方案诊断和治疗新冠、流感等上呼吸道感染的能力。 二、PaddleNLP PaddleNLP提供的飞桨…

css 文字两端对齐

<body><div class"box"><p>姓名</p><p>性与别</p><p>家庭住址</p><p>how are you</p><p>hello</p><p>1234</p><p>1 2 3 4</p></div> </body> text-a…

Ubuntu-24.04-live-server-amd64启用ssh

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu安装qemu-guest-agent Ubuntu乌班图安装VIM文本编辑器工具 文章目录 系列文章目录前言一、输入安装命令二、使用私钥登录&#xff08;可选&#xff09;1.创建私钥2.生成三个文件说明3.将公钥复制到服务器 三…

面向对象进阶--继承(Java继承(超详解))

目录 1. 继承 1.1 继承概述 1.2 继承特点 1.3练习 1.4继承父类的内容 构造方法是否被子类继承 成员变量是否被子类继承 成员方法是否被子类继承 1.5总结 继承中&#xff1a;成员变量的访问特点 继承中&#xff1a;成员方法的访问特点 方法重写概述 方法重写的本质 …

飞睿智能LR-WIFI无线数据采集模块,6公里视频图传,安防监控、工业传输数据更高效

在数字化浪潮席卷全球的今天&#xff0c;无线数据采集技术已经成为推动社会进步的重要力量。特别是在安防监控和工业领域&#xff0c;高效、稳定的数据传输成为了实现智能化、自动化的关键。飞睿智能LR-WiFi无线数据采集模块不仅具备可靠的传输性能&#xff0c;还能在复杂环境下…

尚硅谷爬虫学习第一天(3) 请求对象定制

#url的组成 #协议 http&#xff0c;https&#xff0c;一个安全&#xff0c;一个不安全。 #主机&#xff0c; 端口号 学过java 的肯定知道 沃日&#xff0c;以前面试运维的时候&#xff0c;问到主机地址&#xff0c;我懵逼了下&#xff0c;回了个8080 # 主机地址 80 # …

关于微信小程序(必看)

前言 为规范开发者的用户个人信息处理行为&#xff0c;保障用户的合法权益&#xff0c;自2023年9月15日起&#xff0c;对于涉及处理用户个人信息的小程序开发者&#xff0c;微信要求&#xff0c;仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则…

Datacom HCIE实验考试通过率90%!深圳智汇云校传来5月捷报!

坚持不懈地努力&#xff0c;才能取得成功的果实 这是不变的真理 深圳云校传来5月捷报 在Datacom HCIE实验考试中 共有10名学员应战 其中9名学员凭借出色的表现 一次性通过了考试 展现出了扎实的技术能力 通过率高达90% &#xff08;华为历年考试平均通过率约60%&#…

超级棒的时钟屏保 芝麻时钟颜值高 屏保界的天花板

太酷了&#xff01;这个时钟屏保太有个性了 屏保时钟软件推荐&#xff01;超级棒的时钟屏保 芝麻时钟颜值高 屏保界的天花板&#xff0c;今天小编给大家分享一个非常实用好看的时钟屏保&#xff08;芝麻时钟&#xff09;&#xff0c;从美观、功能、效果、操作方面去评估&#x…

【机器学习】机器学习重要方法——无监督学习:理论、算法与实践

文章目录 引言第一章 无监督学习的基本概念1.1 什么是无监督学习1.2 无监督学习的主要任务 第二章 无监督学习的核心算法2.1 聚类算法2.1.1 K均值聚类2.1.2 层次聚类2.1.3 DBSCAN聚类 2.2 降维算法2.2.1 主成分分析&#xff08;PCA&#xff09;2.2.2 t-SNE 2.3 异常检测算法2.3…

Java new HashMap 指定容量,代码怎么写? 学习源码小记

之前针对 创建map 指定容量&#xff0c;写过一篇吐槽教学文章&#xff1a;HashMap 使用的时候指定容量&#xff1f;你真的用明白了吗&#xff1f;&#xff08;值得一阅&#xff09;_new hashmap<>(4);-CSDN博客 因为我们经常要通过代码做一些数据的分组&#xff0c;比如查…

深入理解网络协议——搞懂协议在系统中的应用

1. 不精确指明的协议软件接口 在多数实现中&#xff0c;TCP/IP协议软件驻留在计算机的操作系统中。因此&#xff0c;只要应用程序使用TCP/IP通信&#xff0c;它就必须与操作系统交互并请求其服务。从程序员的观点看&#xff0c;操作系统所提供的那些例程定义了应用程序和协议软…

重庆地区媒体宣传邀约资源整理

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 重庆地区媒体宣传邀约资源整理 一、主流媒体资源 电视台&#xff1a;重庆电视台&#xff1a;作为重庆地区最具影响力的电视媒体之一&#xff0c;拥有多个频道&#xff0c;涵盖新闻、综艺…

python-日历库calendar

目录 打印日历 基本日历类Calendar TextCalendar类 HTMLCalendar类 打印日历 设置日历每周开始日期(周几) import calendarcalendar.setfirstweekday(calendar.SUNDAY) # 设置日历中每周以周几为第一天显示 打印某年日历 print(calendar.calendar(2024, w2, l1, c6, m…