#include "stm32f10x.h"
void TIM1_Config(void)
{
TIM_TimeBaseInitTypeDef TIM1_TimeBaseStructure;
TIM_OCInitTypeDef TIM1_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //使能TIM1时钟
//GPIO配置为:PA8输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //推免输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //I/O电平翻转速度
GPIO_Init(GPIOA,&GPIO_InitStructure);
//定时器基本配置
TIM1_TimeBaseStructure.TIM_Period=1000-1; //计数值为1000
TIM1_TimeBaseStructure.TIM_Prescaler=3-1; //3分频
TIM1_TimeBaseStructure.TIM_ClockDivision=0; //采样分频0
TIM1_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&TIM1_TimeBaseStructure);
TIM1_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //管脚输出模式
TIM1_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
//PWM1模式通道1
TIM1_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM1_OCInitStructure.TIM_Pulse=250;
TIM_OC1Init(TIM1,&TIM1_OCInitStructure); //初始化TIM1
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1,ENABLE); //使能TIM1在ARR上的预装载寄存器
TIM_ClearFlag(TIM1,TIM_FLAG_CC1);//清除中断
TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE); //开启中断
TIM_CtrlPWMOutputs(TIM1,ENABLE); //PWM主输出使能,即使刹车寄存器的MOE位置1
TIM_Cmd(TIM1,DISABLE); //失能定时器1
}
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=TIM1_CC_IRQn; //输出比较
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int main(void)
{
SystemInit();
TIM1_Config();
NVIC_Config();
TIM_Cmd(TIM1,ENABLE); //开启TIM1,TIM1开始输出PWM
while(1);
}
我是新手求解啊,
|