我是初学者,现在用STM32F1.用定时器1,PA8的口输出PWM,但怎样配置都不能有效果输出,求大神支招 int main(void) { u16 led0pwmval=0; u8 dir=1; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口初始化 LED_Init(); //初始化与LED连接的硬件接口 TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz while(1) { delay_ms(10); if(dir)led0pwmval++; else led0pwmval--; if(led0pwmval>300)dir=0; if(led0pwmval==0)dir=1; LED0_PWM_VAL=led0pwmval; } } void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOD |RCC_APB2Periph_GPIOC |RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP; //推挽输出 GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8; //选择P8口 GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; //50Mhz GPIO_Init(GPIOA,&GPIO_InitStruct); } void time_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; TIM_OCInitTypeDef TIM_OCInitStrue; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //1 TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStrue.TIM_Period =1000; //重装载值 TIM_TimeBaseInitStrue.TIM_Prescaler =72; //预分频 TIM_TimeBaseInitStrue.TIM_ClockDivision= TIM_CKD_DIV1; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStrue); // TIM_OCInitStrue.TIM_OCIdleState TIM_OCInitStrue.TIM_OCMode=TIM_OCMode_PWM2; // TIM_OCInitStrue.TIM_OCNIdleState // TIM_OCInitStrue.TIM_OCNPolarity TIM_OCInitStrue.TIM_OCPolarity=TIM_OCPolarity_High; //输出极性 // TIM_OCInitStrue.TIM_OutputNState TIM_OCInitStrue.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStrue.TIM_Pulse=300; TIM_OC1Init(TIM1,&TIM_OCInitStrue); TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); //预重装载值(可用可不用) TIM_Cmd(TIM1,ENABLE); //使能定时器 TIM_CtrlPWMOutputs(TIM1,ENABLE); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); } |
L6_LEDéè¿PWMæ¸å.zip
下载3.17 MB, 下载次数: 5, 下载积分: ST金币 -1
程序仿真试过了,没问题。PA8,有0、1交替变化。
查看一下你的SystemCoreClock,是不是72M。如果不是72M的话,肯定是不行的。
但你可以把TIM1的分频系数“TIM_TimeBaseInitStrue.TIM_Prescaler =72;”改小,改小后时钟会快一些。
评分
查看全部评分
ST官方代码修改一下就可以了
评分
查看全部评分