先上接线图:
简单看下PWM:
我们要使用内部时钟作为时钟源通过配置PSC,ARR和CCR产生PWM方波。首先是开引脚时钟和定时器时钟,接着引脚初始化,引脚经过定时器TIM2,被复用为TIM2_CH1,所以输出模式要选复用推挽输出模式,引脚初始化完接着配置时基单元,接着运行控制使能。 最后是输出比较通道初始化,根据TIM2_CH1选择输出比较通道1。
#include "stm32f10x.h" // Device header
void Timer_Init()//TIM2
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//引脚被TIM复用,用复用推挽输出模式
GPIO_Init(GPIOA,&GPIO_InitStructure);
TIM_InternalClockConfig(TIM2);//选择定时器模式
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//时基单元
TIM_TimeBaseInitStructure.TIM_Prescaler=720-1;//PSC
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period=100-1;//ARR
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//高级计数器配置
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
TIM_Cmd(TIM2,ENABLE);//运行控制
TIM_OCInitTypeDef TIM_OCInitStructute;//输出比较配置
TIM_OCStructInit(&TIM_OCInitStructute);
TIM_OCInitStructute.TIM_OCMode=TIM_OCMode_PWM1;//输出比较模式
TIM_OCInitStructute.TIM_Pulse=0;//CCR
TIM_OCInitStructute.TIM_OCPolarity=TIM_OCPolarity_High;//极性选择
TIM_OCInitStructute.TIM_OutputState=TIM_OutputState_Enable;//输出使能
TIM_OC1Init(TIM2,&TIM_OCInitStructute);//PA0复用为TIM2的TIM_CH1通道
}
void TIM2_CCR_Campare(uint16_t Campare)
{
TIM_SetCompare1(TIM2,Campare);
}
主函数略,以上内容仅供参考,谢谢!