历史上的今天
返回首页

历史上的今天

今天是:2025年02月14日(星期五)

正在发生

2019年02月14日 | STM32 PWM输出函数

2019-02-14 来源:eefocus

1、参考资料

     《STM32F1开发指南-库函数版本》-第14章 PWM输出实验

     《STM32中文参考手册V10》-第14章  通用定时器


2、STM32 PWM工作过程


    

    

    ·STM32 PWM工作过程(通道1为例)


       


      CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。

            CCMR1: OC1M[2:0]位:

                   对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】

            CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。

            CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。

 

3、PWM模式1&PWM模式2

    寄存器TIMx_CCMR1的OC1M[2:0]位来分析:


       


    ·STM32PWM工作过程


       


    ·STM32 PWM



    ·自动重载的预装载寄存器



    ·STM32定时器3输出通道引脚


 


4、PWM输出库函数

      void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

      

    typedef struct

        {

          uint16_t TIM_OCMode;  //PWM模式1或者模式2

          uint16_t TIM_OutputState; //输出使能 OR失能

          uint16_t TIM_OutputNState;

          uint16_t TIM_Pulse; //比较值,写CCRx

          uint16_t TIM_OCPolarity; //比较输出极性

          uint16_t TIM_OCNPolarity; 

          uint16_t TIM_OCIdleState;  

          uint16_t TIM_OCNIdleState; 

        } TIM_OCInitTypeDef;


    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM模式2

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

        TIM_OCInitStructure. TIM_Pulse=100;

        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

        TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2


     ·设置比较值函数

        void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Compare2);

     ·使能输出比较预装载:

        void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

     ·使能自动重装载的预装载寄存器允许位

        void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);


    ·要求:

       使用定时器3的PWM功能,输出占空比可变的PWM波,用来驱动LED灯,从而达到LED[PB5]亮度由暗变亮,

         又从亮变暗,如此循环。

         

    ·PWM输出配置:

    ①   使能定时器3和相关IO口时钟。

         使能定时器3时钟:RCC_APB1PeriphClockCmd();

         使能GPIOB时钟:RCC_APB2PeriphClockCmd();

        ②     初始化IO口为复用功能输出。函数:GPIO_Init();

                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      

        ③  这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,

               所以需要开启AFIO时钟。同时设置重映射。

                RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

                GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 

        ④    初始化定时器:ARR,PSC等:TIM_TimeBaseInit();

        ⑤    初始化输出比较参数:TIM_OC2Init();

        ⑥   使能预装载寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 

        ⑦   使能定时器。TIM_Cmd();

        ⑧   不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();

推荐阅读

史海拾趣

Dynawave Incorporated公司的发展小趣事

作为一家有社会责任感的企业,Dynawave一直注重环保和可持续发展。他们采用环保材料和生产工艺,减少了对环境的污染。同时,公司还积极参与各种环保活动,宣传环保理念。这些做法不仅提升了公司的品牌形象,也赢得了社会各界的赞誉。

创都(CAX)公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。创都公司深知这一点,因此在品质管理上投入了大量精力。公司建立了严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都经过严格把关。此外,创都公司还积极引进先进的生产设备和技术,提升生产效率和产品质量。这些措施使得创都公司的产品在市场上享有良好的口碑,赢得了消费者的信任和喜爱。

Hilscher Gesellschaft für Systemautomation mbH公司的发展小趣事

HVPSI成立于本世纪初,起初是一家小型的技术初创企业,专注于研发高效、可靠的高压电源模块。在创始人及核心团队的带领下,公司迅速在MOV(金属氧化物压敏电阻)模块领域取得了突破。这些模块在电力电子设备中起到了关键的过压保护作用,有效提高了系统的稳定性和安全性。通过不断的技术迭代和产品优化,HVPSI逐渐在行业内树立了技术领先的形象。

ARCOL公司的发展小趣事

为了进一步扩大市场份额,ARCOL公司积极寻求与国内外知名企业的合作机会。通过与合作伙伴建立战略合作关系,ARCOL成功打入国际市场,产品销量大幅提升。同时,公司还积极参加各类国际电子展会和交流活动,与全球客户建立了紧密的合作关系,为公司的全球化发展打下了坚实的基础。

Hexawave公司的发展小趣事

品质是ARCOL公司的核心竞争力。公司始终坚持以质量为核心,建立了严格的质量管理体系。从原材料的采购到产品的出厂,每一个环节都经过严格把关,确保产品的质量和性能达到最高标准。同时,ARCOL还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

AMERICASEMI [America Semiconductor, LLC]公司的发展小趣事

为了进一步扩大市场份额,AMERICASEMI积极寻求与其他企业的合作机会。公司与多家知名电子产品制造商建立了稳定的合作关系,为其提供优质的半导体产品和技术支持。同时,AMERICASEMI还积极开拓国际市场,将产品出口到全球多个国家和地区,实现了业务的快速增长。

问答坊 | AI 解惑

怎样自己做电路板?

PCB图画出来了,怎样自己做电路板?需要那些工具以及制作过程,谢谢!!…

查看全部问答>

快来,应该来算一笔账

不久前中国移动整了一个活动,充800块钱话费送一年宽带和一部家庭电话,看起来好像超实惠的样子,但是……这账算下来,可还真不省钱。 先看这手机话费,充800,即时到账200,这不用说,充了就充了,剩下的部分,分12个月返还,每个月返还50块,还 ...…

查看全部问答>

MTK射频布线详细教程

MTK射频布线详细教程…

查看全部问答>

三菱PLC坏了吗?

我现在在客户这,调试一台设备,用三菱的FX2N--32MT的LPC加个4AD和2DA的模块。 在公司调试的时候好好的,一个多月前从上海发到乐清来。今天到了客户这发现调试,发现PLC的24V电压好像不正常。 X端没有信号,那指示灯也亮。Y端输出的指示灯亮了 ...…

查看全部问答>

开关电源欠压保护电路的设计

1 引言   保护电路的设计,无疑是电源设计中一个非常重要的环节,它对于提高电源工作的安 全可靠性、延长电源的使用寿命都起着十分重要的作用。在设计保护电路时,一方面要保证其功能完善,工作稳定可靠;另一方面应力求简单明了,避免繁复 ...…

查看全部问答>

小弟新人,诚心请教各位大侠,非诚勿扰

    小弟刚刚大学毕业,现在在一家做汽车电子的公司上班,可以说是初次接触到单片机和嵌入式领域,现在公司给我的工作是做MCU软件,但上了一个多月班发现有很多疑惑。老大在这一个多月来叫我们看了一本关于单片机的英文资料,然后写了I2C ...…

查看全部问答>

怪事求助【AT91RM9200+LINUX+PC6脚】

CPU:AT91RM9200 操作系统:LINUX2.4 在我的应用中,把PC6脚作为视频中断的输入脚,在把他设置为I/O功能并且输入的状态下,只要这个脚有电平变化,LINUX就死机,在超级终端上按什么键都没用。系统中ARM控制7,8个视频类芯片,其他的脚都很正常。期 ...…

查看全部问答>

为什么加了线程后,模拟器运行速度变慢????

在EVC4下面,我做中国象棋游戏,使用了线程,并构造函数里面初始化,可是一旦编译完成后,模拟器上面的运行速度慢得吓人。不知道是什么原因。哪位大侠帮忙看看吧。 声明:CWinThread* m_pThinkThread; 在构造函数:m_pThinkThread=AfxBeginThre ...…

查看全部问答>

求教:关于can初始化的问题

关于CAN初始化的问题; 为什么CAN_Init()函数调用有时候成功有时候失败? 之前做的一个项目CAN_Init()初始化都成功, 现在在原来基础上加个函数做别的功能 这个函数初始化就失败 真是搞不懂,我那个函数就是初始化systick 的函数,不知 ...…

查看全部问答>