[开发工具] STM32初学之时钟配置及项目生成(STM32CubeMX)

[复制链接]
2065|0
 楼主| tpgf 发表于 2024-11-29 08:10 | 显示全部楼层 |阅读模式
前言
代码生成软件:STM32CubeMX

开发板:robomaster C型开发板(STM32F407IGH6)

一、时钟配置
1 芯片选择
打开STM32CubeMX,选择自己的芯片版本,这里以STM32F407IGH6为例。

4022067482a954d004.png

2 SYS配置
在SYS中配置使用SWD调试,在Debug选择Serial Wire。

6072567482a90d553f.png

3 RCC配置
在RCC中设置HSE为Crystal/Ceramic Resonator,使用高速外部时钟。

9990167482a8ccb688.png

4 时钟树配置
时钟树整体配置如下图,下边详细介绍个部分的含义。

8574267482a85e55c5.png

上图中1、2、3、4分别表示低速外部时钟、低速内部时钟、高速内部时钟、高速外部时钟。

HSE(High-Speed External Clock,高速外部时钟)

由外部晶振或振荡器提供的高速时钟信号,通常频率在4MHz到26MHz之间。
通过外部引脚(HSE晶振引脚)输入,常用作系统时钟的源。
HSE(High-Speed External Clock,高速外部时钟)

由外部晶振或振荡器提供的高速时钟信号,通常频率在4MHz到26MHz之间。
通过外部引脚(HSE晶振引脚)输入,常用作系统时钟的源。
HSI(High-Speed Internal Clock,高速内部时钟)

STM32内部提供的一个固定频率的高速时钟,频率通常为16MHz。
精度较低,一般用于不需要高精度的场景,如调试或简单任务。
LSE(Low-Speed External Clock,低速外部时钟)

用于低功耗和实时操作的外部低速晶振,通常为32.768kHz。
主要用于RTC(实时时钟)模块。
LSI(Low-Speed Internal Clock,低速内部时钟)

固定频率(典型值为32kHz)的内部低速时钟。
低功耗应用中可用于唤醒或者RTC。
上图中5、6、7、8分别表示PLL_M、PLL_N、PLL_P、PLL_Q。

PLL(Phase-Locked Loop,相位锁定环路)

用于生成更高频率的系统时钟,通过输入一个基础时钟(HSE或HSI),经过倍频和分频输出。
PLL Source: PLL的输入源,可以选择HSE或HSI。
PLL_M: 输入时钟的分频系数(1到63)。
PLL_N: 倍频系数(50到432)。
PLL_P: 主系统时钟分频系数(2、4、6或8),生成系统时钟(SYSCLK)。
PLL_Q: 用于生成USB、SDIO和随机数发生器时钟。
计算公式:
FPLLCLK=(Finput×PLLN)/(PLLM×PLLP)​​​​

10为系统时钟

System Clock (SYSCLK) 系统时钟

MCU的主时钟,驱动整个芯片的核心(Cortex-M4)以及大部分外设。
SYSCLK可以由HSE、HSI或PLL输出选择。
11为用于生成USB、SDIO、随机数发生器的时钟

USB模块需要一个精确的48MHz时钟。
SDIO接口(用于SD卡通信)和随机数发生器(RNG)也依赖这一路时钟。
确保分频后的结果为48MHz,否则USB、SDIO或RNG可能无法正常工作。
也可在指定的时钟位置输入时钟频率,按下回车或者点击上方的“Resolve Clock Issues”选项,是系统自动配置相关参数。

最常用的时钟是APB时钟

STM32有两个APB时钟域:APB1(低速外设)和APB2(高速外设)。
AHB时钟通过APB预分频器(APB Prescaler)生成APB1和APB2时钟。
APB1最大频率:42MHz
APB2最大频率:84MHz
影响外设如UART、SPI、I2C、TIM等。
下图为外设在时钟总线上的挂载图。在使用相关外设时,通过此图配置相应的时钟频率。该图在MCU的数据手册中可以找到。数据手册官网可查。

1214367482a789d0f9.png

配置时需注意的事项
时钟频率限制:

Cortex-M4最大时钟频率为168MHz。
注意AHB和APB频率不能超过芯片规格的限制。
时钟源优先级:

HSE通常优先于HSI。
如果使用PLL,确保PLL输入频率和输出频率在规定范围内。
备份时钟:

如果主时钟失效(如HSE晶振故障),系统可以自动切换到备用时钟(HSI)。
二、项目生成
选择Project Manager选项卡,在Project中为项目命名,然后选择项目文件夹放置的位置。之后注意选择合适的IDE。本人使用的是CLion开发环境,选择STM32CubeIDE,如果使用的是Keil开发环境选择MDK-ARM IDE。

4901067482a711e822.png

然后在Code Generator中勾选Generate peripheral initialization as a pair of '.c/.h' files per peripheral,生成单独的.c/.h文件。然后点击GENERATE CODE。

1801667482a6c6cdbb.png

出现下图所示对话框,说明项目生成完成

6266167482a66c4413.png

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_60217329/article/details/144063503

1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
19.png
20.png
21.png
22.png
23.png
24.png
25.png
26.png
27.png
28.png
29.png
30.png
31.png
32.png
33.png
34.png
1.JPG
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2384

主题

17637

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部