STM32 CubeMx教程 -- 基础知识及配置使用教程

news2025/4/27 1:46:25

文章目录

  • 前言
  • 一、STM32CubeMx 界面介绍
    • File 界面
    • Windows 界面
    • Help 界面
    • Updater Settings 界面
  • 二、STM32CubeMx 使用教程
    • 新建工程
    • 配置RCC时钟参数
    • 配置SYS参数
    • 配置时钟树
    • Project(工程设置)
    • Code Generator(代码生成器)
    • 工程创建
  • 三、结合Keil 的使用教程
  • 补充
    • STM32的三种开发模式
    • 单片机的三种烧录模式


前言

STM32CubeMX 简介

STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者,允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。

在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具链,比如MDK、IAR For ARM、TrueStudio等 省去了我们配置各种外设的时间,大大的节省了时间。

并且随着 ST停止了标准库的更新ST官方大力推荐CubeMX与HAL库的使用,虽然现在还是标准库的主场,但是CubeMX的使用率在逐年提高。

关于STM32CubeMx的安装教程,可以参考其他博主的博客,在这里不进行讲述,注意英文路径即可

本文将讲述 STM32Cube MX的界面介绍、基础设置配置、配置之后的简单使用,不同外设的使用将会在之后博客中详细介绍。


一、STM32CubeMx 界面介绍

首先先看一下STM32CubeMx 的主界面
主界面
新建工程一般选择中间的 ACCESS TO MCU SELECTOR
如果有其他需求也可以选择其他的

File 界面

FIle

Windows 界面

Windows

Help 界面

Help

Updater Settings 界面

Upadater Settings


二、STM32CubeMx 使用教程

新建工程

首先新建工程,这里选择使用第一种新建工程的方式

新建工程

如果芯片信息没有更新,会跳出更新界面,继续更新和跳过更新都行
接下来进入选择芯片界面

芯片选择
在(1)位置输入想要使用的芯片型号,在(2)位置选择详细的芯片类型,最后在(3)位置开始建立一个工程

创建完成之后进入下一个界面

配置界面
在这个界面中有三个部分
(1)是MCU的外设选择界面,在这里选择使用的MCU外设资源
有两种排序方式: Categories 种类选择A-Z 顺序选择
(2)是详细的外设配置界面,关于每个外设的详细参数都在这里配置
(3)是芯片设置预览界面,预览每个引脚在什么位置和配置了什么功能

另外 配置引脚相应的功能可以在(1)外设选择界面,也可以在(3)预览界面直接点击相应的引脚进行配置

例如想配置PC13引脚输出高电平,可以直接在(3)界面点击PC13引脚
配置引脚

由上图可知,PC13引脚可以配置为RTC时钟模式、输入模式、输出模式、以及中断模式等等,详细功能会在之后博客中介绍。

VDD

另外在配置界面,出现淡黄色表示为不可配置引脚,电源专用引脚以淡黄色突出显示。其引脚不可进行其他用途配置。

配置

这种颜色表示配置了一个I/O口的功能,但是没有初始化相对应的外设功能 ,引脚处于no mode 状态,也就是引脚进行了资源分配,但是在详细配置界面没有初始化操作。

配置
如果配置完成之后显示绿色,则表示配置成功。

接下来介绍一些工程中通用的配置操作:

配置RCC时钟参数

RCC配置
将外部高速时钟(HSE)配置为Crystal/Ceramic Resonator(晶体/陶瓷谐振器),也就是使用外部晶振作为时钟源,外部低速时钟(LSE)用不到,可以不配置。
如果不配置RCC时钟,则是默认使用内部高速时钟(HSI),这也将影响之后时钟树的配置。
推荐将RCC时钟配置外部晶振

配置SYS参数

SYS

SYS参数

Debug
默认是关闭的,如果不使用调试器关闭即可,即No Debug;
在STM32CubeMX的SYS选项栏中有SW和JTAG协议选项,用户可以根据需要选择相应的协议;

JTAG调试接口(JTAG-DP)需要5个引脚;CubeMX中可选择5pin或4pin的JTAG,5pin比4pin多了一个复位引脚。
SW调试接口(SW-DP)需要2个引脚。二者之间有复用引脚。SW调试端口采用同步串行协议:SWCLK引脚为从主机到从机的时钟信号;SWDIO为双向数据信号。

ST-Link采用的是SW调试接口,选择Serial Wire ;
J-Link采用的是JTAG调试接口,根据实际要求选择 JTAG(4pin) 或者 JTAG(5pin) ;
如果使用J-Link 但是采用SWD协议,也可以选择Trace Asynchronous Sw ;
Trace Asynchronous Sw 模式有时候也可以解决使用ST-Link 烧录之后无法烧录和调试的情况

为了避免一次烧录之后无法下一次烧录或者调试的情况, 推荐选择Serial Wire

如果在STM32CubeMX中选择SW协议MDK 也必须 选择SW协议。JTAG协议配置也同理。否则会造成下载和调试失败。在实际项目中SW协议使用使用的比较多,速度更快,占用的引脚更少,推荐配置成SW协议,即Serial Wire模式;

System Wake-Up
设置低功耗模式下的自动唤醒功能,通过引脚PA0。

Timebase Source
一般指HAL的时基,即HAL库中的uwTick,用于实现HAL_Delay()以及作为各种timeout时钟的基准。一般情况下直接选择默认的Sys Tick(嘀嗒定时器)来维护SYS Timebase Source即可,即直接放在SysTick_Handler()中断服务函数中,也就是下面的HAL_IncTick()函数。

配置时钟树

时钟树

如果在前面RCC时钟配置中,选择使用外部晶振,在这里选择使用外部高速时钟模式(HSE);如果没有配置RCC时钟,则使用默认的内部高速时钟(HSI);
然后配置PLL锁相环,之后倍频更改系统主时钟;
推荐使用最大时钟频率这里是72M
如果不清楚RCC时钟树,可以参考我之前写的一篇博客,STM32基础知识(三)-- 系统时钟RCC详解

快速配置最大时钟频率可以直接修改(3)系统时钟直接改成72M然后回车就行

Project(工程设置)

工程设置
注意:项目路径和项目名称最好使用英文,否则后期可能会存在一些奇奇怪怪的错误

Code Generator(代码生成器)

code generator
Copy all used libraries into the project folder
将HAL库的所有.C和.H都复制到所建工程中
优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便
缺点: 体积大,编译时间相比于其他选项非常长

Copy only the necessary library files
只复制所需要的.C和.H
优点:体积相对小,编译时间短,并且工程可复制拷贝
缺点: 新增外设时需要重新用STM32CubeMX导入

Add necessary library files as reference in the toolchain project configuration file
不复制文件,直接从软件包存放位置导入.C和.H
优点:体积小,比较节约硬盘空间
缺点: 复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径

根据自己需求选择就行,一般来说第一个和第二个都行;

工程创建

生成工程

code generation

三、结合Keil 的使用教程

首先在上一个界面,打开文件夹和打开工程都可以;
打开工程文件以后,首先点击魔术棒进行设置;
设置
debug
在魔术棒设置界面,进入(1)Debug界面,在(2)位置选择自己使用的下载器,然后进入(3)Settings界面;

setting界面
在Settings界面 ,根据之前在STM32CubeMx里面SYS设置的,进行选择这里使用的SW还是JTAG协议;
注意STM32CubeMx 和 MKD 里面协议要一致,否则无法进行调试

代码书写
code

代码要写在 /* XX CODE BEGIN*/ 和 /* XX CODE END*/ 之间,否则下次再STM32CubeMx里面加东西,再生成工程的时候,就会把不在这个区域里面的代码删掉。


补充

STM32的三种开发模式

1、STM32能基于寄存器开发,直接对寄存器进行编程。基于寄存器编写的代码简练、执行效率高。但由于 STM32 微控制器的片上外设和寄存器数量太多,这种编程方式移植性差,寄存器编程比较复杂。

2、基于ST官方的固件库进行开发。现在大部分STM32教程教的都是这种库函数开发,如正点原子,野火等。他相比寄存器开发更加简单,不需要记住每个寄存器的地址和名称,只要会调用ST官方封装好的库函数进行编程就可以了。

3、基于STM32CubeMx进行开发,使用的是ST官方新推出的HAL库,可以通过软件内设计好的图形化界面进行配置,软件自动生成生成配置代码,然后我们再在IDE上面代码编写。

单片机的三种烧录模式

ICP:使用SWD接口进行烧录,如J-Link烧录器和J-Flash软件配合使用。
ISP:使用引导程序(Bootload)加上外围UART/USB等接口进行烧录。
IAP:软件自身实现在线电擦除和编程的方法,不使用任何工具。程序通常分成两块,分别为引导程序和应用程序。

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

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

相关文章

Day46:项目-购物车案例

购物车案例 准备工作 首页默认加载,其余页面懒加载 调用defineStore方法构建store 入口main做对应配置,找指南,快速开始,把elementplus引入进来 import { createApp } from "vue"; import { createPinia } from &qu…

基于香橙派和SU-03T 使用Linux实现语音控制刷抖音

硬件介绍 SU-03T之前在小车的时候使用过,详见:语音小车---6 最终整合_mjmmm的博客-CSDN博客 按照下图进行接线: 项目需求 通过语音指令来控制安卓手机刷抖音,可以实现视频切换和点赞等功能: 1. 开机播报“你好&a…

产品经理-战略-战略的含义和层级

引言 22年老板在听我做部门人员数量汇报时,当场就给我们部门员工做能力标签,过了几天就输出了一个公司所有技术岗位的能力标签。其中有一项是战略思维,该项满分是5分,我们部门同事绝大部分人都只有2分,我自己也就3…

数据结构-leetcode-环形链表Ⅱ

有了上一篇的基础,做这一篇会相对容易些,没看上一篇的一定要去看看再来。 先看题: 解题图解: 1.首先要使快慢指针相遇 2. 代码如下: struct ListNode *detectCycle(struct ListNode *head) {struct ListNode * fasthe…

IF,AND,OR 或嵌套 IF 在 Excel 中不是逻辑函数

事情并非总是我们希望的那样。 意外的事情可能发生。 例如,假设您必须将数字相除。 尝试将任何数字除以零(0)都会产生错误。 在这种情况下,逻辑功能很方便。 在本教程中,我们将涵盖以下主题。 在本教程中,…

企业架构LNMP学习笔记53

PHP扩展安装: server01和server03上安装redis扩展: 解压编译安装: shell > tar xvf redis-4.3.0.tgz shell > cd redis-4.3.0 shell > phpize shell > ./configure && make && make install 配置文件php.ini&…

JVM——3.StringTable字符串常量池

这篇文章我们来讲一下StringTable字符串常量池 目录 1.引例 2.StringTable的特性 3.StringTable的位置 4.StringTable的垃圾回收、 5.StringTable性能调优 6.总结 1.引例 首先,我们来看下面的这段程序,请思考最终的输出结果。 输出结果&#xff…

网络安全(黑客)自学​

前言 作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。 计算机各领域的知识水平决定你渗透水平的上限。 【1】比如:你编程水平高,那你在代码审计的时候就会比别人强,写出的漏洞…

北大C++课后记录:文件读写的I/O流

前言 文件和平常用到的cin、cout流其实是一回事,可以将文件看作一个有限字符构成的顺序字符流,基于此,也可以像cin、cout读键盘数据那样对文件进行读写。 读写指针 输入流的read指针 输出流的write指针 注:这里的指针并不是普…

Type-C座子ESD整改案例分析?|深圳比创达EMC

Type-C座子ESD整改案例分析?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! 近年来,Type-C座子是一个应用非常广泛的一款通讯端口,具有正反可插、更快的充电和数据传输、音频转换、接口转换…

摩托车题目 记录

1 《道路安全法实施条例》第五十五条第三例:摩托车后座不得乘坐未满12周岁的未成年人,轻便摩托车不得载人。 所以本题选择【错误】。 《道路交通安全法实施条例》第六十二条:驾驶机动车不得有下列行为:(六)驾驶摩托车手离车把或者在车把上悬挂物品。所以&#xff0…

LeetCode2.两数相加

一看完题,我的想法是先算出这两个链表表示的数,然后相加,然后把这个数一位一位的分配给第三个数组,这种方法应该很简单但是要遍历三次数组,于是我就想直接一遍遍历,两个链表同时往后面遍历,把这…

【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习

前言【Unity 实用工具篇】✨ | 编辑器扩展插件 Odin Inspector,快速上手学习一、Odin Inspector插件1.1 介绍1.2 相关网站链接1.3 效果展示二、导入插件三、基础功能介绍四、快速上手4.1 Attributes 相关4.1.1 使用Attribute更好的显示数据。Title、BoxGroup、FoldoutGroup4.1…

ruoyi权限设置的坑

如果是手动在页面加了菜单,其实会生成一条数据,也就是2001这条已经有了。 所以生成的SQL就会有重的,这一点要注意。 可以不手动创建菜单,直接使用SQL,或者就改SQL了。 手动页面创建的菜单,一个定要注意&…

Haproxy搭建 Web 群集实现负载均衡

目录 1 Haproxy 1.1 HAProxy的主要特性 1.2 HAProxy负载均衡策略 1.3 LVS、Nginx、HAproxy的区别 2 Haproxy搭建 Web 群集 2.1 haproxy 服务器部署 2.1.1 关闭防火墙 2.1.2 内核配置(实验环境可有可无) ​2.1.3 安装 Haproxy 2.1.4 Haproxy服务…

数额结构(6.1~6.8)

6-1链表的插入算法 题目: 代码 int InsertPost_link(LinkList llist,DataType x,DataType y) {LinkList mllist->next;LinkList n;while(m->data!x){mm->next;4if(mNULL){printf("not exist data %d\n",x);return 0;}}n(LinkList)malloc(si…

Navicat工具连接Oracle数据库

文章目录 准备工具NavicatNavicat的Oracle插件Oracle查看系统版本找到对应的工具版本下载 oci下载 sqlplus 步骤1.打开navicat,工具>选项>环境2.配置3.点击确定,并重启navicat4.创建oracle连接 准备工具 工欲善其事,必先利其器&#x…

《Python趣味工具》——自制emoji2(2)

今天,我们将会完成以下2个内容: 绘制静态emoji总结turtle中常用的绘图函数 文章目录 一、绘制静态emoji::sparkles: 画脸::sparkles:绘制嘴巴::sparkles:绘制眼白:绘制眼白-Part1:绘制眼白—pa…

算法之排序

文章目录 前言一、二分查找1、正常二分2、二分找第一个出现要查找的数的位置3、在旋转数组中找最小数字二分总结 一、归并排序1、正常归并2、小和问题归并总结 前言 之前我们学习了各种排序算法,今天来让我们看看在线OJ上的题目吧,有哪些排序算法有什么…

数据结构之美:如何优化内存和性能

文章目录 什么是数据结构?内存优化使用紧凑的数据类型避免冗余存储使用位运算压缩数据 性能优化使用适当的数据结构减少不必要的复制使用合适的算法 数据结构优化的案例分析结论 🎉欢迎来到数据结构学习专栏~探索数据结构之美:如何优化内存和…