新闻详情

新闻详情

首页 / 资讯中心 / 详情

STM32F051C8T6 PWM配置实战:频率计算、互补输出与死区保护

发布时间:2026/8/29 13:08:29
STM32F051C8T6 PWM配置实战:频率计算、互补输出与死区保护
1. 为什么用F051C8T6做PWM芯片资源与定位很多人第一眼看到STM32F051C8T6会觉得它是个“低配货”。Cortex-M0内核48MHz主频64KB Flash8KB SRAM跟F103比确实不起眼。但如果你主要需求就是产出一路或者几路稳定、可调、带保护功能的PWM这颗芯片反而是个很顺手的选项原因在于它的定时器外设并没有因为内核入门而缩水。F0系列继承了F1系列里相当完整的定时器体系。F051C8T6内部有TIM1这个16位高级控制定时器支持6路输出3路普通加3路互补带死区插入、刹车输入、编码器接口另外还有TIM3、TIM14、TIM15、TIM16、TIM17这些通用定时器都能独立输出PWM。也就是说用一颗几块钱的芯片做一个小型电机驱动、调光灯、蜂鸣器、风机调速项目外设完全够用不需要上F4那种高端货。这颗芯片另一个优势是引脚密度。LQFP48封装留出的IO不少内部还带两个12位DAC、一个12位ADC、两个比较器、一个运放。做电机控制时用内部比较器配合刹车输入做硬件过流保护可以在不占用CPU的情况下快速切断PWM输出这是很多入门项目里被忽略掉的能力。适合谁来参考这篇文章如果你是第一次用F0系列做PWM输出或者以前只在F103上写过PWM想弄清楚F0上到底怎么配置、有哪些坑这篇文章把从原理到应用的路走一遍。每个环节都会把背后的计算逻辑讲明白尤其是频率和占空比怎么算互补PWM和死区为什么必须设置以及如何用输入捕获去测量外部PWM信号。2. PWM原理与关键参数计算先把频率和占空比算明白2.1 定时器产生PWM的基本机制STM32的PWM输出本质上是定时器计数器和一个比较值之间的关系。定时器不断从0计数到自动重装载值ARR然后在每个计数周期内当计数值小于比较值CCR时输出一种电平当计数值达到或超过CCR时翻转成另一种电平。于是ARR决定了PWM的周期CCR决定了高电平占多长时间也就是占空比。把这种机制类比成一把尺子。ARR是尺子的总长度CCR是尺子上画的一条刻度线。每隔一段时间计数器从0走到ARR然后归零重新开始。每次走到CCR这个刻度时引脚上的电平翻转一下。这样一来一个周期内高低电平的分布就完全由CCR的位置决定。在F0系列里定时器的计数模式可以配置成向上计数、向下计数和中心对齐模式。最常用的是向上计数也就是计数器从0递增到ARR然后溢出归零。中心对齐模式则先增后减输出的PWM脉冲中心对称在电机控制中能降低谐波但对配置来说稍微复杂一点。对于LED调光、蜂鸣器、普通电机调速这些场景向上计数完全够用我也建议新手先从向上计数开始。2.2 频率和占空比的计算公式频率和占空比的计算是绕不开的核心。假设定时器输入时钟是Tclk预分频系数是PSC自动重装载值是ARR那么PWM频率的公式是PWM频率 Tclk / ((PSC 1) * (ARR 1))注意这里PSC和ARR都要加1因为寄存器的值是0开始的。如果Tclk是48MHzPSC设成47ARR设成1999那么频率就是48000000 / (48 * 2000) 500Hz。这个500Hz就是PWM的重复频率一个周期是2ms。占空比由比较值CCR决定公式是占空比 CCR / (ARR 1) * 100%如果ARR等于1999CCR设成1000那么占空比就是50%。CCR本身也是从0到ARR1的范围。当CCR等于0时理论上占空比是0%但要注意实际输出上PWM模式1且极性高有效时CCR为0意味着整个周期都是无效电平输出就是恒低电平。反过来如果CCR大于或等于ARR1输出恒为高电平这时占空比是100%。这里有个容易踩的坑很多人以为CCR等于ARR就是100%占空比其实不是。因为计数器会从0一直计数到ARR只有当计数值小于CCR时输出有效电平。如果CCR等于ARR那么在一个周期内只有最后1个计数点之后到溢出之前那一小段时间输出翻转实际占空比是ARR/(ARR1)大约99.95%不是100%。对于较真的应用比如电机全速运行你要把CCR设为ARR1才能算真正100%。2.3 如何选择PSC和ARR的值选组合的方式不唯一但要考虑分辨率。假如想要一个20kHz的电机开关频率主频48MHz48MHz除以20kHz等于2400这个2400要拆成(PSC1)和(ARR1)的乘积。方案1PSC0ARR2399。此时ARR比较大意味着一个周期内有2400个计数点占空比调节的分辨率就是1/2400也就是0.04%左右非常精细。方案2PSC239ARR9。此时ARR很小只有10个计数点占空比只能按10%的步进调节基本没法用。所以原则是尽量把PSC压小、把ARR放大这样CCR的可调范围大占空比分辨率高。但ARR也不能无限大因为ARR是16位寄存器最大值65535。如果需要极低频率比如舵机需要的50Hz48MHz除以50是960000这个值超过了65535就必须用PSC把时钟分下来。典型做法是PSC设为479ARR设为1999这样频率正好50Hz占空比分辨率也有0.05%。2.4 为什么不用延时翻转GPIO的方式做PWM接触PWM时间不长的人可能会问软件延时然后翻转GPIO不也能产生方波吗确实能但有两个致命问题。第一是CPU占用率极高。一个20kHz的PWM周期只有50微秒用延时方式CPU几乎要全程盯着电平翻转这件事根本没时间干别的。硬件PWM则完全不同定时器配置好之后输出完全由外设自动完成CPU可以去做通信、显示、菜单处理改占空比只需要写一次寄存器。第二是时序抖动。软件延时会受中断影响一旦有定时器中断、串口中断插进来电平翻转的时刻就会延迟波形周期忽长忽短。对LED调光你肉眼看不出来但对电机驱动、开关电源这类对频率稳定性有要求的场景软件PWM会让噪音变大、效率变差甚至导致控制环路不稳定。所以只要是正式项目务必用定时器硬件PWM。3. CubeMX配置PWM输出的完整流程3.1 时钟树怎么配从HSI到48MHz用CubeMX打开F051C8T6工程后第一步不是配置定时器而是先把时钟树搞定。F0系列内部默认使用HSI8MHz这个频率如果直接给定时器能产生的PWM频率上限只有8MHz对应的整数分频很多场景不够用而且HSI的内置RC振荡器在温度变化时会有约1%的漂移比晶振差不少。如果板子上有8MHz晶振我建议直接用HSE然后通过PLL倍频到48MHz。如果没有外部晶振就只能用HSI做PLL源一样可以倍频到48MHz只是频率基准精度稍差。在CubeMX的Clock Configuration页面里把系统时钟SYSCLK设置成48MHzAPB1分频器设成1这样定时器时钟就是48MHz。这地方有一个容易出错的细节F0的定时器时钟来自APB1但给定时器的时钟在APB分频不为1时会自动变成APB时钟的2倍。如果你APB1设成了2分频那APB1总线是24MHz定时器反而拿到48MHz。很多人在F1系列上习惯了APB1频率乘以2这个规则到了F0上依然成立但如果你只记住“总线频率就是定时器频率”一旦动了分频系数PWM频率就全错位了。最稳妥的办法是APB1保持1分频定时器时钟等于48MHz不用去考虑倍频的事。3.2 定时器参数设置以TIM3输出一个呼吸灯PWM为例我以TIM3_CH1为例把CubeMX里的配置步骤完整走一遍。TIM3是16位通用定时器STM32F051C8T6的TIM3_CH1可以输出到PA6这个引脚很常用不会和其他调试接口冲突。在Pinout视图中找到PA6把它配置为TIM3_CH1。点击TIM3把Channel1的模式选为PWM Generation CH1。然后翻到Parameter SettingsClock SourceInternal Clock也就是内部定时器时钟48MHz。PrescalerPSC47这样定时器计数时钟是48MHz/481MHz每个计数点1微秒。Counter ModeUp向上计数。Counter PeriodARR999这样周期是1000微秒即1msPWM频率1kHz。Auto Reload PreloadEnable打开自动重载预装载。PulseCCR初始值设500正好50%占空比。Output compare preloadEnableFast PWM Enable这个一般不用管保持Disabled就行。CH PolarityHigh高电平有效。这组参数产生的是一个1kHz、初始占空比50%的PWM波形。PSC选47的主要原因是我希望单个计数点是1微秒这样不管后面算频率还是算脉宽心算都很快调试时方便很多。3.3 HAL库代码启动PWM和动态调节占空比CubeMX生成代码后定时器和GPIO的初始化基本都自动完成了你需要动手的地方只有两个启动PWM以及运行时修改CCR。启动PWM的代码只需要一行HAL_TIM_PWM_Start(htim3, TIM_CHANNEL_1);这行代码的作用是把TIM3的CCER寄存器的对应通道使能位打开让PWM波形真正输出到PA6引脚。如果不调用这行之前所有配置都只是“准备好了但没有通电”引脚上不会有任何波形。动态调节占空比用宏或者寄存器直接写都行__HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, 200); // 占空比 200/1000 20% __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, 800); // 占空比 800/1000 80%这个宏本质上是把参数写入TIM3的CCR1寄存器。如果想要频率也跟着变需要同时改ARR__HAL_TIM_SET_AUTORELOAD(htim3, 1999); // 周期变为2ms频率500Hz改ARR时有一件事必须注意。在CubeMX里我们已经开启了Auto Reload Preload也就是ARR的预装载功能ARR的新值并不是立即生效而是等到当前计数周期结束、更新事件发生时才会生效。这样做的好处是避免在一个周期进行到一半时突然改变周期长度导致波形被截断或拉长。如果没有这个预装载保护你在任意时刻写ARR计数器会拿新旧值混着用输出的波形可能莫名其妙多出一个个毛刺。所以这个选项我默认都是打开的。3.4 用逻辑分析仪验证输出波形配置完成后不要急着接负载先用示波器或者逻辑分析仪看一眼波形。现在很多便宜的USB逻辑分析仪都能看PWM采样率几十MHz足够。我建议至少确认三件事频率对不对、占空比对不对、引脚输出电平是否正常。以刚才的配置为例1kHz的PWM周期应该是1000微秒高电平500微秒。逻辑分析仪上如果测出来频率是999.9Hz之类那是正常误差。如果差一半基本就是定时器时钟配错了检查APB分频。如果怎么改CCR占空比都不变大概率是Pulse参数没有正确写入确认用的是__HAL_TIM_SET_COMPARE而不是直接改错了寄存器。4. 高级定时器TIM1互补PWM、死区与故障保护4.1 互补PWM是什么为什么要用它普通PWM只输出一路信号但很多功率电路是半桥或者全桥结构。以H桥驱动直流电机为例对角线上的两个MOS管需要交替导通上下两个管子绝对不能同时导通否则电源直接短路。这时候就需要两路互补的PWM信号一路高另一路低中间还要留出一点稳定时间防止某一瞬间两个管子都处于半导通状态。STM32的高级定时器TIM1就专门为这种场景设计。它能从三个通道输出三路PWM并同时从互补通道输出三路反相PWM。互补通道输出的信号和主通道之间的翻转不是瞬时的而是可以插入一段死区时间也就是两边都是低电平的时间窗口。这个窗口内电流走MOS管体二极管续流正好躲过直通风险。什么叫死区你可以把它理解成十字路口的黄灯时间。绿灯变红灯之前先黄灯几秒防止两个方向的车同时冲出去。互补PWM里的死区就是上下管的“黄灯时间”虽然开关器件切换很快但都有微秒甚至纳秒级的关断延迟没有死区就可能上下管瞬间同时导通轻则效率下降重则炸管。4.2 死区时间的计算与CubeMX配置死区时间由TIM1的BDTR寄存器里的DTG位决定。DTG是8位值解释规则有点复杂分成四段。用CubeMX配置时界面会直接给出时间结果但我建议还是自己心算一遍免得被工具带偏。先算时间基准TDTS也就是TIM1的时钟周期。TIM1时钟48MHzTDTS约等于20.8纳秒。假设需要的死区时间是1微秒也就是约48个TDTS。看DTG规则当DTG的高三位为000到001之间即DTG值小于64时死区时间就是DTG乘以TDTS。48小于64所以DTG直接填48得到48 * 20.8ns约等于1微秒的死区。如果死区时间更大超过32微秒就需要用后面几段规则DTG的高三位变成10或11具体的乘数不同分别是2倍TDTS、8倍TDTS、16倍TDTS。CubeMX表单里会动态更新计算结果但你至少要知道同样的DTG数值在不同段里对应的死区时间不同不是简单线性换算。死区设多大对低速MOS管、继电器驱动死区可以留宽一点1到2微秒很常见。对高速MOS管死区可以压到100到300纳秒。死区太大会导致波形失真、电流波形不好死区太小又存在直通风险。我的一般做法是根据MOS管手册里的关断延迟时间留出至少两倍余量作为死区值。4.3 刹车功能硬件过流和故障保护热词里反复出现“PWM故障保护”这在高级定时器上对应的是刹车功能。TIM1有一个BKIN引脚可以配置成刹车输入。当刹车引脚检测到有效电平时定时器的PWM输出会被硬件强制拉到一个安全状态通常是所有输出引脚都变成无效电平无论软件当前设置成什么占空比。这个动作发生在硬件层面不经过中断、不经过CPU反应时间只有几十纳秒。实际项目中这个功能特别好用。比如做一个电机驱动电流采样电阻上的电压经过比较器和设定阈值做比较。一旦电流超限比较器翻转直接拉低BKIN引脚。这时候就算CPU正在跑中断、被别的任务卡住PWM输出依然能被强制关断达到保护MOS管的目的。CubeMX里配置刹车功能的位置在TIM1的Break and Dead-Time settings。把Break Input设置成Enable选择极性和输入源然后设置Break Polarity和Automatic Output。有一个Auto Output选项的细节如果使能了自动恢复刹车事件结束后下一次更新事件会让PWM自动恢复输出如果没使能刹车解除后输出仍然保持锁定必须软件重新写一下MOE位才能恢复。根据系统安全性要求来选自动恢复用起来方便手动恢复更安全我一般倾向于手动恢复让控制逻辑明确决定什么时候重新启动输出。4.4 占空比100%的误区半桥驱动里的特殊说明热词里有一条“半桥驱动pwm占空比100%”这里专门展开说一下。在半桥或全桥结构里真正意义上的100%占空比是有问题的。因为如果上管100%导通意味着一个桥臂的上管一直开着、下管一直关着反过来另一组互补信号如果要保持“互补”就会出现下管也要100%开的情况这就直通了。实际半桥驱动电路里正常工作状态下互补PWM的占空比是“有偏移”的。比如上管占空比90%下管占空比10%这样才有个对称关系。如果因为运算条件导致某一侧占空比逼近100%另一侧逼近0%再加上死区存在系统已经进入极端状态离直通也不远了。所以半桥驱动PWM一般不建议直接开到100%要给换向过程留出余量这也是为什么很多驱动芯片手册里会限制最大占空比比如推荐不超过95%或者98%具体看芯片的上管自举电容能不能维持驱动电压。自举电容靠下管导通时充电下管导通时间太短自举电压会掉上管驱动能力就不够了这是一个容易被忽略的连锁反应。5. 实战应用调光、电机调速与外部扩展5.1 LED调光和呼吸灯最小成本的PWM应用PWM最简单的应用就是控制LED亮度。LED的亮度不是线性跟随电流的人眼对暗部变化敏感度更高所以呼吸灯如果想做得舒服占空比变化曲线最好用指数或者Gamma校正过的值而不是线性从0加到100。用一个定时器中断或者主循环里定时更新CCR就能实现呼吸效果。参考参数为PWM频率500Hz到1kHz之间人眼不会感觉闪烁也不会听到电感啸叫。频率太高了意义不大太低了比如50Hz会明显闪烁80到100Hz往上的时候余光里能看到闪烁但直视好一些还是建议至少200Hz以上。F051跑1kHz PWM做LED呼吸CPU占用几乎可以忽略。另外如果你手头有一些需要模拟量输出的场景但芯片没DAC引脚可用PWM加RC低通滤波是一个方法。PWM经过一阶RC滤波器后平均电压等于VCC乘以占空比再经过一个运放缓冲就能当模拟信号用。但要注意这个方案的纹波和响应速度是矛盾关系。RC时间常数越大纹波越小但占空比变化后电压稳定得也更慢。F051C8T6本身带两个真正的DAC能用DAC就尽量用DAC别绕路。5.2 直流电机调速H桥、PWM频率和接线细节直流电机调速是PWM的经典使用场景。用H桥配合互补PWM就能实现电机的正反转和调速。调速原理是电机两端的平均电压随占空比变化占空比越高平均电压越高转速越快。PWM频率的选择要考虑电机本身的电气时间常数和听觉噪音。常见频率在10kHz到30kHz之间超过20kHz人耳基本听不到避免电机发出尖锐啸叫。我的经验是对小空心杯电机和减速电机20kHz是默认起步点。具体工作频率还要结合MOS管开关损耗频率越高开关损耗越大所以不要盲目用特别高的频率。还有一个容易忽略的接线问题PWM地线必须和功率地单点连接而且信号回路不要穿过大电流路径。我调试电机板时遇到过PWM信号受干扰导致电机异响最后发现是驱动板的信号地和功率地走成了回路重新铺地后问题消失。这种问题用示波器看PWM引脚时会发现波形边缘有一堆高频毛刺。5.3 舵机控制50Hz与1到2ms脉宽的标准舵机控制用的是另一个标准。航模舵机输入的是50Hz左右的PWM脉宽通常在0.5ms到2.5ms之间不同的脉宽对应不同的角度。举个例子使用PSC479、ARR1999定时器时钟经480分频后为100kHz周期正好20ms。那么1.5ms脉宽对应CCR为1500.5ms对应502.5ms对应250。控制舵机时占空比变化要平滑如果直接从0跳到最大角度很多舵机会发出咔咔声并受到冲击。在代码里做一个简单的斜坡函数每次只把CCR往目标值移动一小步几百毫秒内递增完成效果会好很多。另外一个细节是舵机的电源和单片机最好分开供电舵机启动瞬间电流很大会把单片机电源拉低导致复位这是很多新手遇到的“舵机一转系统重启”问题的根源。5.4 如果通道不够用PCA9685与外部PWM扩展F051C8T6能用的定时器通道有限如果项目里需要控制大量舵机或者LED灯珠比如十几个舵机内部定时器无论如何都不够。这时可以用I2C接口的PCA9685模块一片就是16路PWM最多可以级联到160多路。PCA9685的用法其实很简单初始化时设置更新频率然后逐通道写入占空比数据。它本身不占用你内部定时器的PWM通道F051只需要提供一个I2C总线。不过要注意外部PWM芯片的时序精度和内部硬件定时器不能比它的时钟基准来自内部振荡器精度在百分之几的水平对舵机和LED足够对精密电机控制就完全不行。5.5 用输入捕获测量外部PWM信号做控制类项目的时候经常需要读取外部设备的PWM信号比如遥控器接收机输出、或者上一级控制器发来的速度指令。这时候可以用定时器的输入捕获功能把外部PWM接到某个捕获通道测量它的频率和占空比。以TIM3_CH1为例配置成Input Capture direct mode上升沿触发。为了让频率测量方便可以开启Slave Mode里的Reset Mode这样每次捕获到上升沿都把计数器清零。第一个上升沿到来时捕获寄存器CCR1存的值就是整个周期的计数个数。再触发一次捕获CCR1里又是新的周期值不需要额外处理计数器溢出问题。假设定时器计数时钟是1MHz也就是PSC设成47那么捕获到的数值单位就是微秒。周期值1000就表示频率1kHz。占空比测量需要配置两个通道一个捕获上升沿存周期另一个捕获下降沿存高电平时间或者再配置一次输入捕获在下降沿触发。代码里在捕获中断里读取CCR值、做差、换算就能得到实时频率和占空比。这样测量比自己用外部中断翻转GPIO计数靠谱得多因为它完全由定时器硬件完成精度高、应对高频信号不丢事件。6. 常见问题与调试经验速查6.1 PWM没有输出先从这几个地方查遇到PWM死活不出波形先别急着怀疑芯片坏了。有一个我自己反复踩过的坑是用CubeMX生成代码后GPIO时钟没有充分使能。虽然CubeMX生成的代码一般不会漏但如果你自己手动改过初始化顺序或者精简了代码很容易把GPIOA或者GPIOB的时钟忘了打开导致引脚配置根本没生效。还有一类问题出在启动函数上。有些人代码里配置了PWM参数却在主函数里忘了调用HAL_TIM_PWM_Start导致引脚输出恒为低电平。从现象看像没配置成功实际就是没启动。引脚复用功能也对不上号。TIM3_CH1可能出现在PA6或者PB4这是重映射上的差别。用CubeMX配置一般会自动处理但如果你手动写寄存器要确保GPIO的AFR寄存器选对了复用功能编号不能只看引脚编号。PA6默认复用这没什么问题但像TIM15_CH1和部分串口引脚可能挤在同一个物理引脚上配置错复用功能结果就是引脚被串口外设占用PWM信号完全出不来。6.2 占空比修改了但输出一直不变发生这个现象时第一反应检查是不是真的写到了正确的通道寄存器上。比如工程里配置的是TIM3_CH2代码里却调用了__HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, newValue)这写的是另一个通道的CCRPWM自然不变。比较容易在小工程里复制粘贴漏改通道参数。另一个隐蔽原因是中断或DMA也在修改同一个CCR寄存器你写的值和后台任务写的值互相打架看起来就是“改了但马上被改回去”。可以用调试器读一下CCR寄存器的当前值看是否和你写入的一致。还有一点修改CCR时如果使能了预装载功能CCR的新值要等到下一个更新事件才会生效。CubeMX里Output compare preload默认是关闭的但如果被打开你写的新值确实不会立即出现在输出上而是延迟一个周期。这样从示波器上看占空比变化会慢半拍但在实时控制场景这种延迟很致命。6.3 频率不准先查时钟源和分频频率和寄存器计算对不上最常见的原因是把定时器时钟当成了APB总线时钟。前面说过APB1分频不为1时定时器时钟会变成总线时钟的2倍如果算的时候把定时器时钟当成48MHz实际配出来也是48MHz那需要确认APB1分频是否为1。如果APB1设成2总线时钟24MHz定时器时钟变成48MHz这种情况下你按24MHz算出来的频率就会比实际高出一倍。另外如果用HSI内部振荡器作为时钟源频率基准本身就有误差。F0的HSI出厂校准精度约1%在极端温度下可能更大。对LED呼吸灯这种应用完全没有影响但如果你做的是需要和其他设备同步的PWM通信比如红外遥控载波建议启用外部晶振并且对定时器时钟做完完整校准。还有一个踩过的坑CubeMX的时钟树页面在修改PLL配置后有时界面显示48MHz实际生成代码里某个环节设置成了别的分频值导致最终PWM频率和预期差很多。所以验证频率时不要只看CubeMX的预估用逻辑分析仪测量实际波形。6.4 启动后波形有毛刺或者一段高一段低PWM在启动阶段偶尔出现宽度异常多半是预装载没设置好。比如初始化时先设置了ARR999又紧接着写了CCR500但没有开启预装载导致CCR写入和计数值比较时产生了一个不完整的周期输出。把Auto Reload Preload和Output Compare Preload都打开新值等到安全时机再生效毛刺会明显减少。死区导致互补输出波形异常也和预装载有关。TIM1的死区寄存器在运行时修改需要等待更新事件如果是动态调节死区时间要确保在更新事件之后才检查输出波形不然看到的是过渡状态。6.5 排查问题经验表最后把常见现象、可能原因、处理办法整理成一个速查表放在手边调试时对照着看。现象可能原因处理办法引脚无输出没调用HAL_TIM_PWM_Start检查CCER使能位引脚无输出GPIO复用功能配置错检查AFR寄存器和CubeMX引脚配置引脚无输出刹车输入锁死输出检查BKIN引脚状态和MOE位频率比预期高或低定时器时钟分频理解有误确认APB1分频器设置占空比改动不生效写错通道号用调试器读CCR当前值占空比变化滞后预装载开启根据控制环路需求决定开或关波形有毛刺预装载未开启开启ARR和CCR预装载高频下波形占空比失真信号上升沿太慢检查GPIO输出速度和负载电容我在实际用F051做小电机控制板时体会最深的一点是PWM本身不难难的是把配套的外围条件都考虑到。频率、占空比、相位、死区、刹车、预装载这些参数互相牵连调一个就可能影响另一个。所以不要只盯着CubeMX表单里的参数抄而是花十分钟把计算过程在纸上推导一遍理解每个值从哪来、改它会动到谁。这种基础功夫几年后回头看是最重要的积累。
网站建设 高端定制 企业官网