【RTOS】快速体验FreeRTOS所有常用API(1)工程创建

目录

    • 一、工程创建
      • 1.1 新建工程
      • 1.2 配置RCC
      • 1.3 配置SYS
      • 1.4 配置外设
        • 1)配置 LED PC13
        • 2)配置 串口 UART1
        • 3)配置 OLED I2C1
      • 1.5 配置FreeRTOS
      • 1.6 工程设置
      • 1.7 生成代码
      • 1.8 keil设置下载&复位
      • 1.9 添加用户代码

本工程皆在快速体验FreeRTOS所有常用API,不深究概念。

硬件:STM32F103C8T6最小系统、OLED

软件:FreeRTOS、OLED驱动、UART驱动

工具:STM32CubeMX、Keil、串口助手

img

一、工程创建

本部分代码下载链接:

https://wwzr.lanzout.com/iyUvV1l75bja 密码:dqbd

建议直接使用该工程进行后续学习。

该代码尽量做到最简,不添加多余的、不规范的代码。

1.1 新建工程

img

img

1.2 配置RCC

选择外部时钟源。

img

设置外部晶振输入值,我这块板子是8M。

然后手动输入最大时钟频率,然后回车让他自动配置时钟树。我这块板子是72M。

img

1.3 配置SYS

另外,本实验使用了FreeRTOS,FreeRTOS的时基使用的是Systick,而STM32CubeMX中默认的HAL库时基也是Systick,为了避免可能的冲突,最好将HAL库的时基换做其它的硬件定时器:

img

1.4 配置外设

这次用的外设有:LED、串口调试、OLED显示。

1)配置 LED PC13

配置板子LED引脚,推挽输出模式。我这块板子是 PC13。

img

2)配置 串口 UART1

使用串口1,波特率默认,异步通信。

img

3)配置 OLED I2C1

OLED屏幕使用I2C1通道,I2C1使用PB6、PB7作为SCL、SDA引脚,配置如下:

img

1.5 配置FreeRTOS

STM32CubeMX已经将FreeRTOS集成到工具中,并且将RTOS的接口进行了封装CMSIS-RTOS V1/V2,相较之于V1版本的CMSIS-RTOS API,V2版本的API的兼容性更高,为了将来的开发和移 植,建议开发者使用V2版本的API:

img

选择CMSIS V2接口后,还要进一步配置FreeRTOS的参数和功能。

img

FreeRTOS的参数包括时基频率、任务堆栈大小、是否使能互斥锁等等,需要开发者根据自己对FreeRTOS的了解以及项目开发的需求,来定制参数。

使用默认参数不需要修改

img

使用STM32CubeMX,可以手工添加任务、队列、信号量、互斥锁、定时器等等。但是本课程不想严重依赖STM32CubeMX,所以不会使用STM32CubeMX来添加这些对象,而是手写代码来使用这些对象。

使用STM32CubeMX时,有一个默认任务,此任务无法删除,只能修改其名称和函数类型,如下图所示:

使用默认参数不需要修改

img

1.6 工程设置

img

img

1.7 生成代码

点击生成代码

img

打开keil工程

img

1.8 keil设置下载&复位

选择下载器类型,我用的是DAP。点击后面的Setting。

img

进入后勾选自动复位,表现为每次下载程序后单片机自动复位运行程序。

设置完点击OK。

img

因为要使用printf,勾选:

img

1.9 添加用户代码

STM32CubeMX只是帮我们初始化了所配置的硬件模块,你要实现什么功能,需要自己添加代码。

添加MCU-F103等用户自己的代码,包含LED、UART、OLED驱动等。

修改 默认任务 的代码为下图,用于测试LED、UART、OLED程序。

img

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MPP架构和分布式架构的区别

前言:对大数据的数据处理需求,当前技术方向上存在两个不同的发展路线,MPP和分布式处理。两者数据处理的基本思路都是一样的,分布式并行处理再合并结果;但由于二者在处理架构上的差异,最终产品在应用需求性能…

【Python学习】Python学习19- 异常处理

目录 【Python学习】Python学习19- 异常处理 前言python标准异常异常处理带异常类型语法不带异常类型语法使用except而带多种异常类型try-finally 语句触发异常 参考 文章所属专区 Python学习 前言 本章节主要说明Python的异常处理。 python标准异常 BaseException 所有异常…

RabbitMQ详解(值得珍藏)

1. 基本概念 RabbitMQ是一款开源,使用Erlang编写的,基于AMQP协议的消息中间件; 提到RabbitMQ,就不得不提AMQP协议。AMQP协议是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用…

远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制_raylink todesk

目录 一、前言 二、远程控制中的安全威胁 三、国内外远控软件安全机制 【ToDesk】 【RayLink】 【Teamviewer】 【Splashtop】 四、安全远控预防 一、前言 近期,远程控制话题再一次引起关注。 据相关新闻报道,不少不法分子利用远程控制软件实施…

两周掌握Vue3(五):自定义指令、路由、ajax

文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库:跳转 当前分支:05 一、自定义指令 自定义指令是Vue.js框架提供的…

Unity中URP下的SimpleLit顶点着色器

文章目录 前言顶点着色器1、GPU Instance 相关2、顶点输入数据相关3、雾效混合因子4、对 uv 进行 Tilling 和 Offset 的应用 及 把顶点的坐标信息传给输出结构体5、把法线相关的结果,传给输出结构体6、光照贴图相关7、额外灯相关计算8、阴影相关 前言 在上一篇文章…

Ubuntu下,Flutter安装及在VScode中的配置

1、安装flutter 在自己指定的目录下,新建文件夹,并将源码git clone到本地 $ mkdir flutter $ cd flutter$ git clone -b master https://github.com/flutter/flutter.git2、给flutter添加环境变量 #编辑配置文件 $ vi ~/.bashrc #在末尾加入以下内容&…

指针及其应用

1.定义 指针:也是一个变量,存放所指变量的地址,根据变量定义的不同,指针指向的类型也不同 注意:*是与前面类型一体的 int main(void) {int* p; //等价于int *p;//为了区分变量,C语言中一般将*放置于变量…

Flink(十三)【Flink SQL(上)】

前言 最近在假期实训,但是实在水的不行,三天要学完SSM,实在一言难尽,浪费那时间干什么呢。SSM 之前学了一半,等后面忙完了,再去好好重学一遍,毕竟这玩意真是面试必会的东西。 今天开始学习 Flin…

数据结构学习 jz30 包含 min 函数的栈

关键词:排序 题目:最小栈 方法一:在记录这个数的同时,记录目前的最小值。看了提示才写出来的。 方法二:辅助栈。辅助栈保持非严格递减。看了k神的答案。 方法一: 一开始没想到怎么存最小,看…

从零实现一套低代码(保姆级教程)【后端服务】 --- 【16】初始化后端项目

摘要 在前面的实现过程中,我们的低代码平台,在前端已经有一定的构建页面的能力了。 但是对于我们实现一个平台,肯定要支持用户对页面进行保存等功能,包括后面我们运行时的设计,都要依赖于后端的能力 所以&#xff0c…

运维必存的20个常见的故障排查、修复大全

你们好,我的网工朋友。 “稳定是偶然,异常才是常态”。这句话用来形容运维的工作再合适不过了 对于运维来说,工作最常遇到的就是不稳定性带来的各种故障,经常围绕发现故障、响应故障、定位故障、恢复故障这四大步骤打转。 为此…

一篇文章带你搞懂多线程面试相关的一些问题

目录 1.Callable接口 1.1使用Callable接口来创建线程 1.1相关面试题: 介绍下 Callable 是什么 2.JUC常见的类(java.util,concurrent) 2.1ReentrantLock ReentrantLock和sychronized的区别 3.信号量 4.CountDownLatch 5.线程安全的集合类 5.1多线…

Flink-容错机制

Flink中的容错机制 流式数据连续不断地到来,无休无止;所以流处理程序也是持续运行的,并没有一个明确的结束退出时间。机器运行程序,996 起来当然比人要容易得多,不过希望“永远运行”也是不切实际的。因为各种硬件软件…

ioDraw在线图表工具 - 轻松制作专业图表,只需3步!

还在花大量时间手动画图表?还在为图表样式而烦恼?ioDraw为你提供一站式解决方案!ioDraw在线图表工具实现了AI自动生成图表,让你轻松制作专业图表,只需3步! 1. 录入数据 只需将你的数据告诉ioDraw AI助手&…

alibaba.item_get API:电商行业中的数据驱动决策支持

alibaba.item_get API 是阿里巴巴提供的一个用于获取商品详情的接口。在电商行业中,数据驱动的决策支持是非常重要的,而这个 API 可以帮助你获取到商品的各种详细信息,从而为你的决策提供支持。 具体来说,通过使用 alibaba.item_…

【Oracle】期末复习题

目录 一. 单选题(共164 题) 二. 多选题(共14 题) 三. 填空题(共4 题) 四. 分析题(共五题) 一)考生子系统 三)考试存储方案 四)铁路12306 …

条款24:若所有参数皆需类型转换,请为此采用非成员函数

设计一个表示有理数的类时,允许从整数隐式转换为有理数是有用的: class Rational { public:Rational(int numerator 0, // 该构造函数没有explicit限制;int denominator 1); int numerator() const; int denominator() const; const Rational opera…

CAS的超~详细介绍

什么是CAS CAS全称Compare and swap,是一种比较特殊的CPU指令. 字面意思:"比较并交换", 一个CAS涉及到以下操作: 我们假设内存中的原数据为V,旧的预期值A,需要修改的新值B. 1.比较A和V是否相等(比较) 2.如果相等,将B写入V.(交换) 3.返回操作是否成功. 伪代码 下面…

基于位的权限系统

基于位的权限系统是一种利用二进制位运算进行权限管理的技术。在这种系统中,不同的权限被编码为2的幂次方 (例如1、2、4、8等),每个权限对应一个独立的二进制位(可想而知运算速度是非常快的)。通过将这些权限值组合在一起形成一个…