历史上的今天
返回首页

历史上的今天

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

正在发生

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

2018-09-29 来源:eefocus

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),因此设计过大的值在这里是没必要的。至此,我们的软件设计就完成了。


推荐阅读

史海拾趣

Embedded Planet公司的发展小趣事

Embedded Planet公司深知人才是企业发展的核心驱动力。因此,公司一直致力于培养和吸引优秀人才,建立了一支高效、专业的团队。公司为员工提供丰富的培训和发展机会,鼓励员工不断学习和创新。同时,公司还注重团队建设和文化塑造,营造了一个积极向上、团结协作的工作氛围。这些努力使得Embedded Planet公司成为了一个充满活力和创造力的企业。

EUPEC [eupec GmbH]公司的发展小趣事

EUPEC一直致力于技术创新和研发,不断推动电力半导体技术的进步。在多个关键领域,EUPEC都取得了重要的技术突破,如提高电力转换效率、降低能耗等。这些技术突破不仅提升了EUPEC产品的竞争力,也为客户带来了实实在在的经济效益。同时,EUPEC还积极拓展国际市场,产品广泛应用于电解铝、高压直流输电、软启动、直流传动、高压无功补偿设备等领域。

Corex Intervest Inc公司的发展小趣事

Corex Intervest Inc公司在电子行业的发展历程中,始终保持着稳健的步伐和进取的精神。公司不断适应市场变化和技术更新,不断调整战略方向和发展重点。在未来,公司将继续加大研发投入,拓展新的应用领域和市场空间,为电子行业的发展贡献更多的力量。

这五个故事展示了Corex Intervest Inc公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步到技术创新、市场拓展、战略合作和持续发展的不断推进,Corex Intervest Inc公司始终保持着积极进取的精神和不断创新的态度,在电子行业中取得了显著的成绩。

Actel公司的发展小趣事

随着公司规模的不断扩大和市场竞争的加剧,Corex Intervest Inc公司意识到单打独斗已经无法满足市场需求。因此,公司开始积极寻求与其他企业的战略合作,共同推动电子行业的发展。公司与多家知名企业建立了战略合作关系,共同研发新产品、开拓新市场,实现了资源共享和互利共赢。

FERYSTER公司的发展小趣事

在快速发展的过程中,FERYSTER公司非常注重企业文化的塑造。公司倡导“创新、协作、责任、卓越”的价值观,鼓励员工勇于创新、敢于担当。同时,公司还注重员工的成长和发展,为员工提供各种培训和学习机会。这些措施使得FERYSTER公司成为了一个充满活力、积极向上的团队,为公司的发展提供了源源不断的动力。

Chemtronics公司的发展小趣事

自1958年成立以来,Chemtronics公司在电子维护和维修领域不断进取。最初,公司专注于生产一系列清洁剂产品,以其高效清洁能力获得了市场的认可。随着时间的推移,Chemtronics逐渐将产品线扩展至超纯溶剂、净化室级别擦拭棒和擦拭布等领域,进而又扩展到电子电气和电信工业的精密返工和维修工具。这一转变不仅体现了公司对市场需求的敏锐洞察,也彰显了其不断创新的精神。

问答坊 | AI 解惑

求助:视频线的干扰问题如何解决?

视频线要走电线杆,但是是高压的,电磁干扰非常大,大家有什么好的办法么?…

查看全部问答>

分布式控制系统

分布式控制系统 分布式控制系统 (distributed control systems,简称DCS),又称为分散控制系统,分散型控制系统,集散控制系统.行业内业称4C技术既Control控制技术;Computer 计算机技术;Communication 通信技术;Cathode Ray Tube CRT显示技术。   ...…

查看全部问答>

探秘中国IC设计公司发展迷局(一) 

2000年到2009年十年间,中国的IC设计公司的命运跌宕起伏。十年来,始终没有一家IC公司能够在中国市场扛起旗帜,可谓是各领风骚一二年。天天谈芯 成立于1999年10月的中星微电子,除了CMOS数码图像处理芯片“星光N号”取得成功,公司依靠“星光中国 ...…

查看全部问答>

USB注册表问题

系统中USB项的注册表下有三个子项: ClientDrivers, FunctionDrivers, LoadClients. 这三项有什么区别和联系吗? …

查看全部问答>

菜鸟向各位请教,bsp编译过程

dir makefile def 和sources文件在编译时各起什么作用?…

查看全部问答>

音频驱动问题,大家指教。在线等!!!!!!!!!

lock_kernel();         mixer.busy = 0;         module_put(dmasound.mach.owner);         unlock_kernel(); --------------lock_kernel();  unlock_kernel();----- ...…

查看全部问答>

想问一下,我打通ZigBee串口,每次只可读写一次,不知道是那里的毛病,并且用linux下的串口也是这样,希望大家指导一下,谢谢

想问一下,我打通ZigBee串口,每次只可读写一次,不知道是那里的毛病,并且用linux下的串口也是这样,希望大家指导一下,谢谢…

查看全部问答>

关于EVC4.0的数据库问题

在网上搜了很多EVC4.0用ADO访问数据的,大多数都说是使用ADOCE3.1,就是那一堆注册什么Dll的,并有一个例子。我在WM5.0的机子上试过了,有一个DLL无法注册,程序可以正常运行(至少那个例子是正常运行了),有人说在Wince 4.2和WM5.0上没有实验过。 ...…

查看全部问答>

8253可编程定时计数器求高手帮忙

学校做课程设计,题目如下: 1 计时器设计 设计内容:编程控制8253接口芯片,使8253工作在定时方式,定时一定的时间,定时时间到后,输出的OUT1信号,通过扩展输入接口输入到CPU,经软件控制将秒计时准确显示在7段LED上. 2 BCD码电子计数器的设计 设计内 ...…

查看全部问答>