历史上的今天

今天是:2024年10月05日(星期六)

正在发生

2018年10月05日 | STM32f4 PWM输出实验代码

发布者:电子设计艺术家 来源: 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输入捕获实验代码
下一篇:STM32f4定时器中断实验代码

推荐阅读

关于即将到来的“机器人末日”传闻,人们各执一词,因为这与就业市场有极大关联。机器人技术与人工智能技术正以惊人的速度进步和发展。目前,从建筑到金融领域,部分就业者已经被同类机械化或数字化技术所取代。但在未来十年,更多的行业将受到影响。根据2017年麦肯锡全球研究所对46个国家中800个职业进行的一项研究发现,到2030年,将有8亿人的工作被自动...
如果数字逻辑电路的频率达到或者超过45MHZ~50MHZ,而且工作在这个频率之上的电路已经占到了整个电子系统一定的份量(比如说1/3),通常就称为高频电路。高频电路设计是一个非常复杂的设计过程,其布线对整个设计至关重要!【第一招】多层板布线高频电路往往集成度较高,布线密度大,采用多层板既是布线所必须,也是降低干扰的有效手段。在PCB Layout阶段,合...
谈到医疗机器人,许多人都会起到美国Intuitive surgical公司研发的达芬奇机器人,它是世界第一款手术机器人,代表着机器人在医疗行业应用的重要里程碑。不过,达芬奇仍然是由人类控制的机器系统。随着人工智能技术的进步发展,医疗行业又发生了巨大的变化。利用机器学习的方法,可以对不同病例进行学习,再结合所有医学知识库的知识,能够快速诊断出病情...

史海拾趣

问答坊 | AI 解惑

简单c教程

在网上找到的c教程。…

查看全部问答∨

谁做过usb的调试啊

为啥我做的cy7c68001 usb插到电脑上一点反映都没有啊 来自EEWORLD合作群:arm fpga linux 嵌入1(63762526) 群主:wangkj…

查看全部问答∨

IPSM 还是有些问题,求助!!!

我的PSM设置如下: UINT8 PLAT_DefineArrayParameters(PSM_OEMInfoPtr oem_info_ptr) {     static const PSM_OEMInfo oem_info = {         /* PhysicalReadStartAddress      * ...…

查看全部问答∨

以下是我的程序,调不通

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Threading; namespace ...…

查看全部问答∨

新唐 M0 学习 笔记(一)

昨天去了青岛的新唐研讨会,送了两块板子,回来后实践,按照默认进行按照。进入到隐藏超级无敌深的目录后正常编译运行,于是将该目录拷出来放到我的一个文件夹下,打算以此工程作为最小工程模板(个人比较懒),重新编译,发现有错误(如图一示), ...…

查看全部问答∨

个人收集以及实践出的多种软件滤波(如AD、测频)

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑  …

查看全部问答∨

求FPGA好书

请问谁有这本书啊,原文件名:Digital Signal Processing with Field Programmable Gate Arrays(3rd ed).pdf 有的话,请分享哈,谢谢…

查看全部问答∨

AM335x学习心得之LINUX引导

在AM335x移植LINUX内核后,在启动过程中大体为分以下几步:ROM加载的过程、SPL加载、U-boot加载、kernel加载。第一步:ROM加载,这一步也叫做RBL过程。ROM引导内容放在芯片ROM内,这是处理器初使化的第一步,在这步完成后进行第二步加载。第二步:S ...…

查看全部问答∨

新手苦心学习,G2553驱动LCD1602终拿下

经过差不多两个星期的学习、试验,终于用LaunchPadG2553把LCD1602驱动起来了,参考学习了坛友们之前发出来的资料和代码,但是调不通,无奈只能自己学习,然后编写代码,现在一切都能显示正常,现将关于LCD1602的资料和自己编写的代码和用于CCS开发 ...…

查看全部问答∨

D组射频放大器讨论中心!

本帖最后由 paulhyde 于 2014-9-15 03:17 编辑 大家有问题可以在这讨论,以此为中心,不要分散了!    …

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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