uC-OS2 V2.93 STM32L476 移植:环境搭建篇

news2024/9/24 15:17:12

前言

  • uC-OS2 是比较经典的 RTOS,如今软件授权已经改为 Apache License Version 2.0,意味着可以免费商用了

  • 当前 uC-OS2 的最新版本是: V2.93,打算研究一下 RTOS 的设计思想,所以想在已有的开发板:NUCLEO-L476RG,也就是 STM32L476RG 平台上进行移植、研究

开发环境

  • win10 64位

  • Keil uVision5,MDK V5.36

  • uC-OS2 V2.93

  • 开发板:NUCLEO-L476RG ,MCU 为 STM32L476RG

  • STM32CubeMX 6.9.1,用于生成 STM32的裸机工程

STM32 裸机工程

  • 首先下载并安装 STM32CubeMX 6.9.1,这是个ST 强大的 工程配置生成 IDE,可以生成 Keil MDK 或者 IAR 的 STM32工程,同时配置好 STM32 HAL库,配置好系统时钟、引脚、外设等,这样一套下来,就有了一个初步的裸机工程。

  • 打开 STM32CubeMX,新建 工程,选择 board NUCLEO-L476RG,双击,进行STM32L476 的配置

  • 这里基本上看一下即可,烧写引脚、串口引脚、LED 引脚,系统时钟配置:80MHz

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Keil MDK5 工程

  • 如果生成的Keil MDK5 工程,想再修改配置,就双击 工程下的 STM32CubeMX 配置文件 stm32l476_ucosii_led.ioc 即可,如重新配置引脚、外设、时钟等

  • 生成的Keil MDK5 工程如下,点击编译可以正常编译通过。

  • 可以写一个 LED 闪烁的 简单的裸机程序,然后下载到 开发板,确认是否可以正常工作

在这里插入图片描述

裸机 LED 驱动

  • 默认生成的工程,LED 的引脚已经配置了,当然可以手动配置

  • 新建 led.c

#include "main.h"

void led_grn_ctrl(unsigned int bon)
{
    if (bon == 0x01) /* LEDG ON */
    {
        HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
    }
    else
    {
        HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
    }
}
  • 新建 led.h
#ifndef __LED_H__
#define __LED_H__

void led_grn_ctrl(unsigned int bon);

#endif

  • 把 led.c 与 led.h 加入 Keil MDK5 的工程里面

  • 修改 main.c,让 LED 闪烁起来

#include "main.h"
#include "led.h"

UART_HandleTypeDef huart2;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART2_UART_Init();

    while (1)
    {
        led_grn_ctrl(1);
        HAL_Delay(1000);
        led_grn_ctrl(0);
        HAL_Delay(1000);
    }
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 添加 led.c 到工程,然后配置好 led.h 头文件路径,编译下载到开发板,发现开发板的 LED 开始闪烁,当前是 1秒闪烁一次

在这里插入图片描述

在这里插入图片描述

下载 uC-OS2

  • 使用 git 克隆 : 下载地址 https://github.com/weston-embedded/uC-OS2.git

  • git clone https://github.com/weston-embedded/uC-OS2.git

在这里插入图片描述

  • 待续

小结

  • 本篇初步搭建 STM32 的裸机工程,裸机下 让 LED 闪烁起来

  • 添加基本的 LED 控制驱动 到工程

  • 接下来记录 uC-OS2 在 STM32 上的移植与配置

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

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

相关文章

Mybatis,Spring,SpringMVC项目创建

先做一些设置 file——setting——maven 创建项目maven项目 主方法下和java平行 创建完成 接下里就是导依赖了 spring和mybatis创建文件是一样的,就是配置不一样 SpringMVC前面和Mybatis和Spring是一样的,后面需要web 然后是new——projectStructure …

【数字IC基础】从触发器到亚稳态

从触发器到亚稳态 单稳态和双稳态三态门单稳态电路双稳态电路 锁存器SR锁存器 触发器电平触发的触发器SR触发器D锁存器(电平触发的D触发器) 边沿触发的触发器边沿触发 D 触发器脉冲触发的触发器 建立时间和保持时间恢复时间和去除时间亚稳态亚稳态的产生…

C++ | 哈希表的实现与unordered_set/unordered_map的封装

目录 前言 一、哈希 1、哈希的概念 2、哈希函数 (1)直接定址法 (2)除留余数法 (3)平方取中法(了解) (4)随机数法(了解) 3、哈…

.net 6升级.net7 容器报错is not supported on this platform.

一、生成验证码报错 System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform.Tue, Aug 1 2023 9:57:37 pmat System.Drawing.Image..ctor()Tue, Aug 1 2023 9:57:37 pmat System.Drawing.Bitmap..ctor(Int32 width, Int32 height) 二…

keil使用printf函数重定串口输出,程序卡在Reset_Handler

最近在做国产芯片GD32F103项目,使用printf()函数重定向USART0串口输出,发现程序没有运行,单步调试发现,程序卡在startup_gd32f10x.s文件的Reset_Handler处,记录一下解决方法。 解决办法: 1、引用头文件#in…

Git rebase和merge区别详解

文章目录 变基的基础用法变基过程中的冲突解决冲突后无法push问题更新变基后的代码更有趣的变基用法变基的风险用变基解决变基变基 vs 合并 此文在阅读前需要有一定的git命令基础,若基础尚未掌握,建议先阅读这篇文章Git命令播报详版 在 Git 中整合来自不…

【ChatGPT辅助学Rust | 基础系列 | 函数,语句和表达式】函数的定义,使用和特性

文章标题 简介一,函数1,函数的定义2,函数的调用3,函数的参数4,函数的返回值 二,语句和表达式1,语句2,表达式 总结: 简介 在Rust编程中,函数,语句…

hadoop与HDFS交互

一、利用Shell命令与HDFS进行交互 在进行HDFS编程实践前,需要首先启动Hadoop。可以执行如下命令启动Hadoop: cd /usr/local/hadoop ./sbin/start-dfs.sh #启动hadoop Hadoop支持很多Shell命令,其中fs是HDFS最常用的命令,利用fs…

在矩池云使用Llama2-7B的具体方法

今天给大家分享如何在矩池云服务器使用 Llama2-7b模型。 硬件要求 矩池云已经配置好了 Llama 2 Web UI 环境,显存需要大于 8G,可以选择 A4000、P100、3090 以及更高配置的等显卡。 租用机器 在矩池云主机市场:https://matpool.com/host-m…

5.开发DAO组件 -- Spring Data JPA

开发DAO组件 作用:用来访问数据库 持久化技术:Spring Data, JPA, Mybaits,jOOQ 等 Spring Boot为常见持久化技术提供了支持。 现在使用 Spring Data JPA Spring Data JPA 使用Spring Data JPA来访问数据库,需要再项目添加两个…

探究Vue源码:mustache模板引擎(8) 了解nestTokens 手写梳理模板字符串井号循环嵌套结构tokens

上文 探究Vue源码:mustache模板引擎(7) 手写模板字符串转换tokens数组过程中 我们操作出了一个较为简单的 tokens数组 并简单处理了 井号反斜杠的特殊符号语法 那么 我们现在需要将零散的tokens嵌套起来 主要就体现在 我们 井号 到 反斜杠 中间的内容 显然是属于循环语句中的子…

Postman如何做接口测试1:如何导入 swagger 接口文档

在使用 postman 做接口测试过程中,测试工程师会往界面中填入非常多的参数,包括 url 地址,请求方法,消息头和消息体等一系列数据,在请求参数比较多的情况下非常花时间。 我们可以使用 postman 的文档导入功能&#xff…

Chapter 11: Tuples | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介TuplesTuples are immutableComparing tuplesTuple assignmentDictionaries and tuplesMultiple assignment with dictionariesThe most common wordsUsing tuples as keys in dictionariesSequences: strings, lists, and tuples - Oh M…

因果推断(二)倾向匹配得分(PSM)

因果推断(二)倾向匹配得分(PSM) 前文介绍了如何通过合成控制法构造相似的对照组,除此之外,也可以根据倾向匹配得分(PSM)进行构造,即为每一个试验组样本在对照组中找对与…

dialog => :before-close的属性应用

在element-ui里面关闭弹窗的时候before-close会触发。 也就是点击X的时候回触发before-close这个属性, 代码实例: <el-dialogtitle"新增用户":visible.sync"dialogVisible"width"50%":before-close"handleClose"> handleClose…

【动态规划part15】| 392.判断子序列、115.不同的子序列

&#x1f388;LeetCode392.判断子序列 链接&#xff1a;392.判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;…

Linux端口与netstat使用

端口是设备与外界交流的通道&#xff0c;有物理端口和虚拟端口。 Linux有六万多端口&#xff0c;可以分为下面几类&#xff1a; 1.公认端口&#xff08;1~1023&#xff09;&#xff1a;用于系统内置与知名程序的预留使用 2.注册端口&#xff08;1024~49151&#xff09;&…

使用webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

1、前言 在我们使用 Selenium 进行 UI 自动化测试时&#xff0c;常常会因为浏览器驱动与浏览器版本不匹配&#xff0c;而导致自动化测试无法执行&#xff0c;需要手动去下载对应的驱动版本&#xff0c;并替换原有的驱动&#xff0c;可能还会遇到跨操作系统进行测试的时候&…

【autoresizing案例 Objective-C语言】

一、autoresizing案例 1.在介绍autoresizing之前,告诉大家,这个只是介绍,以后不要用这个东西,都用autolayout 还有一个非常重要的就是,使用autoresizing,就不能用autolayout,反之亦然 2.我们来看一个案例,看一个什么案例呢,看这么一个案例, 大家先看我这个的要求:…

如何安装、部署、启动Jenkins

一、测试环境 Linux系统 Centos 7 二、安装步骤&#xff1a; 1、安装jdk 我安装的是jdk8&#xff0c;此处就不多说了&#xff0c;自己百度哈&#xff0c;很简单 2、安装jenkins 首先依次执行如下三个命令&#xff1a; 2.1、导入镜像&#xff1a; [rootcentos7 ~]# sudo …