使用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.为每一个外设生成一对.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引脚配置