STM32 CubeMX使用介绍(含FreeRTOS生成)

文章目录

  • 前言
  • 1. 简介
    • 1.1 什么是STM32CubeMX
    • 1.2 为什么会有STM32CubeMX的出现
    • 1.3 STM32CubeMX常用功能有哪些?
    • 1.4 官方资料下载地址
  • 2. 下载和安装STM32CubeMX
    • 2.1 下载软件
    • 2.2 软件安装
  • 3. 使用方式
    • 3.1 说明
    • 3.2 不同选择器介绍
    • 3.3 构建新的项目
      • 3.1 选择单片机的型号
      • 3.2 引脚配置
    • 3.3 选择FreeRTOS
    • 3.4 生成代码
  • 4. 我的疑问
    • 4.1 怎么生成keil5下使用的工程
    • 4.2 工作频率怎么进行配置?都是什么含义
    • 4.3 什么是STM32 Cube的扩展包?
    • 4.4 STM32的时钟配置看起来很复杂?那么它有哪些时钟?都各自有什么作用
  • 5. 总结
  • 6. 参考链接


前言

手上有块STM32L4的板子,想要在上面把FreeRTOS给用起来,顺便把这个板子也用起来。

自己在网上找了下Free RTOS的源码,下载下来后发现移植目录下有Core-M4的移植版本。

本想着拿来直接用,但是发现又缺少了STM32L4的驱动,然后通过一些其它渠道了解到,现在STM芯片开发方式大都是通过ST公司提供的STM32 CubeMX来生成驱动和Free RTOS。这里记录下学习使用STM32 CubeMX生成含FreeRTOS 操作系统和驱动工程的过程。

1. 简介

1.1 什么是STM32CubeMX

STMCube 源自意法半导体,旨在通过减少开发工作量、时间和成本,让开发人员的开发时更轻松。 STM32Cube 基于 Arm®(a) Cortex® 内核,涵盖 STM32 微控制器整个产品系列。

STM32Cube 包括:

  1. 图形软件配置工具STM32CubeMX,可通过图形向导生成初始化C代码
  2. 综合的嵌入式软件平台,并针对每个系列提供单独的库文件(例如STM32CubeF2用于STM32F2系列,STM32CubeF4用于STM32F4系列)

这个工具实际上和之前用MG21开发zigbee设备时,用的Silicon labs的 SSV5/ SSV4 IDE很像,就是可以通过选择具体的芯片型号,然后通过图形化的界面配置设备类型(协调器、路由器、终端设备)、endpoint的数量、支持的class和attribute,以及配置各个引脚的功能、是否低功耗和时钟频率包括产生各种事件等。

1.2 为什么会有STM32CubeMX的出现

其实最主要的目的就是简化使用STM32开发的流程,使用户能够以更简单、更快速且稳定的方式去完成基于STM32的应用开发。

我之前体会过类似的工具,如上述所说的Siliconlabs的ssv5,我最直观的感受是用习惯后,真的很好用。

当时刚接触这款芯片,什么都不清楚,然后就按照视频指导,在IDE上点一点就很快生成了自己想要的demo原型。

特别是通过IDE借助图形化的操作方式,去操作底层GPIO和时钟等芯片基本配置时,可以很直观的看到当前所有GPIO处于什么工作模式,同时不需要去阅读底层源码就能实现对GPIO输入输出模式、默认电平等的控制,特别是对I2C和SPI以及ADC进行IO配置时,特别方便,只需要选中要用的I2C或者ADC自动就会把对应引脚给配好,同时还能根据自己的需要去切换为可以配置为I2C或者ADC的其它引脚。

而在之前我们操作GPIO和SPI以及ADC时首先要去熟悉芯片手册,知道哪些IO口可以当作输入输出IO、ADC、SPI使用,然后再查看怎么去进行配置。

另外通过图形化界面去配置设备的类型、支持的endpoint数量、产生事件、以及动态加载各种组件时,都只需要在IDE上点击选中后,直接生成新的代码即可。

过去想要在原有的基础上增加一个enpoint(其下会有一些新的class和attibute)或者组件时,要先熟悉代码框架,然后再一点点的细心调整,耗时且容易出错。从而让开发者不能聚焦在自己所关注的业务上,进而降低产品竞争力。

1.3 STM32CubeMX常用功能有哪些?

  • 引脚配置:可以通过图形界面轻松配置微控制器的引脚功能,包括GPIO、串口、定时器等。

  • 时钟配置:可配置系统时钟源、频率、分频器等参数,帮助用户优化系统时钟设计。

  • 中断配置:可以设置各个外设的中断优先级和使能状态,方便中断管理。

  • 外设配置:支持配置各种外设,如UART、SPI、I2C、定时器等,包括模式选择、时钟频率等。

  • 电源管理:可配置电源管理模式,包括低功耗模式、唤醒源等,帮助优化功耗。

  • RTOS配置:支持FreeRTOS等实时操作系统的集成,可以方便地配置RTOS相关参数。

  • 代码生成:可以自动生成基本的启动代码和初始化代码,加快项目开发速度。

  • 外设库集成:可选择集成HAL库或LL库,方便使用ST提供的外设驱动库。

  • 时序图配置:支持配置时序图,帮助用户调试和验证时序要求。

本次我们主要关注标黑的部分。

1.4 官方资料下载地址

在这里插入图片描述
下载地址
在学习使用一款IDE工具时,最全的手册一般就是官方提供的用户手册,这里我们也主要是参考这些手册来进行学习。
如果后续有一些特殊的需求,也建议先去官网的文档中找找看,是否有可以满足自己需求的文档。

2. 下载和安装STM32CubeMX

2.1 下载软件

在这里插入图片描述
可以通过在官网中直接搜索"STM32CubeMx"进行跳转找到下载界面,也可以在如下地址直接跳转

在这里插入图片描述

2.2 软件安装

在这里插入图片描述
下载完成后,双击进行安装

在这里插入图片描述
安装完成后,会生成一个如下所示的图标,点击该图标运行

在这里插入图片描述
安装完成并运行成功后,会有一个如上所示的界面被打开。

3. 使用方式

3.1 说明

按照官方提供的信息,生成代码主要分为以下几步:

  1. 选中对应型号的处理器,包括在特定开发平台上运行的示例
  2. 对微控制器进行配置,主要包含配置GPIO的工作模式,系统时钟,功耗

在这里插入图片描述
快捷按键

在这里插入图片描述

在这里插入图片描述

3.2 不同选择器介绍

在这里插入图片描述
如上图所示,该IDE主要提供了四种选择器。

MCU Selector
就是可以通过各种你设置的条件,例如Core的类型、flash大小、RAM大小等等然后生成一系列满足该条件的芯片型号。
除了用于根据自己的需求去寻找合适的芯片外,也是后续生代码时必不可少的一部分。
在这里插入图片描述

Boader Selector
根据条件筛选开发板
在这里插入图片描述
Cross Selector
交叉选择器使用户可以找到STM32产品组合中可以替代当前使用的MCU或MPU(来自意法半
导体或其他芯片供应商)的最佳产品

Example Selector
生成各种代码范例
在这里插入图片描述

3.3 构建新的项目

3.1 选择单片机的型号

使用MCU Selector 选中所需要的单片机型号
在这里插入图片描述

在这里插入图片描述
输入自己单片机的型号,然后双击选中后会跳转到如上图所示的配置界面。

3.2 引脚配置

引脚配置的方式主要有两种,分别是直接单机引脚进行配置,另外一种则是通过配置I2C和SPI等外设进行间隔配置。

直接点击引脚进行配置
在这里插入图片描述
点击要配置的引脚,然后会出现当前引脚可以配置的状态。这种主要适合配置IO口的输入输出模式。
在这里插入图片描述
这里我们选中一个PA13作为LED的控制引脚,设置为上拉模式

通过外设进行简介配置
在这里插入图片描述
可以选择要开启的功能,然后会自动反应到引脚图上。
例如这里我们选中的是ADC1, 然后IN1 差分输入,那么PC0和PC1就分别被自动配置为了ADC1_IN1和ADC1_IN2。

在这里插入图片描述
其余的还有SPI和I2C、UART配置等

3.3 选择FreeRTOS

在这里插入图片描述
还是在Pinou下我们切换到System view视图可以看到,Middleware是空的。这里按照实际想法应该是要放置我们的FreeRTOS的

在这里插入图片描述
注意该视角下的配置状态说明
在这里插入图片描述
选中Free RTOS
在这里插入图片描述
在Free RTOS的配置栏里,我们可以配置rtos的互斥锁、事件、堆的大小、task和队列、以及信号和定时器等等

创建个FreeRTOS 下的task任务
在这里插入图片描述
在FreeRTOS中创建一个任务,然后在生成的代码中,实现一个定时控制LED的函数即可。

3.4 生成代码

在这里插入图片描述

4. 我的疑问

4.1 怎么生成keil5下使用的工程

在这里插入图片描述
1.选中MDK-ARM生成Keil5下的工程文件
2. 选中makefile生成该项目对应的make文件

4.2 工作频率怎么进行配置?都是什么含义

4.3 什么是STM32 Cube的扩展包?

4.4 STM32的时钟配置看起来很复杂?那么它有哪些时钟?都各自有什么作用

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

HSE(高速外部时钟)

产生源:
● HSE外部晶体/陶瓷谐振器
● HSE用户外部时钟

HSI时钟(高速内部时钟:)

HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。
HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。

PLL(锁相环)

在STM32微控制器中,PLL(Phase-Locked Loop,锁相环)时钟是通过对外部晶体振荡器提供的低频时钟信号进行倍频操作,从而产生高频时钟信号的一种技术。PLL的作用是通过调节其反馈路径中的除数和乘法器来生成稳定的高频时钟信号。

上述三种时钟可被用来驱动系统时钟(SYSCLK)

LSE时钟
LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供
一个低功耗且精确的时钟源。(注意这里的32768Khz是很有讲究的,对RTC的时钟准确运行起到很重要的作用)

系统时钟(SYSCLK)选择

系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它
不能被停止。

只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时
钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟
源就绪,才发生切换。

在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统
时钟。

RTC时钟

  • 如果LSE被选为RTC时钟:

    • 只要V BAT维持供电,尽管V DD供电被切断,RTC仍继续工作。
  • 如果LSI被选为自动唤醒单元(AWU)时钟:

    • 如果VDD供电被切断, RTC的时间不能被保证。

看门狗时钟
如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关
闭。在LSI振荡器稳定后,时钟供应给IWDG

时钟输出
微控制器允许输出时钟信号到外部MCO引脚。
相应的GPIO端口寄存器必须被配置为相应功能。以下8个时钟信号可被选作MCO时钟:
● SYSCLK
● HSI
● HSE
● 除2的PLL时钟
● PLL2时钟
● PLL3时钟除以2
● XT1外部3~25MHz振荡器(用于以太网)
● PLL3时钟(用于以太网)
在MCO上输出的时钟必须小于50MHz(这是I/O端口的最大速度)。

5. 总结

我目前也只是初步了解了下STM32 CubeMX的使用方式,所知还尚浅特别是上述我的疑问中还有很多都没弄清楚,这里我会边学边记录,有了新的收获和成果后也会在该文档中同步给大家。

6. 参考链接

FreeRTOS(STM32CubeMX)

STM32CubeMX实战教程

STM32CubeMX 使用手册中文版(官网下载详解)

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

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

相关文章

题目:出列(蓝桥OJ 3223)

问题描述: 解题思路: 先使用暴力找到规律再解。 暴力做法:将数据放到一个动态数组中,下标就表示当前编号,符合题意的就放到覆盖该数组中,依次循环,直到只有一个元素停。 规律:小于该…

爬虫(七)

1.批量爬取知网数据 lxml:是 Python 的一个功能强大且易用的 XML 和 HTML 处理库。它提供了简单又轻巧的 API,使得解析、构建和操作 XML 和 HTML 文档变得非常方便。lxml 库通常用于处理 XML 和 HTML 文档,例如解析网页、处理配置文件等。openpyxl:是 Python 中用于操作 Ex…

uniapp自定义导航栏左中右内容和图标,以及点击事件

uniapp自定义导航栏左中右内容和图标&#xff0c;以及点击事件 效果&#xff1a; 页面&#xff1a; <view class"navigation-bar"><view class"navigation-bar-left" click"navigateBack"><u-icon name"arrow-left"…

【嵌入式开发 Linux 常用命令系列 4.3 -- git add 时单独排除某个目录或者文件】

文章目录 git add 时单独排除某个目录或者文件使用 .gitignore 文件使用命令行排除文件或目录 git add 时单独排除某个目录或者文件 在使用 git add 命令时&#xff0c;如果你想要排除特定的目录或文件&#xff0c;可以使用 .gitignore 文件或使用路径规范来指定不想添加的文件…

新的变速箱滚动轴承和齿轮故障数据

变速箱是传动系统中非常关键的一部分&#xff0c;它由齿轮、传动轴、轴承和壳体等组成。变速箱的主要功用包括&#xff1a;&#xff08;1&#xff09;能够改变传动比&#xff0c;按实际情况调整驱动轮转矩和转速&#xff0c;进而满足复杂的行车要求&#xff1b;&#xff08;2&a…

机器学习金融应用技术指南

1 范围 本文件提供了金融业开展机器学习应用涉及的体系框架、计算资源、数据资源、机器学习引擎、机 器学习服务、安全管理、内控管理等方面的建议。 本文件适用于开展机器学习金融应用的金融机构、技术服务商、第三方安全评估机构等。 2 规范性引用文件 下列文件中的内容通过…

新型储能是什么,储能系统解决方案现状及趋势详细说明

新型储能是指新兴的能够存储电能并在需要时释放的储能技术。其中主要包括光伏储能和商业储能。 光伏储能是指通过光伏电池将太阳能转化为电能&#xff0c;并将其存储起来以供后续使用。光伏储能系统一般由太阳能电池板、储能装置和逆变器组成。光伏储能可以将白天产生的电能存…

Java练习题目3:输入一个学生的5门课成绩及对应的学分,计算该同学的加权平均分(WeightedAverageScore3)

每日小语 我们没有意识到惯用语言的结构有多大的力量。可以说&#xff0c;它通过语义反应机制奴役我们。 ——阿尔弗雷德科日布斯基 思考 输入5门课成绩&#xff0c;学分&#xff0c;加权平均分公式 [&#xff08;课程A成绩*课程A学分&#xff09;&#xff08;课程成绩B*课程…

Learn OpenGL 19 几何着色器

几何着色器 在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader)&#xff0c;几何着色器的输入是一个图元&#xff08;如点或三角形&#xff09;的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而&#xff0c;几何着色器最有趣的地方…

动态路由协议——OSPF

目录 一.OSPF来源 二.OSPF术语 1.area id——区域的划分 2.cost——路径开销值 3.route id 4.LSDB表 5.邻居表 6.OSPF路由表 三.OSPF工作过程 1.交互hello报文建立邻居关系 2.选举主从 3.交互LSDB摘要信息 4.LSR,LSU,LSACK同步LSDB表项 5.各自计算路由 四.OSPF交…

maven手动上传的第三方包 打包项目报错 Could not find xxx in central 解决办法

背景: 在Maven私服手动上传了第三方的jar包, 只有jar包, 没有pom文件, 项目在ide中可以正常编译启动,但打包报错无法找到jar包 解决办法: 上传jar包的时候, 点击生成pom. 则打包的时候不会报错

pyrealsense2获取保存点云

一、第一种实现代码 Python import sys import cv2 import pyrealsense2 as rs import numpy as np import keyboard import open3d as o3d import osif __name__ "__main__":output_folder output_data/os.makedirs(output_folder, exist_okTrue)pipeline rs.p…

三级数据库技术知识点(详解!!!)

1、从功能角度数据库应用系统可以划分为表示层、业务逻辑层、数据访问层、数据持久层四个层次&#xff0c;其中负责向表示层直接传送数据的是业务逻辑层。 【解析】表示层负责所有与用户交互的功能;业务逻辑层负责根据业务逻辑需要将表示层获取的数据进行组织后&#xff0c;传…

阅读MySQL知识4

一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作&#xff0c;主库对所有DDL和DML产生的日志写进binlog&#xff0c;由于binlog是顺序写&#xff0c;所以效率很高。 Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作…

SpringBoot如何替换启动图标

SpringBoot项目在启动时会出现一个默认的启动图案 . ____ _ __ _ _/\\ / ____ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | _ | _| | _ \/ _ | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) ) |____| .__|_| |_|_| |_\__, | / / / /|_||___//_/_/_/::…

软件架构和基于架构的软件开发方法知识总结

一、软件架构定义 软件架构为软件系统提供了一个结构、行为和属性的高级抽象 软件架构是一种表达&#xff0c;使软件工程师能够&#xff1a; &#xff08;1&#xff09;分析设计在满足所规定的需求方面的有效性 &#xff08;2&#xff09;在设计变更相对容易的阶段&#xff0c;…

题目:异或森林(蓝桥OJ 3400)

问题描述&#xff1a; 解题思路&#xff1a; 一个数也可以看作是一段区间&#xff0c;当该区间的异或和为完全平方数时则符合题意。 我们需要注意枚举的完全平方的上限。 异或前缀和减小时间复杂度。 题解&#xff1a; #include <bits/stdc.h> using namespace std; usi…

vi\vim编辑器详解

vi\vim编辑器介绍 vi\vim是visual interface的简称, 是Linux中最经典的文本编辑器 同图形化界面中的 文本编辑器一样&#xff0c;vi是命令行下对文本文件进行编辑的绝佳选择。 vim 是 vi 的加强版本&#xff0c;兼容 vi 的所有指令&#xff0c;不仅能编辑文本&#xff0c;而…

鸿蒙一次开发,多端部署(九)应用市场首页

本小节将以应用市场首页为例&#xff0c;介绍如何使用自适应布局能力和响应式布局能力适配不同尺寸窗口。 页面设计 一个典型的应用市场首页的UX设计如下所示。 观察应用市场首页的页面设计&#xff0c;不同断点下的页面设计有较多相似的地方。 据此&#xff0c;我们可以将页…

python的BBS论坛系统flask-django-nodejs-php

为了更好地发挥本系统的技术优势&#xff0c;根据BBS论坛系统的需求&#xff0c;本文尝试以B/S架构设计模式中的django/flask框架&#xff0c;python语言为基础&#xff0c;通过必要的编码处理、BBS论坛系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法&#xff…