STM32F4+UCOSIII最小系统

news/2024/12/4 22:41:24/

一、概述

目前,各厂家、论坛有各种版本的UCOSIII移植代码,对于初学者来说选择起来比较困难,无法分辨哪些是经过工程验证?是否能够保证长期稳定运行?本文博主有20年工作经验,熟悉嵌入式硬件电路设计、软件编程,熟悉51单片机、AVR单片机、STM32、GD32单片机等,希望将实际项目的编程经验分享给广大嵌入式爱好者。本文主要介绍基于原子阿波罗开发板硬件平台实现的UCOSIII最小系统源代码。

二、硬件平台

原子阿波罗开发板,单片机STM32F429。

三、代码解析

  1. 工程介绍

该工程比较简单,主要有STM32内核相关的CORE、应用相关的USER、ST官方HAL库、DSP_LIB库、内存管理MALLOC、硬件驱动HARDWARE、UCOSIII相关文件组成,其中SYSTEM中实现了delay_us、delay_ms函数,为UCOSIII提供嘀嗒时钟。读者需重点关注main.c及led.c两个文件,了解ucosiii系统运行模式。

  1. led.c文件

完成LED硬件初始化。

void LED_Init(void)
{GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOB_CLK_ENABLE();           //开启GPIOB时钟GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出GPIO_Initure.Pull=GPIO_PULLUP;          //上拉GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速HAL_GPIO_Init(GPIOB,&GPIO_Initure);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);    //PB1置1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);    //PB0置1  
  1. main.c文件

完成时钟配置,HAL库初始化,延时初始化、LED初始化等,创建Start任务等。

int main(void)
{OS_ERR err;CPU_SR_ALLOC();Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz   HAL_Init();                     //初始化HAL库delay_init(180);                //初始化延时函数           LED_Init();                     //初始化LED my_mem_init(SRAMIN);            //初始化内部内存池OSInit(&err);                    //初始化UCOSIIIOS_CRITICAL_ENTER();            //进入临界区//创建开始任务OSTaskCreate((OS_TCB     * )&StartTaskTCB,        //任务控制块(CPU_CHAR    * )"start task",         //任务名字(OS_TASK_PTR )start_task,             //任务函数(void        * )0,                    //传递给任务函数的参数(OS_PRIO      )START_TASK_PRIO,     //任务优先级(CPU_STK   * )&START_TASK_STK[0],    //任务堆栈基地址(CPU_STK_SIZE)START_STK_SIZE/10,    //任务堆栈深度限位(CPU_STK_SIZE)START_STK_SIZE,        //任务堆栈大小(OS_MSG_QTY  )0,                    //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息(OS_TICK      )0,                    //当使能时间片轮转时的时间片长度,为0时为默认长度,(void       * )0,                    //用户补充的存储区(OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项(OS_ERR     * )&err);                //存放该函数错误时的返回值OS_CRITICAL_EXIT();                //退出临界区     OSStart(&err);                  //开启UCOSIIIwhile(1);
}

四、效果展示

五、源码下载

代码地址:Stm32F429+UCOSIII最小系统源码

打字不易,点波关注,评论区留下邮箱,作者无偿提供源码和问题解答。


http://www.ppmy.cn/news/213963.html

相关文章

IMU初始化

IMU初始化是为了给局部BA和全局BA提供一个更好的初值从而减少IMU噪声积累。 IMU初始化分解为多个子问题: 估计陀螺仪偏置忽略加速度计偏置,估计尺度和重力矢量估计加速度计偏置,进一步优化尺度和重力估计速度 1. 陀螺仪偏置估计 初始化过程…

Zero-shot

什么是Zero-shot 在ZSL中,某一类别在训练样本中未出现,但是我们知道这个类别的特征,然后通过语料知识库,便可以将这个类别识别出来。 概括来说,就是已知描述,对未知类别(未在训练集中出现的类别…

Z变换零点极点

在Z变换里,零点的位置表示系统的“谷”,极点的位置表示系统的“峰”,我们把有峰的地方看做信号可以通过的地方,而有谷的地方看做信号被截止的地方。并且我们选择单位圆为频域的一个周期,那么可以得出,如果无…

zcmu1727

Problem A: A Time Limit: 1 Sec Memory Limit: 128 MB Submit: 156 Solved: 69 [ Submit][ Status][ Web Board] Description 赵栋栋最近在研究一个关于数组的一个问题。他有一个数组a1, a2, a3, …, an,初始时每个元素的值都为0。每一步赵栋栋都可以选择一个下…

MiniUI:学习笔记

文章目录 概述使用API全局方法进度条 ProgressBar下拉列表输入框 AutoComplete序列化/反序列化 JSON 本文通过学习视频:https://www.bilibili.com/video/BV1iE411e77b?fromsearch&seid8684106465609100598,以及查询开发文档进行学习。 概述 官网&…

css中字体大小font-size的设置

font-size CSS 属性指定字体的大小。因为该属性的值会被用于计算em和ex长度单位&#xff0c;定义该值可能改变其他元素的大小。 /* <absolute-size>&#xff0c;绝对大小值 */ font-size: xx-small; font-size: x-small; font-size: small; font-size: medium; font-siz…

STM32---ucosii和ucosiii

一、关于ucos 几个 UCOSII 相关的概念需要大家了解一下。任务优先级&#xff0c;任务堆栈&#xff0c;任务控制块&#xff0c;任务就绪表和任务调度器。 任务优先级&#xff0c;这个概念比较好理解&#xff0c; ucos 中&#xff0c;每个任务都有唯一的一个优先级。优先级是任务…

C++中sizeof,strlen(),size(),length()的区别

strlen()&#xff0c;size()&#xff0c;length()用于求字符串的长度&#xff0c;sizeof用于求对象的字节大小 sizeof本质上是一个运算符&#xff0c;它会返回保证能容纳所建立的最大对象的空间大小&#xff0c;其值在编译时便计算好了&#xff0c;所以不能用于计算动态分配的…