(学习记录)使用 STM32CubeMX——配置时钟(入门)

使用STM32CubeMX配置STM32F103C8T6时钟部分

选择芯片

①:选择MCU型号

①:这里使用英文输入法,输入你想要的芯片型号,我这里采用STM32F103C8T6

②:这里能看到搜索后出来的芯片具体型号,选择匹配度最高的一个,双击确认

选择RCC模式和配置

注:如果这里不采用外部高速晶振模式,后续时钟速度配置只能选择内部低速时钟

图中的其他选项默认即可,一般情况下默认是最好的

系统调试配置

①:在“输出与配置”选项中,可以配置芯片的功能

②:在SYS系统配置中可以选择系统调试模式和时基源选择
③:可以选择这些模式

  • Serial Wire:这是一种使用单根数据线的调试接口,通常用于简单的调试和编程。
  • No Debug:当你不需要调试功能时,可以选择这个选项以节省引脚和资源。
  • Serial Wire JTAG (4 pins) 和 JTAG (5 pins):这两种是JTAG调试接口的不同引脚数版本。JTAG提供了一种强大的调试和测试功能,包括断点、单步执行等。
  • Trace Asynchronous Sw:这是一种异步跟踪调试模式,可能用于捕获芯片运行时的特定事件或状态。

④:时基源选择:可以让每个定时器作为时钟源,也可以使用系统滴答,SysTick

  • 外部时钟源:通常更精确和稳定,但需要额外的硬件连接。
  • 内部时钟源:方便且不需要外部元件,但可能受到芯片内部温度、电压等因素的影响。
  • 系统滴答(SysTick):这是一个与处理器核心紧密集成的定时器,通常用于操作系统的时间片调度和延时功能。使用SysTick可以简化软件架构,但可能不如外部或内部时钟源灵活。

选择时基源时,需要考虑定时器的精度、稳定性以及项目的具体需求。

⑤:可以看到系统帮我自动选择的Debug引脚

时钟配置

.在STM32CubeMX中,时钟配置部分是用于设置和微调微控制器(MCU)内部各个外设及总线的时钟频率的关键区域。正确的时钟配置对于确保MCU及其外设的正常运行至关重要。

②. 外部高速时钟(HSE)配置

  • 此处可以选择外部高速时钟的晶振频率,常见值为8MHz。这个设置应与实际连接到MCU的外部晶振频率相匹配。

③. 锁相环(PLL)配置

  • PLL用于将输入时钟频率(如HSE)倍频到更高的频率,以提供给系统时钟(SYSCLK)。
  • 倍频系数(PLLMUL)的选择取决于输入频率和芯片的最大工作频率。例如,对于STM32F103C8T6,若输入晶振频率为8MHz,为了获得72MHz的系统时钟频率,PLLMUL应设置为9。

④. 系统时钟(SYSCLK)配置

  • 此处选择系统时钟的源,可以是HSE、HSI(内部高速时钟)、PLL等。
  • 可以设置预分频器(PREDIV)和AHB、APB1、APB2等总线的分频器来调整各个总线的时钟频率。
  • 通常,为了获得最高性能,SYSCLK会设置为最大频率(对于STM32F103C8T6为72MHz),并且默认不分频。

⑤. 时钟线频率显示

  • 时钟配置界面会显示各个时钟线(如AHB、APB1、APB2等)的实际工作频率,这些频率是根据当前时钟配置实时计算出来的。

⑥. 低速时钟(LSI/LSE)配置

  • 此部分用于配置低速时钟,可以选择使用内部低速时钟(LSI)或外部低速时钟(LSE)。
  • LSE是外部低速时钟,需要外部晶振提供,并确保正确连接。
  • LSI是内部低速时钟,由芯片内部的RC振荡器产生。

项目设置

①:进入到项目工程配置中,里面可以配置项目工程的名字,工程路径,使用的IDE,和堆栈大小

(有时使用keil5的jansson库等等需要把堆栈开大一点,可以在这里设置)等等

②:这里设置项目名字(不能包含中文)
③:这里选择项目路径(不能包含中文)

④:选择对应的开发IDE软件和版本号

⑤选择堆栈大小

工程配置与代码生成

在STM32CubeMX中,完成项目的初步配置后,接下来是进入到工程配置的代码生成部分。这一步骤至关重要,因为它将直接影响后续的开发效率和代码的可维护性。

① 进入到项目工程配置中

在完成项目的外设配置、时钟配置、引脚配置等基本设置后,点击“Project”标签或相应的菜单选项,进入项目工程配置界面。

② 选择代码生成部分

在项目工程配置界面中,找到“Code Generator”或类似的选项,这是控制代码生成行为的关键部分。

③ 代码生成选项配置

在代码生成部分,通常会有几个重要的选项供你选择,以下是这些选项及其我的理解:

  1. 将所有使用的库复制到项目文件夹中
    • 这个选项会将所有用到的库文件都复制到项目文件夹中,确保项目在任何环境下都能编译通过。但这样做会增加工程的大小,并可能降低编译速度,因此一般不常用,除非在特定情况下需要确保库的完整性。
  2. 只复制必要的库文件(常用):
    • 这个选项会智能地判断并只复制项目实际需要用到的库文件,既节省了空间,又提高了编译速度。这是大多数情况下的首选选项。
  3. 在工具链项目配置文件中添加必要的库文件作为参考
    • 这个选项不会将库文件复制到项目文件夹中,而是在工具链的项目配置文件中添加必要的库文件路径。这样做需要开发者自己确保库文件的可访问性,并且可能需要手动编写一些库代码或配置,因此不常用。

文件配置

 1.为每一个外设生成一对.c/.h文件初始化外设(常用):

  • 这个选项会为项目中配置的外设生成对应的初始化代码和头文件。这样做的好处是,每个外设的初始化代码都是独立的,便于管理和维护。同时,这也使得代码更加清晰和易于理解。因此,这个选项通常是开启的。

2.重新生成时备份以前生成的文件

  • 当你对项目进行更改并重新生成代码时,这个选项允许你备份之前生成的代码文件。通过指定一个备份文件夹,你可以保留旧版本的代码,以便在需要时进行比较或回滚。这对于版本控制和团队协作尤其有用。

3. 重新生成时保留用户代码

  • 这个选项确保在重新生成代码时,不会覆盖或删除你手动添加的用户代码。STM32CubeMX能够识别并保留由用户编写的特定代码段(通常通过特殊的注释标记),从而在重新生成代码时保持这些代码不变。这对于保护你的定制代码和避免重复工作非常重要。

4. 删除以前生成的未重新生成的文件

  • 这个选项用于清理项目中不再需要的旧代码文件。当你删除某些外设或更改配置时,相关的代码文件可能不再需要。通过启用这个选项,你可以在重新生成代码时自动删除这些未使用的文件,从而保持项目文件夹的整洁和高效。

生成代码

①:点击右上角的:GENERATE CODE 生成代码

①:打开工程文件夹

②:打开工程(使用对应的软件)

③:关闭

这里如果第一次生成的情况下,没有打开对应软件,例如keil5,我们可以选择中间的打开工程,他会自动帮我启动keil5
后续再需要生成代码,在打开了对应的软件,例如keil5,则我们可以直接点击关闭,然后转到keil5的窗口上,keil5此时会弹窗,我们点确定更新文件即可,这样就无需每次都重新开启keil5

工程文件类型

Application/MDK-ARM

  • startup_stm32f103xb.s:这是一个汇编文件,包含了STM32F103系列微控制器的启动代码。它负责初始化硬件、设置堆栈、配置中断向量表,并最终跳转到C语言的main函数。这个文件通常是由STM32CubeMX自动生成的,基于开始所选择的微控制器型号。

Application/User/Core

  • main.c:这是项目的主文件,包含了main函数,即程序的入口点。用户在这个文件中编写应用程序的主要逻辑。

  • gpio.c:这个文件通常包含与GPIO(通用输入输出)相关的初始化代码和函数。它负责配置微控制器的GPIO引脚,以便用于输入、输出或其他特殊功能。

  • 后续代码生成的.c和.h都会放在这个文件夹里

  • stm32f1xx_it.c:这个文件包含了中断服务函数(Interrupt Service Routines, ISRs)的定义。当微控制器接收到中断请求时,它会跳转到这些函数来执行相应的处理。

  • stm32f1xx_hal_msp.c:这个文件是HAL(硬件抽象层)库的一部分,负责初始化微控制器的系统时钟、配置中断优先级和使能中断等。它通常与stm32f1xx_hal.c(可能在其他位置)一起工作,为上层应用程序提供硬件访问的接口。

Drivers/STM32F1xx_HAL_Driver

  • stm32f1xx_tim.c:这个文件包含了与TIM(定时器)相关的HAL库函数。它负责配置和控制微控制器的定时器模块。

  • stm32f1xx_rcc.c:这个文件包含了与RCC(复位和时钟控制)相关的HAL库函数。它负责配置微控制器的系统时钟和外设时钟。

  • stm32f1xx_dma.c:这个文件包含了与DMA(直接内存访问)相关的HAL库函数。它负责配置和控制微控制器的DMA模块,以实现高效的数据传输。

  • 后面还有很多类似的文件,都是芯片外设驱动的源文件

Drivers/CMSIS

  • system_stm32f1xx.c:这个文件是CMSIS(Cortex Microcontroller Software Interface Standard)库的一部分,负责提供与微控制器系统相关的函数,如系统时钟配置、中断和异常处理等。它通常与system_stm32f1xx.h(可能在其他位置)一起使用,为上层应用程序提供系统级别的接口。

keil5代码可修改区域

红色框中圈出来的部分都是有用户代码提示范围,例如
 

  /* USER CODE BEGIN 1 *//* USER CODE END 1 *//* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* USER CODE BEGIN 2 *//* USER CODE END 2 */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

在注释的范围:BEGIN与END之间则是用户代码区域
在此范围内编写代码,下一次使用STM32CubeMX生成代码则不会清除此范围内的代码和文本,否则会被清除

编译

①:选择Keil5软件上面有个类似 魔术棒 的选项,点击打卡

②:在弹窗上方选择 Target 

③:在右边有一个 ARM Compiler ,选择编译器版本
如果选择的默认编译器版本后,编译过程会报错,则更换常用的V5.06 updata 7(build 960)

④:点击左上角的编译后,如果出现如图所示的0 Errors,0 Warnings 说明编译没有问题

章节结尾

至此,本章节配置时钟部分结束,再下一章学习笔记中,将会记录GPIO引脚配置

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

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

相关文章

MySQL-排名函数ROW_NUMBER(),RANK(),DENSE_RANK()函数的异同

MySQL-排名函数ROW_NUMBER(),RANK(),DENSE_RANK()函数的异同 前言 假设有如下表结构与数据,class_id表示班级,需求:现在要按照班级分组,每个班级的学生进行年龄从小到大排序 一、ROW_NUMBER()函数 ROW_NUM…

Linux中的调度算法

nice值的范围有限,即为[-20, 19],也就是40个数字,优先级为[60, 99]即一共40个优先级 目前谈论的Linux操作系统叫做分时操作系统,调度的时候主要强调公平,还有一种是实时操作系统,比如智能汽车里面必须装有这…

【面经】查找中常见的树数据结构

查找中常见的树数据结构 一、二叉排序(搜索、查找)树(BST,Binary Search Tree)(1)二叉排序树的查找、插入和删除过程(2)叉树排序树的缺陷(3)二叉排…

Spark原理及调优

spark官档 hints:https://spark.apache.org/docs/3.0.0/sql-ref-syntax-qry-select-hints.html调优参数:https://spark.apache.org/docs/latest/sql-performance-tuning.html#join-strategy-hints-for-sql-queries作者几乎把所有的RDD API查了个遍&…

【服务器入门】Linux系统基础知识

【服务器入门】Linux系统基础知识 远程登录与文件传输基础命令与文本编辑vi/vim使用shell脚本基本命令1、目录操作2、文件创建与删改3、文件连接与查看 参考 目前超算使用的系统以Linux系统为主,肯定需要了解一些相关知识。本博客就以本人运行WRF模型所需&#xff0…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

提升编程效率的秘诀:多数人竟然忽略了它!

在编程学习的过程中&#xff0c;许多人会专注于算法、数据结构、编程语言的学习&#xff0c;而往往忽略了一个至关重要的基础技能——键盘盲打。虽然看似与编程能力无关&#xff0c;但盲打不仅可以显著提高编程效率&#xff0c;还能帮助编程者更好地集中注意力。本文将深入探讨…

数字图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中&#xff0c;经常需要获取感兴趣区域的面积属性&#xff0c;下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…

加密视频播放器 EncodedPlayer V3.1使用说明

使用说明 加密视频播放器 EncodedPlayer可对视频发布者提供的特定加密视频进行播放&#xff0c;以达到保护视频内容不被未经授权的用户访问或盗版的目的。 点击【打开】可选择格式为.Apol的加密视频文件并进行播放。为防止视频翻录&#xff0c;播放器会在视频中添加当前用户…

银河麒麟操作系统重装后重新激活是否会额外消耗一个激活码?

银河麒麟操作系统重装后重新激活是否会额外消耗一个激活码&#xff1f; 1、激活码会额外消耗吗&#xff1f;2、重装后如何重新激活&#xff1f;3、注意事项4 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟操作系统时&a…

解释器模式:将语法规则与执行逻辑解耦

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了评估语言的语法或表达式的方式。该模式通过定义一个语言的文法表示&#xff0c;并通过解释这些表示来执行相应的操作。 解释器模式主要用于设计一种特定类型的计算机语言或表达式…

JVM面试问题集

什么是JVM? 了解过字节码文件的组成吗? 说一下运行时数据区 哪些区域会出现内存溢出&#xff0c;会有什么现象? JM在JDK6-8之间在内存区域上有什么不同 类的生命周期 什么是类加载器 什么是双亲委派机制 打破双亲委派机制 Tomcat的自定义类加载器

51单片机——数码管

一、数码管原理图 我们发现&#xff0c;总共有8个数码管。 它们的上面接8个LED&#xff0c;用来控制选择哪个数码管。例如要控制第三个数码管&#xff0c;就让LED6为0&#xff0c;其他为1&#xff0c;那LED又接到哪呢&#xff1f; 二、LED 由图可以看出&#xff0c;这个一个1…

Linux之实战命令04:rename应用实例(三十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

中国雕塑—孙溟㠭凿刻印《自然贼》

中国雕塑孙溟㠭凿刻作品《自然贼》 孙溟㠭凿刻印《自然贼》 遵循自然之法谓之道&#xff0c;脱离自然之道谓之贼&#xff0c;道法自然。丙申秋月溟展刊。 孙溟㠭凿刻印《自然贼》 这方《自然贼》&#xff0c;红木章料&#xff0c;半尺见方&#xff0c;自然古朴&#xff0c;浑…

浪涌抑制-功率NTC选型计算

目录&#xff1a; 一、概述 二、NTC抑制浪涌原理 三、功率NTC的介绍 四、功率NTC选型原则 1、峰值正向浪涌电流 2、阻值选取 3、正常工作的计算 一、概述 NTC热敏电阻除用于温度测量(热敏电阻温度检测-分段曲线拟合、Steinhart-Hart与查表)外&#xff0c;在电源中常用于…

轻量级流密码算法Trivium

轻量级流密码算法Trivium 0x0 Trivium算法简介 Trivium算法是由C&#xff0e;D Canniere和B&#xff0e;Preneel共同设计的一套对称加密算法&#xff0c;Trivium密码算法采用了分组密码和非线性反馈移位寄存器的设计思路。该密码算法总共288比特的内部状态&#xff0c;其中有…

力扣最热一百题——最长公共前缀

目录 题目链接&#xff1a;14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;逐步缩减前缀 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运行时间 时间复杂度和空间复杂度 解法二&#xff1a;字典…

国人卖家可折叠无线充电器发起TRO专利维权,功能相同可能侵权

案件基本情况&#xff1a;起诉时间&#xff1a;2024-8-5案件号&#xff1a;2024-cv-22971原告&#xff1a;SHANGXING TECHNOLOG (SHENZHEN) CO., LTD原告律所&#xff1a;Rubio & Associates, P.A.起诉地&#xff1a;佛罗里达州南部法院涉案商标/版权&#xff1a;原告品牌简…

Tomcat后台弱口令部署war包

1.环境搭建 cd /vulhub/tomcat/tomcat8 docker-compose up -d 一键启动容器 2.访问靶场 点击Manager App tomcat8的默认用户名和密码都是tomcat进行登录 3.制作war包 先写一个js的一句话木马 然后压缩成zip压缩包 最后修改后缀名为war 4.在网站后台上传war文件 上传war文件…