STM32F4+UCOSIII最小系统

一、概述

目前,各厂家、论坛有各种版本的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,0
    GPIO_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);                    //初始化UCOSIII
    OS_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);                  //开启UCOSIII
    while(1);
}

四、效果展示

五、源码下载

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值