历史上的今天

今天是:2024年09月20日(星期五)

正在发生

2018年09月20日 | STM32 PWM 占空比可变函数

发布者:静默思考 来源: eefocus关键字:STM32  PWM  占空比  可变函数 手机看文章 扫描二维码
随时随地手机看文章

频率 10K,占空比可以达到1%变化的精度,100K只能是10%的变化精度。




#define PWM_CLK1M_ARR_10K 100-1

 

void IzADCPWMInit(uint8_t duty)//10%~90%

{

 

  if(duty>90)

  {

 duty = 90;

  }

  if(duty<10)

  {

 duty = 10;

  } 

//reset 

  /* TIM4 enable counter */

  TIM_Cmd(TIM4, DISABLE);

 

   /* TIM4 Main Output Enable */

  TIM_CtrlPWMOutputs(TIM4, DISABLE); 

//end of reset

 

    /* System Clocks Configuration */

  RCCPWMADCConfiguration();

 

  /* GPIO Configuration */

  GPIOPWMADCConfiguration();

  /* -----------------------------------------------------------------------

    TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:

    The TIM3CLK frequency is set to SystemCoreClock (Hz), to get TIM3 counter

    clock at 24 MHz the Prescaler is computed as following:

     - Prescaler = (TIM3CLK / TIM3 counter clock) - 1

    SystemCoreClock is set to 72 MHz for Low-density, Medium-density, High-density

    and Connectivity line devices and to 24 MHz for Low-Density Value line and

    Medium-Density Value line devices

    The TIM3 is running at 36 KHz: TIM3 Frequency = TIM3 counter clock/(ARR + 1)

                                                  = 24 MHz / 666 = 36 KHz

    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR)* 100 = 50%

    TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR)* 100 = 37.5%

    TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR)* 100 = 25%

    TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR)* 100 = 12.5%

  ----------------------------------------------------------------------- */

  /* Compute the prescaler value */

  //PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;//24M

  //TIM3 Frequency=1MHz/(9999+1) =100Hz

  PrescalerValue = (uint16_t) (SystemCoreClock / 1000000) - 1; //TIM3 counter clock: 1MHz

  /* Time base configuration */

  //TIM_TimeBaseStructure.TIM_Period = 665;//(ARR)

  //TIM3 Frequency=1MHz/(9999+1) =100Hz

  //TIM_TimeBaseStructure.TIM_Period = 10000-1;  //TIM3 counter clock/TIM3 Frequency

  //TIM3 Frequency=1MHz/(99+1) =10 000Hz

  TIM_TimeBaseStructure.TIM_Period = PWM_CLK1M_ARR_10K;//PWM_CLK1M_ARR_100;  //TIM3 counter clock/TIM3 Frequency 

  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;

  TIM_TimeBaseStructure.TIM_ClockDivision = 0;

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

 

  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

 

  /* PWM1 Mode configuration: Channel1 */

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  //CCR1_Val =TIM3_ARR*duty/100;

 // TIM_OCInitStructure.TIM_Pulse = CCR1_Val;

 // TIM_OCInitStructure.TIM_Pulse = (uint16_t)(10000-1)*duty/100; 

  TIM_OCInitStructure.TIM_Pulse = (uint16_t)(PWM_CLK1M_ARR_10K)*duty/100;   

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

 

//  TIM_OC1Init(TIM3, &TIM_OCInitStructure);

 

//  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

//PB6: TM4 Channel1  

  TIM_OC1Init(TIM4, &TIM_OCInitStructure);

 

  TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); 

//PB8: TM4 Channel3

 

  /* PWM1 Mode configuration: Channel3 */

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = (uint16_t)(PWM_CLK1M_ARR_10K)*duty/100;   

 

 

  TIM_OC3Init(TIM4, &TIM_OCInitStructure);

 

  TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);

 

//PB7: TM4 Channel2

  /* PWM1 Mode configuration: Channel2 */

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse =  (uint16_t)(PWM_CLK1M_ARR_10K)*duty/100; ;

 

  TIM_OC2Init(TIM4, &TIM_OCInitStructure);

 

  TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);

#if 0

  /* PWM1 Mode configuration: Channel4 */

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

 

  TIM_OC4Init(TIM3, &TIM_OCInitStructure);

 

 

  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

#endif

 

  TIM_ARRPreloadConfig(TIM4, ENABLE);

 

  /* TIM4 enable counter */

  TIM_Cmd(TIM4, ENABLE);

 

   /* TIM4 Main Output Enable */

  TIM_CtrlPWMOutputs(TIM4, ENABLE);

 

}


关键字:STM32  PWM  占空比  可变函数 引用地址:STM32 PWM 占空比可变函数

上一篇:对STM32的CAN1模块的总结
下一篇:ARM中的RO段、RW段和ZI段的区别

推荐阅读

专注于营养、健康和绿色生活的全球科学公司荷兰皇家帝斯曼集团再次当选为道琼斯全球可持续发展指数行业领导者。帝斯曼已经连续15年获此殊荣,这是第8次在材料化工领域中排名首位。 荷兰皇家帝斯曼集团首席执行官兼董事会主席谢白曼 (Feike Sijbesma) 说道:“帝斯曼是一家目标导向、绩效驱动的公司:我们的科研基础和创新能力将为所有人创造更美好的生...
9月17日,海尚集团在上海召开“矢量摆线减速机和智能机器人共享控制系统发布会”。海尚矢量摆线减速机堪称全球高精密摆线减速机中的经典之作,减速机史上开创性采用双摆线差动变速方式输出,工作噪音低至60分贝,寿命延长至8万小时;以滚珠传动代替传统齿轮传动,简化复杂的制造工艺,减少其零部件的数量;让减速机的制造变的更简单、工艺链更短、成本更低...
苹果增加了Apple Watch Series 6和Wi-Fi iPad系列的产量。涉及的制造商包括Apple Watch Series 6的立讯精密和新iPad的比亚迪。 富士康和仁宝电子仍是苹果新发售产品的主要供应商,不过据业内人士透露,苹果可能会将更多订单转移到前两者。  据DigiTimes报道,为了应对贸易局势,苹果已经加大了在中国的生产力度,以满足中国内部市场的...
据业内消息人士透露,中国台湾地区的高速传输芯片供应商已获得代工厂商的承诺,明年将提供足够的产能支持,以迎接产业的繁荣。digitimes报道指出,消息人士称,供应商推出了多种高速传输芯片解决方案,包括无线5G、Wi-Fi 6E、有线2.5G以太网芯片、USB 4.0和PCIe 5.0接口解决方案,以配合不断升级的CPU、GPU、AI和其他高性能计算芯片。消息人士表示,由...

史海拾趣

问答坊 | AI 解惑

全国2010年最新mapinfo格式电子地图数据

全国2010年最新数据,以下数据全部是MAPINFO格式源代码矢量数据,支持二次开发,是GPS,GIS项目的专业运用矢量数据根据客户需求可以转SHP,CAD,GST等格式,主要应用于交通物流、通讯、导航定位、城市规划、空间资源、河流、林业 ...…

查看全部问答∨

GPS信号的频率是多少

大家都知道,GPS卫星发射无线信号,GPS接收器的RF单元接收这些无线信号。 请问各位,GPS卫星发射无线信号时候的频率是多少,就是这些无线信号在什么频率上进行传输?…

查看全部问答∨

板子与箱子?

我在学习arm开发,一直在用实验室的实验箱做实验(Magicarm-2410) 总感觉没有收获,许多东西都是知其然,不知所以然……(所有的实验几乎固化了) 想问问如果用实际的板子做实验,是不是更有效呢? …

查看全部问答∨

烧写wince以及wince上游戏开发问题

针对我们目前的项目,我想问以下问题:     1.我们用的实验箱是PXA270,ARM10,在烧写内核时先格式化FLASH。       但是同先前情况相同的是,按下实验箱上的reset重启后,出现以下错误: INFO: Loading image ...…

查看全部问答∨

ULMAY与合作伙伴签署系列协议,推动绿色环保无铅技术

近日,ULMAY与合作伙伴签署了系列协议,宣布加强电子无铅焊接领域的合作。系列合约的签署均体现了双方利用先进产品和技术优势,加强战略合作,着眼于长期商业机遇的战略。这些合作将使合作企业产品达到国际环保标准,帮助企业解决制造工艺难题,并提 ...…

查看全部问答∨

请教高手模电知识

问题:请各位高手帮忙具体分析一下,这两个电路输入端的接法是怎样起到保护作用的?…

查看全部问答∨

JTAG口当I/O用后,下载不进程序了。。

JTAG 口当I/O 用后,用仿真器下载不进程序了。。 识别不了设置,No Cortex-M Device found in JTAG Chain 咋整的呀。?大家遇到过吗》?…

查看全部问答∨

COSMIC中如何调整整数高低字节读取顺序?

以前在IAR 下 编译 AVR的程序是低字节在前,高字在后。 在COSMIC下 变成了,高字节在前,低字节在后。 这样通讯时,上位机的又得改。 在STVD 下可否设置 为 低字节在前,高字节在后?…

查看全部问答∨

【求助】MSP430的JTAG调试器能用在stm32上吗

                                 如题所述,本人很菜…

查看全部问答∨

困扰很久的DMA中断问题

本帖最后由 dontium 于 2015-1-23 13:35 编辑 采用5509A 和AIC23实现音频采集,I2C通信配置AIC23,然后通过McBSP0接受数据。并通过DMA传输到内存处理。现在的问题是DMA中断有时可以进去,有时进不去。大多时候是进不去。可以确定AIC23和McBSP0在正 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved