当前位置: 首页 > article >正文

(学习记录)使用 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.kler.cn/news/314798.html

相关文章:

  • 基于Windows系统以tomcat为案例,讲解如何新增自启动服务,定时重启服务。
  • mybatis 和 mybatis-plus
  • mysql批量修改表前缀
  • 【java实现json转化为CSV文件】
  • 【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现
  • Kotlin 极简小抄 P3(函数、函数赋值给变量)
  • LeetCode 第416场周赛个人题解
  • springbootweb集成swagger
  • 王道考研视频——操作系统笔记
  • 海外服务器哪个速度最快且性能稳定
  • GRE隧道在实际部署中的优化、局限性与弊端
  • 排序篇(七大基于比较的排序算法)
  • 华为全联接大会HC2024 观会感
  • QMT获取可转债行情数据方法介绍!支持QMT量化软件的券商平台?
  • Oracle(140)如何创建和管理数据库角色?
  • Android14 蓝牙启动流程
  • C++编程语言:基础设施:命名空间(Bjarne Stroustrup)
  • 基于微信小程序的购物系统+php(lw+演示+源码+运行)
  • App端测——稳定性测试
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(1)API概述与文件I/O
  • 互联网技术的持续演进:从现在到未来
  • 开放的数据时代:Web3和个人隐私的未来
  • 自动化流程机器人(RPA)
  • 计算机图形学 中心画圆算法 原理及matlab代码实现
  • 『功能项目』QFrameWorkBug拖拽功能【66】
  • SpringBootWeb增删改查入门案例
  • C语言实现常见的数据结构
  • 计算机毕业设计 数字化农家乐管理平台的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 发票OFD格式转换成PDF
  • Java 使用递归方法遍历B站下载文件并解析重命名