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

news2024/9/23 9:50:24

使用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.coloradmin.cn/o/2157236.html

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

相关文章

类和对象(2)(重点)

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 类的默认成员函数 概念概述 默认成员函数就是用户没有显式实现,编译器会自…

【CSS in Depth 2 精译_034】5.4 Grid 网格布局的显式网格与隐式网格(下)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

ACM MM24 | Hi3D: 3D生成领域再突破!新视角生成和高分辨率生成双SOTA(复旦智象等)

文章链接:https://arxiv.org/pdf/2409.07452 Github 链接:https://github.com/yanghb22-fdu/Hi3D-Official 亮点直击 本文提出了高分辨率图像到3D模型(Hi3D),这是一种基于视频扩散的新范式,将单个图像重新定…

计算机毕业设计python+spark知识图谱房价预测系统 房源推荐系统 房源数据分析 房源可视化 房源大数据大屏 大数据毕业设计 机器学习

《PythonSpark知识图谱房价预测系统》开题报告 一、研究背景与意义 随着城市化进程的加速和房地产市场的不断发展,房价成为影响人们生活质量的重要因素之一。准确预测房价不仅有助于政府制定科学的房地产政策,还能为开发商提供市场参考,同时…

NLP-transformer学习:(7)evaluate实践

NLP-transformer学习:(7)evaluate 使用方法 打好基础,为了后面学习走得更远。 本章节是单独的 NLP-transformer学习 章节,主要实践了evaluate。同时,最近将学习代码传到:https://github.com/Mex…

c++类与对象一

C类与对象(一) 面向对象初步认识 在c语言中,编程是面向过程编程,注重求解问题列出过程,然后调用函数求解问题。 在日常生活中。我们经常会遇到面向过程的问题 手洗衣服就是面向过程 而C是基于面向对象的。关注的是对象,把事情…

SpringSecurity -- 入门使用

文章目录 什么是 SpringSesurity ?细节使用方法 什么是 SpringSesurity ? 在我们的开发中,安全还是有些必要的 用 拦截器 和 过滤器 写代码还是比较麻烦。 SpringSecurity 是 SpringBoot 的底层安全默认选型。一般我们需要认证和授权&#xf…

【Finetune】(三)、transformers之P-Tuning微调

文章目录 0、P-Tuning基本原理1、代码实战1.1、导包1.2、加载数据集1.3、数据集预处理1.4、创建模型1.5、P-tuning*1.5.1、配置文件1.5.2、创建模型 1.6、配置训练参数1.7、创建训练器1.8、模型训练1.9、模型推理 0、P-Tuning基本原理 P-Tuning的基本思想是在prompt-tuning的基…

Spring Boot管理用户数据

目录 学习目标前言Thymeleaf 模板JSON 数据步骤 1: 创建 Spring Boot 项目使用 Spring Initializr 创建项目使用 IDE 创建项目 步骤 2: 添加依赖步骤 3: 创建 Controller步骤 4: 新建index页面步骤 5: 运行应用程序 表单提交步骤 1: 添加 Thymeleaf 依赖在 Maven 中添加依赖 步…

Vue3.3新特性defineModel

defineModel的使用: defineModel选项可以帮我们省去很多麻烦 不仅需要上述操作,还需要进行一定的配置: 在vite.config.js中进行配置 defineModel是一个宏,所以不需要从vue中import导入,直接使用就可以了。这个宏可以用来声明一个…

Java之线程篇六

目录 CAS CAS伪代码 CAS的应用 实现原子类 实现自旋锁 CAS的ABA问题 ABA问题导致BUG的例子 相关面试题 synchronized原理 synchronized特性 加锁过程 相关面试题 Callable 相关面试题 JUC的常见类 ReentrantLock ReentrantLock 和 synchronized 的区别: 原…

Android 新增目录怎么加入git

工作中会遇到android系统源码系统增加第三方功能支持,需要增加目录,那么这个目录怎么提交到服务器上去呢?接下来我们就看下这个问题的解决 一服务器创建仓库 一个新的目录增加到仓库中,需要仓库有对应的仓库地址,这个让…

小记编程语言浮点精度问题

注意: 本文内容于 2024-09-15 20:21:12 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:小记编程语言浮点精度问题。感谢您的关注与支持! 浮点数在计算机中不能精确表示所有…

docker启动mysql未读取my.cnf配置文件问题

描述 在做mysql主从复制配置两台mysql时,从节点的my.cnf配置为: [mysqld] datadir /usr/local/mysql/slave1/data character-set-server utf8 lower-case-table-names 1 # 主从复制-从机配置# 从服务器唯一 ID server-id 2 # 启用中继日志 relay-l…

【小沐学CAD】3ds Max常见操作汇总

文章目录 1、简介2、二次开发2.1 C 和 3ds Max C SDK2.2 NET 和 3ds Max .NET API2.3 3ds Max 中的 Python 脚本2.4 3ds Max 中的 MAXScript 脚本 3、快捷键3.1 3Dmax键快捷键命令——按字母排序3.2 3dmax快捷键命令——数字键3.3 3dmax功能键快捷键命令3.4 3Dmax常用快捷键——…

对网页聊天项目进行性能测试, 使用JMeter对于基于WebSocket开发的webChat项目的聊天功能进行测试

登录功能 包括接口的设置和csv文件配置 ​​​​​​ 这里csv文件就是使用xlsx保存数据, 然后在浏览器找个网址转成csv文件 注册功能 这里因为需要每次注册的账号不能相同, 所以用了时间函数来当用户名, 保证尽可能的给正确的注册数据, 时间函数使用方法如下 这里输入分钟, 秒…

肝内胆管癌中三级淋巴结构分布与临床预后的相关性研究|文献精析·24-09-22

小罗碎碎念 这篇文章是关于肝内胆管癌(intrahepatic cholangiocarcinoma, iCCA)中三级淋巴结构(tertiary lymphoid structures, TLSs)的分布、密度及其对临床结果的预测价值的研究。 作者类型作者姓名单位名称(中文&a…

数据结构——串的模式匹配算法(BF算法和KMP算法)

算法目的: 确定主串中所含子串(模式串)第一次出现的位置(定位) 算法应用: 搜索引擎、拼写检查、语言翻译、数据压缩 算法种类: BF算法(Brute-Force,又称古典的…

【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解

【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解 题目传送门 题解 CSP-S1 补全程序,致敬全 A 的答案,和神奇的预言家。 写一下这篇的题解说不定能加 CSP 2024 的 RP 首先看到 k k k 这么大的一个常数,就想到了二分。然后写一个判…

《深入理解JAVA虚拟机(第2版)》- 第13章 - 学习笔记【终章】

第13章 线程安全与锁优化 13.1 概述 面向过程的编程思想 将数据和过程独立分开,数据是问题空间中的客体,程序代码是用来处理数据的,这种站在计算机角度来抽象和解决问题的思维方式,称为面向对象的编程思想。 面向对象的编程思想…