Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4521116
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-06-25 09:29:04

工程代码: 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. }





阅读(1838) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~