STM32GPIO输出高电平,为什么有两个引脚输出不了?

2019-07-14 22:06发布

本帖最后由 洪焯辉 于 2015-8-12 11:03 编辑
  1. #include "pwm.h"
  2. #include "led.h"
  3. //////////////////////////////////////////////////////////////////////////////////         



  4. //PWM输出初始化
  5. //arr:自动重装值
  6. //psc:时钟预分频数
  7. void tiM1_PWM_Init(u16 arr,u16 psc)
  8. {  
  9.         GPIO_InitTypeDef GPIO_InitStructure;
  10.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  11.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  12.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);  //使能GPIO外设时钟使能
  14.                                                                                     
  15.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  18.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  19.         GPIO_SetBits(GPIOC,  GPIO_Pin_6 | GPIO_Pin_7);
  20.        
  21.        
  22.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4; //
  23.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  24.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  25.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  26.         GPIO_SetBits(GPIOB,  GPIO_Pin_3 | GPIO_Pin_4);
  27.        
  28.        
  29.    //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
  30.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //TIM_CH4
  31.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  32.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  33.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  34.        
  35.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
  36.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
  37.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  38.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  39.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位


  40.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  41.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  42.         TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
  43.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  44.         TIM_OC2Init(TIM2, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

  45.     TIM_CtrlPWMOutputs(TIM2,ENABLE);        //MOE 主输出使能       

  46.         TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);  //CH1预装载使能         
  47.        
  48.         TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIMx在ARR上的预装载寄存器
  49.        
  50.         TIM_Cmd(TIM2, ENABLE);  //使能TIM1

  51.    
  52. }

  53. #include "led.h"
  54. #include "delay.h"
  55. #include "sys.h"
  56. #include "pwm.h"
  57. //ALIENTEK Mini STM32开发板范例代码8
  58. //PWM输出实验   
  59. //技术支持:www.openedv.com
  60. //广州市星翼电子科技有限公司

  61. int main(void)
  62. {       
  63.         u16 led0pwmval=0;   
  64. //        u8 dir=1;       
  65.         delay_init();                     //延时函数初始化          
  66.         LED_Init();                          //初始化与LED连接的硬件接口
  67.        
  68.         TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz
  69.            while(1)
  70.         {
  71.         GPIO_SetBits(GPIOB,  GPIO_Pin_3 | GPIO_Pin_4);
  72.                
  73.                 GPIO_SetBits(GPIOC,  GPIO_Pin_6 | GPIO_Pin_7);
  74.         delay_ms(500);
  75.                 LED0=!LED0;
  76.         led0pwmval=300;
  77.                 TIM_SetCompare2(TIM2,led0pwmval);          
  78.         }
  79. }

复制代码要使PB3 PB4 PC6 PC7输出高电平,但是只有PB3和PB4可以输出,不知道哪里出问题了,希望大家指点错误,谢谢!
0条回答

一周热门 更多>