免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 930 | 回复: 0
打印 上一主题 下一主题

赏析之 M3 TIM1 PWM 输出互补形式脉宽波 (19) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览
工程代码: 12_PWM1互补输出脉冲.rar  

使PWM功能,输出互补形式的脉宽波

PA8 pwm输出, PB13互补pwm输出


  1. int main()
  2. {    
  3.     u16 dat = 1;
  4.     RCC_Configuration();
  5.     delay_init();
  6. //    LED_Init();
  7.     TIM1_GPIO_Configuration();
  8.     TIM1_Configuration();

  9.     while(1)
  10.      {
  11.         delay_us(1000);                 //延时
  12.           if (dat<0xfe0)
  13.             dat=dat+20; //延时一定时间脉冲宽度+20
  14.          else
  15.             dat=0;

  16.           PWMSet(0xfff,dat);         //设置占空比
  17.     }

  18.     return 0;
  19. }

  1. #ifndef __TIM1_H
  2. #define __TIM1_H

  3. #include "stm32f10x_tim.h"
  4. #include "stm32f10x_gpio.h"
  5. #include "stm32f10x_type.h"

  6. void TIM1_GPIO_Configuration(void);
  7. void TIM1_Configuration(void);
  8. void PWMSet(u16 base_wide,u16 pulse_wide);

  9. #endif

  10. #if 0
  11. /*
  12. 硬件连接:指示灯连接 PA8
  13. 现 象:灯渐渐变亮, 将LED灯连接PB13 ,灯渐渐变暗
  14. 功能描述:使WM功能,输出互补形式的脉宽波
  15. 使用tim1 PWM 例子 */
  16. int main()
  17. {    
  18.     u16 dat = 1;
  19.     RCC_Configuration();
  20.     delay_init();
  21. //    LED_Init();
  22.     TIM1_GPIO_Configuration();
  23.     TIM1_Configuration();

  24.     while(1)
  25.      {
  26.         delay_us(1000);                 //延时
  27.           if (dat<0xfe0)
  28.             dat=dat+20; //延时一定时间脉冲宽度+20
  29.          else
  30.             dat=0;

  31.           PWMSet(0xfff,dat);         //设置占空比
  32.     }

  33. }
  34. #endif

  1. #include "tim1.h"

  2. /**********************************************************************
  3. * 名 称:GPIO_Configuration()
  4. * 功 能:配置输入输出
  5. * 接口参数:
  6. * 全局变量:
  7. -----------------------------------------------------------------------
  8. * 说明:使用库函数,配置IO口
  9. ***********************************************************************/
  10. void TIM1_GPIO_Configuration(void)
  11. {

  12.     GPIO_InitTypeDef GPIO_InitStructure;
  13.     /*PA8设置为输出,PWM OC1输出*/
  14.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
  15.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  16.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  18.     /*PB13设置为输出 PWM OC1互补输出*/
  19.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ;
  20.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  21.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  22.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  23. }
  24. /**********************************************************************
  25. * 名 称:TIM1_Configuration()
  26. * 功 能: 定时器1配置
  27. * 接口参数:
  28. * 全局变量:
  29. -----------------------------------------------------------------------
  30. * 说明:配置为PWM输出模式,输出引脚PA8,互补输出到PB13
  31. ***********************************************************************/
  32. void TIM1_Configuration(void)
  33. {
  34.     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  35.     TIM_OCInitTypeDef TIM_OCInitStructure;
  36.     
  37.     
  38.     TIM_DeInit(TIM1);
  39.     
  40.     
  41.     TIM_TimeBaseStructure.TIM_Prescaler = 0x0;                     //时钟预分频得CK_INT时钟提供给计数器 APB2时钟/(n+1) n=1~65536
  42.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
  43.     TIM_TimeBaseStructure.TIM_Period = 0xffff;                     //自动重装载值
  44.     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //时钟倍频因子,输出时钟供给死区发生器等
  45.     TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;             //周期计数器值 0~255
  46.     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);                     //初始化
  47.     
  48.     
  49.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;      //PWM2模式
  50.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //信号输出到对应的输出引脚
  51.     TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //互补信号输出到对应的输出引脚
  52.     TIM_OCInitStructure.TIM_Pulse = 0;                                  //脉冲宽度
  53.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCNPolarity_High;      //互补输出高电平有效
  54.     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; //互补输出高电平有效
  55.     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;     //输出空闲状态为1
  56.     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; //互补输出空闲状态为0
  57.     
  58.     TIM_OC1Init(TIM1, &TIM_OCInitStructure);                                  //OC1通道初始化
  59.     
  60.     
  61.     TIM_Cmd(TIM1, ENABLE);     //使能定时器1
  62.     
  63.     TIM_CtrlPWMOutputs(TIM1, ENABLE); //使能PWM输出
  64.     // 时钟使能 在 rcc 中声明了
  65.     // RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);    //给TIM1提供时钟
  66. }

  67. /**********************************************************************
  68. * 名 称:PWMSet()
  69. * 功 能: 设置PWM基波宽度,占空比
  70. * 接口参数:base_wide 基波宽度
  71.             pulse_wide 脉冲宽度
  72. * 全局变量:
  73. -----------------------------------------------------------------------
  74. * 说明:
  75. ***********************************************************************/
  76. void PWMSet(u16 base_wide,u16 pulse_wide)
  77. {
  78.     TIM_SetAutoreload(TIM1, base_wide);
  79.     TIM_SetCompare1(TIM1, pulse_wide);
  80. }





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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP