3970|3

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

新驱动力MM32F103测试(四)高级定时器PWM [复制链接]

本帖最后由 lising 于 2018-11-1 10:20 编辑

      本次实验是利用MM32F103C8T6高级定时器TIM1的CH1输出频率为100KHz的PWM波驱动LED发光。
一、实验资源
1、MM32F103开发板;
2、KEIL 5.25.2;
3、J-LINK V9;
4、新驱动力提供的开发例程;

二、实验过程
1、根据电路图可以了解到,开发板上的LED发光管D2与MM32F103C8T6芯片的PA8端口相连。由于D2阴极端接PA8端口,当PA8为低电平时LED被点亮;根据数据手册可知PA8端口的复用功能为TIM1_CH1,实验直接利用TIM1的CH1在PA8端口输出频率为100KHz且占空比可变的PWM波,驱动D2产生暗->渐亮->亮->渐暗->暗的显示效果。





2、PWM输出程序直接利用官方例程修改而成。程序中首先对TIM1_CH1进行初始化设置,如将PWM频率直接配置为100KHz、采用PWM模式2等,代码如下:
  1. void TIM1_PWM_Init(void)
  2. {  
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  5.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  6.         
  7.         /*使能GPIO外设和TIM1时钟*/
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
  9.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  
  10.                                                                                     
  11.   /*设置PA8复用输出功能,输出TIM1_CH1的PWM脉冲*/
  12.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                 
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         
  14.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  16.         /*设置自动重装载寄存器周期的值为720-1,即PWM周期为72MHz/720=100KHz;
  17.         定时器时钟预分频数为0;采用向上计数;PWM为模式2;输出极性高;*/        
  18.         TIM_TimeBaseStructure.TIM_Period = (720-1);
  19.         TIM_TimeBaseStructure.TIM_Prescaler = 0;
  20.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  21.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  22.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  23.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  24.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  25.         TIM_OCInitStructure.TIM_Pulse = 0;
  26.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  27.         TIM_OC1Init(TIM1, &TIM_OCInitStructure);  

  28.   TIM_CtrlPWMOutputs(TIM1,ENABLE);                                                                                //MOE 主输出使能        
  29.         TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);          //CH1预装载使能                 
  30.         TIM_ARRPreloadConfig(TIM1, ENABLE);                                                                 //使能TIM1在ARR上的预装载寄存器        
  31.         TIM_Cmd(TIM1, ENABLE);                                                                                                                  //使能TIM1   
  32. }
复制代码



3、功能实现。在主程序中首先对初始化程序时进行调用,在while(1)循环中以采用了两个for循环语句以5ms时间间隔将变化的参数写入TIM1_CCR1,用以改变PWM的占空比:
  1. int main(void)
  2. {                  
  3.   delay_init();                             //延时函数初始化         
  4.   LED_Init();                                          //初始化与LED连接的硬件接口
  5.   TIM1_PWM_Init();        

  6.   while(1)
  7.   {
  8.                 for(PwmDuty=0;PwmDuty<500;PwmDuty++)
  9.                 {
  10.                         TIM_SetCompare1(TIM1,PwmDuty);
  11.                         delay_ms(5);
  12.                 }
  13.                 for(PwmDuty=500;PwmDuty>0;PwmDuty--)
  14.                 {
  15.                         TIM_SetCompare1(TIM1,PwmDuty);
  16.                         delay_ms(5);
  17.                 }
  18.   }
  19. }
复制代码


4、实验现象。如前所述;



视频.mp4 (14.95 MB, 下载次数: 65)

三、实验总结。
      这次实验时间过于匆忙,只是呈现了实验现象,而对于官方例程的学习理解还有很大的欠缺。接下来要好好利用这些例程,并结合手册深入理解学习。

此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自电机控制论坛

最新回复

这个还需要将PA8和D2用跳线帽链接   详情 回复 发表于 2019-10-18 14:36
点赞 关注
 
 

回复
举报

1368

帖子

6

TA的资源

版主

沙发
 
不错,我也得整理我的测试文章了,只测试忘了发贴了
此帖出自电机控制论坛

点评

我是做了就赶紧发,时间长了还得重来一遍  详情 回复 发表于 2018-11-2 09:19
个人签名专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
 
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
懒猫爱飞 发表于 2018-11-2 08:31
不错,我也得整理我的测试文章了,只测试忘了发贴了

我是做了就赶紧发,时间长了还得重来一遍
此帖出自电机控制论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

4
 

这个还需要将PA8和D2用跳线帽链接

此帖出自电机控制论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表