历史上的今天

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

正在发生

2018年09月29日 | STM32f4---PWM输出实验代码

发布者:才富五车330 来源: eefocus关键字:STM32f4  PWM输出  实验代码 手机看文章 扫描二维码
随时随地手机看文章

pwm.c源文件代码如下:  

//TIM14 PWM部分初始化  

//PWM输出初始化

//arr:自动重装值   psc:时钟预分频数

void TIM14_PWM_Init(u32 arr,u32 psc)

{                  

  GPIO_InitTypeDef GPIO_InitStructure;

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  TIM_OCInitTypeDef  TIM_OCInitStructure;

  

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);  //TIM14时钟使能     

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能PORTF时钟

  

  GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GF9复用为 TIM14

  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                //GPIOF9  

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  //速度 50MHz

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉

  GPIO_Init(GPIOF,&GPIO_InitStructure);                //初始化PF9

     

  TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频

  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

  TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值

  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;  

  TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14

  

  //初始化TIM14 Channel1 PWM模式    

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM调制模式1

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

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性低

  TIM_OC1Init(TIM14, &TIM_OCInitStructure);  //初始化外设TIM1 4OC1

  TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  //使能预装载寄存器

     TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE 使能  

  TIM_Cmd(TIM14, ENABLE);  //使能TIM14                     

}

此部分代码包含了上面介绍的PWM输出设置的前5 个步骤。这里我们关于TIM14 的设置就不再说了。  

接下来,我们看看主程序里面的main函数如下:

int main(void)

{  

  u16 led0pwmval=0;     

  u8 dir=1;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

  delay_init(168);  //初始化延时函数

  uart_init(115200);//初始化串口波特率为115200

    TIM14_PWM_Init(500-1,84-1);  //定时器时钟为84M,分频系数为84,所以计数频率

//为84M/84=1Mhz,重装载值500,所 以PWM频率为  1M/500=2Khz.      

     while(1)   

  {

      delay_ms(10);   

    if(dir)led0pwmval++;//dir==1 led0pwmval递增

    else led0pwmval--; //dir==0 led0pwmval递减  

      if(led0pwmval>300)dir=0;//led0pwmval到达 300后,方向为递减

    if(led0pwmval==0)dir=1;  //led0pwmval递减到 0后,方向改为递增

  

    TIM_SetCompare1(TIM14,led0pwmval);  //修改比较值,修改占空比

  }

}

这里,我们从死循环函数可以看出,我们将led0pwmval这个值设置为PWM比较值,也就是通过led0pwmval 来控制 PWM 的占空比,然后控制 led0pwmval 的值从 0 变到 300,然后又从 300变到0,如此循环,因此DS0 的亮度也会跟着信号的占空比变化从暗变到亮,然后又从亮变到暗。至于这里的值,我们为什么取 300,是因为PWM的输出占空比达到这个值的时候,我们的 LED 亮度变化就不大了(虽然最大值可以设置到 499),因此设计过大的值在这里是没必要的。至此,我们的软件设计就完成了。


关键字:STM32f4  PWM输出  实验代码 引用地址:STM32f4---PWM输出实验代码

上一篇:STM32f4---输入捕获实验代码(01)
下一篇:STM32f4---PWM输出实验代码

推荐阅读

   自推出以来,Galaxy Note9已经收到两个系统更新,第一个改进了对超级慢动作视频模式的控制,第二个解决了Bixby按钮的问题。现在第三个系统更新已经推送,这也是最重要的一个,因为它有望大幅改善相机体验。  德国用户发现OTA已经更新,版本号为N960FXXU2ARI9,大小为302MB。更新日志是关于相机的改进:解决了图像的某些部分曝光不足的HDR问题,也...
OPPO官方微博再次爆料OPPO K5更多配置信息,有高通骁龙730G以及30W VOOC闪充4.0。从OPPO公布的宣传海报上可以看到,OPPO K5搭载了8nm制程高通骁龙730G处理器。让人感到惊喜的是,OPPO K5配备了30W的VOOC闪充4.0,并且搭载了一块4000mAh大容量电池,30分钟最高可充67%的电量,充电时间缩短了12%。除了配置上的提升,OPPO K5后置6400万像素超清四摄,它...
MACOM公司是全球知名的射频、网络设备供应商,在微波、射频、半导体、通信网络等领域具有很强的竞争力。而近些年MACOM积极拓展光通信市场,并通过并购Optomai、BinOptics、Photonics Controis等公司,大大提高了其在光电领域的市场竞争力。在电子通信系统中,光电器件如激光器、发光二极管等使用越来越频繁,为降低系统功耗并达到更高的数据传输速率,光...
在一些经常性产生气体的场所,因为不确定的因素可能会导致危险发生,所以需要时时刻刻的进行气体的检测,那么大家知道在选择气体检测仪时应注意哪些方面吗?需要注意常规的校准和检测,不同气体对传感器的主要探测干扰,还应注意传感器的寿命和气体检测仪的浓度范围。如何才能正确的选择气体检测仪呢?需要了解一些必要的信息,包括自己的需求、使用环境的...

史海拾趣

问答坊 | AI 解惑

上传自己写的C51单片机基础讲堂PDF文档

国庆期间写的,最初发表在了电子工程师阶梯论坛。这几天整理了一下,上传给大家分享。讲述了AT89S52单片机的各个模块的使用,并给出了代码和说明。 所有代码自己调试并进行了仿真,欢迎大家拍砖! [ 本帖最后由 shuijian 于 2008-10-29 22:17 编辑 ...…

查看全部问答∨

奥本海姆信号与系统课件

奥本海姆信号与系统课件 …

查看全部问答∨

基于CC2480的ZigBee无线节能路灯系统

【摘 要】随着城市化水平的不断提高和城市照明系统的不断扩大,节约能源并提高路灯系统的可靠性成了十分紧迫 的课题。目前很多城市的交通路灯的能源利用率不高,这不符合党中央下达的“建设节约型社会”的号召。CC2480是TI公司 生产的基于ZigBee ...…

查看全部问答∨

请教RS485总线的线路匹配电路

请大家帮忙,我设计的RS485总线通信线路,一共接了25个设备,驱动芯片用的RS485(有几个用了RS483),总线传输数据时干扰很大。 现在电路在每个终端处有20K的上拉和下拉电阻(分别接A和B,A上拉,B下拉),另外在A,B处跨接120欧姆的匹配电阻。不知 ...…

查看全部问答∨

CPLD的资源与稳定性

有人说CPLD资源使用过多会发热严重,影响稳定性。 现有一项目准备做PCB了,有一EPM7128的宏单元用了88%引脚用了86%,不知对稳定性是否真的有影响?以前的项目都没用过这么多的。 请有此类经验的同仁给点意见。。。…

查看全部问答∨

ce6.0->ce5.0应用程序问题

WINCE6.0的cetsc.exe可以在WINCE5.0平台上使用么? 如果可以,需要哪些条件支持? …

查看全部问答∨

下位机的通信程序如何编写

   刚开始学习PLC,遇到问题了,希望大家能帮帮忙。    用电脑(作为上位机)通过RS232口与PLC(作为下位机)连接,上位机的串口通信程序我会编写,但是下位机的程序是怎么编写的?在网上搜到手都酸了,都找不到下位机的通信 ...…

查看全部问答∨

请教各位关于万利EK学习板上调试usb的虚拟串口的问题

   最近使用stmf103做一个信号采集的实验板,觉得用usb传数据比较方便(主要是笔记本上都不带串口啊)。比较后打算用usb的虚拟串口功能比较好。有主机端的驱动程序,又有设备端的例程。 但是用起来有很多问题。因为是实时 ...…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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