news 2026/8/16 2:03:10

PWM输出(stm32)-非互补

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PWM输出(stm32)-非互补

文章目录

    • PWM输出关键点
    • 代码如下:
    • 逻辑分析仪测试结果:

PWM输出关键点

定时器输出PWM其实很简单,主要关注下面几件事情

  • 1.PWM频率设置:
    这个通过设置定时器的ARR寄存器即可,外部通过TIM_Period 来配置. TimerClk/TIM_Period 即为PWM频率.

  • 2.PWM占空比设置:
    这个需要设置对应通道的CCR寄存器,定时器工作时,会比较CCR的值,当计数器工作在递增模式时,当计数器的值小于CCR中的值时,输出TIM_OCPolarity配置的极性,反之输出相反的极性.

  • 3.PWM极性
    PWM的极性通过TIM_OCPolarity配置, 一般默认都是高电平.一般我们说占空比为20%,就是意为一个周期内高电平持续时间占一个周期时间的20%.
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

代码如下:

uint16_tCCR1_Val=333;uint16_tCCR2_Val=249;uint16_tCCR3_Val=166;ntpwmout_main(void){/* 一些GPIO配置,不展示代码了*/TIM_Config();/* ----------------------------------------------------------------------- TIM1 Channel1 占空比 = (TIM1_CCR1/ TIM3_ARR)* 100 = 50% TIM1 Channel2 占空比 = (TIM1_CCR2/ TIM3_ARR)* 100 = 37.5% TIM1 Channel3 占空比 = (TIM1_CCR3/ TIM3_ARR)* 100 = 25% Note: 下面把定时器的时钟设置为21M, ----------------------------------------------------------------------- *//* TIM8 使用 APB2, 它的时钟是= 2 * PCLK2 = SystemCoreClock (168 MHz) */PrescalerValue=(uint16_t)((SystemCoreClock)/21000000)-1;/* Time base configuration */TIM_TimeBaseStructure.TIM_Period=665;//PWM频率为21000000/665 = 31.578KTIM_TimeBaseStructure.TIM_Prescaler=PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//占空比为333/665=50.07%TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//占空比对应的是高电平.TIM_OC1Init(TIM8,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel2 */TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR2_Val;//占空比=249/665=37.44%TIM_OC2Init(TIM8,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel3 */TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR3_Val;//占空比=166/665=24.96%TIM_OC3Init(TIM8,&TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM8,ENABLE);/* 下面这句代码很重要,没有的话,PWM没有输出的*/TIM_CtrlPWMOutputs(TIM8,ENABLE);/* TIM8 enable counter */TIM_Cmd(TIM8,ENABLE);}

逻辑分析仪测试结果:

各个通道的PWM频率都是相同的,计算公式为PWM频率为21000000/665 = 31.578K.但是逻辑分析仪测出来的为31.45K,稍微有点出入(先不计较了)

  • 通道1测试结果
    占空比为333/665=50.07%, 符合预期
  • 通道2测试结果:
    占空比=249/665=37.44%
  • 通道3测试结果:
    占空比=166/665=24.96%
  • 其它测试
    特意将极性改为低电平,则占空比就变成了低电平占整个周期的比例.如下图
    通道3的高电平变的很长.
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 2:02:43

【20260815】C# 类、对象和方法

using System;namespace StudyClass {// 1.普通类:包含实例成员 静态成员 class Person{// --------实例成员(没有static,属于每一个new出来的对象(属于对象),每个对象独立一份)--------public string Name; // 每…

作者头像 李华
网站建设 2026/8/16 2:00:10

慕课网职场人必修课:高效沟通与自信表达

在职场中,许多人踏实做事、勤恳负责,却常常因为说话方式不当,造成误解、耽误工作,甚至无意间影响职场人际关系。职场沟通从来不是简单的说话交流,而是一门兼顾分寸、逻辑和共情的学问。为了帮助职场人彻底打通沟通的底…

作者头像 李华
网站建设 2026/8/16 1:59:49

绿色免安装拼图工具 PintuMaster 1.6 技术解析:不写注册表、不占 C 盘,如何实现 0 成本搞定证件照/发票拼图?

导语 在日常办公中,拼图看似简单,却常常被大型图像处理软件"绑架"——动辄几个 GB 的安装包、强制写入系统盘、开机自启服务、注册表冗余项…… 而 PintuMaster 1.6(拼图大师)以解压即用的绿色形态,提供常规拼图、证件照专用、发票专用三大核心功能,并针对&q…

作者头像 李华
网站建设 2026/8/16 1:50:56

手机双目虚化拍照课程目录:从零到落地

作者:一位踩过无数坑的双目虚化算法工程师 课程定位:从零到一,带你搞懂手机双摄虚化的每一个细节25章系统掌握双目标定→预览深度→拍照深度→预览虚化→拍照虚化全流程 从单目相机模型到双目视觉基础,从立体匹配到深度图精化&…

作者头像 李华
网站建设 2026/8/16 1:49:07

以实战论 AI:诚邀一线工程师分享模型调优、工程落地真实案例

聊 AI 的文章太多了,但大部分要么停在"概念科普"层面,要么就是"我用了某个模型效果很好"的体验式分享。真正把模型从 60 分调到 85 分的过程,从 demo 到生产踩的那些坑,反而很少有人系统性地讲。 这篇文章不…

作者头像 李华
网站建设 2026/8/16 1:41:39

098、LVGL LED样式与亮度控制

LVGL LED样式与亮度控制 上周帮一个做智能家居面板的客户调试,对方反馈说LED指示灯在夜间模式下亮度刺眼,用lv_led_set_bright()把值压到10以下后,灯直接灭了——这让我意识到很多人对LVGL的LED控件存在误解。今天借这个案例,把LED的样式定制和亮度控制机制彻底讲透。 先…

作者头像 李华