当前位置: 首页 > news >正文

STM32F103C8T6 PWM引脚-定时器-通道对照表

这是给STM32小白用的速查表,专门解决“选了引脚,不知道对应哪个通道、哪个函数”的问题。

都是开发中最常用的组合,直接对着用就行,不用翻手册。

一、常用定时器的引脚和通道对应表

1. TIM1:高级定时器,必须开主输出

CH1 → PA8

CH2 → PA9

CH3 → PA10

CH4 → PA11

高级定时器必须加TIM_CtrlPWMOutputs(TIM1, ENABLE);

不然没输出

2. TIM2:通用定时器

CH1 → PA0/ PA15(重映射)

CH2 → PA1/ PB3(重映射)

CH3 → PA2/ PB10(重映射)

CH4 → PA3/ PB11(重映射)

前面第一个都是对应的是默认的引脚

3. TIM3:通用定时器,电机驱动常用

CH1 → PA6/ PB4(重映射)

CH2 → PA7/ PB5(重映射)

CH3 → PB0

CH4 → PB1

4. TIM4:通用定时器,全在PB口

CH1 → PB6

CH2 → PB7

CH3 → PB8

CH4 → PB9

二、通道号=函数号

规律:通道号是几,函数里的数字就是几

通道号 初始化用的函数 改占空比用的函数

CH1 TIM_OC1Init() TIM_SetCompare1()

CH2 TIM_OC2Init() TIM_SetCompare2()

CH3 TIM_OC3Init() TIM_SetCompare3()

CH4 TIM_OC4Init() TIM_SetCompare4()

这是一个表格

三、学完PWM呼吸灯的总结

1. TIM1 忘了开主输出:高级定时器必须加 TIM_CtrlPWMOutputs ,不然初始化写得再对也没信号。

2.通道号和函数没对上:用了PA9(TIM1_CH2),却调用 TIM_SetCompare1 ,等于对着通道1喊话,通道2根本收不到。

3. 循环范围和ARR不匹配:ARR设了999,main里却只循环到100,占空比跑不满,灯看起来像不亮。

4. 极性和接线没对应: TIM_OCPolarity_Low 对应“长脚接GND,短脚接引脚”,接反了效果会很弱。

四、快速配置步骤

1. 开时钟:定时器时钟 + GPIO时钟(TIM1要开APB2的)

2. 配置GPIO:引脚设为复用推挽输出 GPIO_Mode_AF_PP

3. 时基初始化:设置PSC、ARR,定好PWM频率

4. 输出比较初始化:选通道号、PWM模式、极性、初始占空比

5. 使能定时器: TIM_Cmd(TIMx, ENABLE);

6. (TIM1专属)开主输出: TIM_CtrlPWMOutputs(TIM1, ENABLE);

7. 运行时改占空比: TIM_SetCompareX(TIMx, 数值);

五.极简版总结

看引脚复用名:比如PA9是 TIM1_CH2 ,就用TIM1的CH2通道

通道号是几,就用带几的函数

TIM1一定要开主输出,其他定时器不用管

占空比 = 写入的CCR值 / (ARR+1)

六.个人的感受

我学STM32 PWM的真实感受(纯个人)

最开始的懵圈状态:

一开始学PWM的时候,我真的一头雾水。

看着代码里 TIM_Period 、 TIM_Prescaler 这些参数,完全不知道啥意思,更别说引脚和通道对应了。

最惨的是第一次用PA9做呼吸灯,代码敲了半天,灯一点反应没有,当时真的急坏了,反复看代码都没发现问题,后来才知道是通道号和函数没对上,还有高级定时器忘了开主输出,两个致命错误一起犯,能亮才怪…

开窍:

等把PA9的呼吸灯跑通之后,突然就有点懂了

原来引脚、定时器、通道是一一对应的,比如PA9对应TIM1_CH2,那初始化就必须用CH2的函数,改占空比也得用 TIM_SetCompare2 ,之前就是把CH1和CH2搞混了,才一直没信号。

还有TIM1这个高级定时器,比通用定时器多一步 TIM_CtrlPWMOutputs ,一开始根本不知道有这回事,查资料才发现,少了这行,就算代码全对,PWM信号也出不来,真的是一步错,全白搭。

自己的总结就是:

1. 看引脚找通道:记住常用引脚对应的定时器和通道,比如TIM1的CH2就是PA9,TIM2的CH1就是PA0,不用每次都翻手册。

2. 通道号=函数号:这个规律真的太重要了

CH1用 TIM_OC1Init 和 TIM_SetCompare1 ,CH2就用带2的函数,千万别搞混,不然灯不亮都是小事,还会怀疑自己代码写错了。

3. TIM1有专属操作:高级定时器必须开主输出,这是和通用定时器最大的区别,一定要记死!

4. 占空比别算错: 占空比=CCR/(ARR+1) ,ARR设了999,循环范围就得是0~999,不然占空比跑不满,灯看起来就像没亮一样。

我感觉学STM32真的不能只看理论,光看代码不实操,永远不知道坑在哪。

比如这次PWM,看似简单,却藏了好几个细节:通道对应、高级定时器主输出、循环范围匹配、极性和接线对应,每一个点错了,都能白忙活半天。

但当把呼吸灯成功点亮,看着灯慢慢变亮、再慢慢变暗的时候,那种成就感真的超棒!所有的着急、疑惑都消失了,反而觉得原来这么简单,我之前咋没想到。

现在再看PWM的代码,已经不会懵了,反而觉得逻辑很清晰,接下来还想试试按键控制亮度、多通道PWM输出…

如果还有需要补充的东西,希望大佬们不吝赐教,感谢你能看到这里~

http://www.jsqmd.com/news/689145/

相关文章:

  • 在线语音转文字支持哪些格式?上传前检查与压缩建议全解析
  • Perfetto UI分析Native内存:看懂四个关键视图,揪出Android应用里的“隐形”泄漏点
  • 使用archlinux搭建arm开发环境(非linux)
  • Ofd2Pdf终极指南:3步实现OFD到PDF高效无损转换
  • Harness Engineering:AI Agent 落地企业的工程化核心
  • 从malloc到memsafe_c:2026规范强制要求的4类API替换清单,不改业务逻辑也能通过ISO/IEC 17961合规审计
  • Java:捕获特定异常
  • 思源宋体完全指南:7字重免费开源中文字体终极教程
  • 当AI学会“挖洞”:从Mythos到360漏洞挖掘智能体,网
  • 从AK4490到ES9038:聊聊那些年我们用过的DAC芯片,以及它们背后的声音故事
  • 固本强基:国内网络变压器行业格局与技术演进分析(2026)
  • 安全编程实践常见漏洞与防范措施
  • TwinCAT ADS通信故障排查实战:从网卡IP到防火墙,手把手教你定位并解决‘无法扫描’问题
  • 抖音批量下载器终极指南:3步实现无水印批量下载
  • 【WPF】巧用BitmapCacheOption.OnLoad释放图像文件句柄,解决资源锁定与程序崩溃难题
  • CANoe Trace窗口保姆级指南:从报文查看、过滤到数据导出的完整操作流程
  • CRM系统怎么接入企业信息API?4步详解
  • 如何用开源抖音下载器3分钟搞定批量下载:告别繁琐操作
  • DevSecOps国产化崛起:安全左移时代的技术竞速与生态重构
  • 3分钟搞定桌面股票监控:TrafficMonitor插件终极指南
  • Cursor 官宣AI新玩具:Canvas
  • 别再迷信模板了,AI标书工具才是解决个性化投标的关键
  • 【毕设神器】基于SSM的图书馆管理系统完整代码与论文
  • 黑苹果新手救星:OpenCore Configurator三步搞定复杂引导配置
  • OpenDrop:3大革新解锁微观世界操控新纪元
  • 在 VS Code 中玩转 Agent Skills(科研工作者必备skill推荐,一定要收藏)
  • 如何用 Obsidian Mind Map 将杂乱笔记变成清晰思维导图?3个步骤实现高效知识管理
  • AI 直播字幕:让声音 “看得见” 的黑科技
  • 别再乱用dd命令了!嵌入式Linux读写NAND Flash,mtd-utils和mtdblock到底怎么选?
  • 比较CubeMX生成的函数与FreeRTOS原生API | FreeRTOS学习 Day5