摘要:下面用“大白话”给你把 STM32G474 的“家产”和“时钟怎么分”讲明白,照着做就能在 CubeMX 里一次配成,不踩坑。
----
一、先看“家产”——G474 到底有啥
1. CPU:170 MHz Cortex-M4,带 FPU 和 DSP 指令,算力管够。
2. 时钟源:
• 内部 16 MHz HSI(随时能用,精度±1%)。
• 外部 4-48 MHz HSE(要接晶振,精度高)。
• 内部 48 MHz HSI48(给 USB 专用)。
• PLL 可把上面任一源倍频到 170 MHz。
3. 定时器:
• 1 个 HRTIM(480 MHz,10 路 184 ps 分辨率 PWM,做电源/电机神器)。
• 7 个通用 TIM(16/32 位)。
• 1 个低功耗 LPTIM。
4. ADC:5 路 12-bit,最高 4 MSPS,可 5 路并行采样。
5. DAC:2 个 12-bit,每路 1 MSPS,可出 4 路同步(双通道+双 DMA)。
6. 通信:3×I²C、4×SPI/I²S、4×USART、2×CAN-FD、1×USB FS。
7. 数学加速:Cordic(三角函数)、滤波器加速器(FMAC)。
----
二、时钟树“分蛋糕”——CubeMX 里 3 步搞定
目标:CPU 跑满 170 MHz,外设各拿各的口粮,不超标。
Step1 选“厨房”——时钟源
• 板子没晶振:CubeMX “High Speed Clock” 选 HSI。
• 有 8 M 晶振:选 HSE,后面 PLL 倍频更准。
Step2 调 PLL——把 16 M/8 M 变成 170 M
PLL 公式:
PLLCLK = 输入 × (N / M) / R
例:HSE 8 M,配 M=1,N=85,R=2 → 8×85/2 = 340 M,再除以 2 得 170 M。
CubeMX 里直接填:
• PLL Source:HSE
• /M:1
• ×N:85
• /R:2
点一下“Resolve”,CPU Clock 自动变 170 MHz。
Step3 给外设“分桌”——总线分频
• AHB(CPU、DMA、Flash):170 M 不分频 → 170 MHz
• APB1(TIM2-7、USART2/3、I²C1-3):≤170 M,可设 1 分频 → 170 MHz
• APB2(TIM1/8、USART1、SPI1、ADC):同样 1 分频 → 170 MHz
(ADC 内部再 /2 得 85 M,正好低于其最大 100 M)
----
三、外设时钟“个人小灶”——记得单独开火
1. HRTIM:必须勾“HRTIM1”时钟源 → 自动 170 M×2=340 M,计数 480 M 靠内部倍频。
2. ADC:CubeMX 里“ADC Clocked from”选“HSI16”或“SYSCLK”都行,只要最终≤100 M。
3. USB:48 M 必须精准 → 选 HSI48 或 PLLQ=48 M。
4. 低功耗串口 LPUART:时钟源选“LSE 32.768 k”最省电。
----
四、CubeMX 一键操作清单(30 秒版)
1. New Project → 选 STM32G474RETx。
2. Pinout 视图:
• 把要用到的外设打勾(如 HRTIM1、ADC3、USART1)。
3. Clock Configuration:
• Source 选 HSE/HSI → PLL 拉 170 M → APB1/2 全 1 分频。
• 右侧小窗口勾 USB 即自动配 48 M。
4. 每个外设页面再点“Parameter Settings”确认分频:
• ADC:CKMODE=SYSCLK/2 → 85 M。
• HRTIM:DLL 校准 480 M 已自动完成。
5. Project Manager → Generate Code。
生成后 main.c 里已有 SystemClock_Config,直接编译下载即可跑 170 M。
----
五、最容易踩的 3 个坑
1. ADC 超 100 M:忘了 APB2 分频,结果 170 M 直接爆表 → 采样出错。
2. HRTIM 没开时钟:忘记勾“HRTIM1” → 生成代码后定时器不动。
3. USB 48 M 不准:PLLQ 随便填 46 M → PC 端识别设备失败。
----
一句话总结
G474 的时钟就像“170 M 大厨房”,CubeMX 里先选源→PLL 倍到 170→分频给外设,记得把“HRTIM/ADC/USB”这些小灶单独开火,生成代码就能直接开炒,再也不用手算寄存器。祝配置一次成功!
在 STM32G474 里,APB1 和 APB2 都能跑到 170 MHz,一样快——没有“谁更快”的说法。
芯片手册给的最大限制是:
• APB1 ≤ 170 MHz
• APB2 ≤ 170 MHz
所以 CubeMX 里你把两路分频都设成 1 分频,它们就肩并肩 170 MHz 跑;
只是外设座位不同:
座位 常见外设
APB1 TIM2~7、USART2/3、I²C1-3、CAN-FD、DAC
APB2 TIM1/8/20、USART1、SPI1、ADC、HRTIM
结论:速度一样,选座位看外设,别踩“超 170 M”红线即可。
把芯片想成一家公司,资源分三级,你这句话基本把“权力金字塔”说对了,再补一刀就能记死:
1. COU(Cortex-M4 核心) + DDR(SRAM) + Flash
→ 老板 + 财务室 + 档案库,离得最近,谁都绕不开。
2. AHB → APB2(“1”字号头牌)
→ 各部门总监办公室,TIM1、USART1、SPI1、ADC1、HRTIM1 这些“最能赚钱的团队”直接汇报,速度 170 MHz 满格。
3. APB1(“2/3/4”号小弟)
→ 普通工位,TIM2-7、USART2/3、I²C1-3,够用但带宽/功能降一档。
一句话顺口溜:
“老板核心圈,总监住 APB2,小弟坐 APB1。”
配置时钟时先喂饱核心圈,再管总监,最后分小弟,顺序就不会乱。
来源:王者农药精彩击杀