打印
[开发工具]

STM32初学之时钟配置及项目生成(STM32CubeMX)

[复制链接]
28|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-11-29 08:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
代码生成软件:STM32CubeMX

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

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



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



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



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



上图中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的数据手册中可以找到。数据手册官网可查。



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

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

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

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



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



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



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

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

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

25.png (44 KB )

25.png

19.png (54.47 KB )

19.png

23.png (87.53 KB )

23.png

7.png (50.41 KB )

7.png

3.png (117.2 KB )

3.png

2.png (238.2 KB )

2.png

6.png (72.51 KB )

6.png

17.png (138.08 KB )

17.png

16.png (20.11 KB )

16.png

31.png (20.55 KB )

31.png

29.png (18.13 KB )

29.png

21.png (7.02 KB )

21.png

22.png (38.08 KB )

22.png

1.png (251.15 KB )

1.png

5.png (286.87 KB )

5.png

12.png (13.12 KB )

12.png

4.png (88.75 KB )

4.png

24.png (45.57 KB )

24.png

33.png (20.4 KB )

33.png

34.png (49.28 KB )

34.png

10.png (68.56 KB )

10.png

18.png (36.21 KB )

18.png

14.png (20.07 KB )

14.png

9.png (42.14 KB )

9.png

8.png (34.98 KB )

8.png

28.png (20.55 KB )

28.png

26.png (7.15 KB )

26.png

27.png (40.94 KB )

27.png

30.png (15.26 KB )

30.png

32.png (18.67 KB )

32.png

11.png (37.8 KB )

11.png

13.png (98.96 KB )

13.png

15.png (136.63 KB )

15.png

1.JPG (31.3 KB )

1.JPG

20.png (64.65 KB )

20.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1955

主题

15685

帖子

12

粉丝