本篇博文最後修改時間:2018年05月24日 13:43。
一、簡介
本文以STM32F103編程爲例,介紹STM32F103Timer2 PWM輸出。
二、實驗平臺
電腦平臺:Windows7 64位旗艦
編譯軟件:IAR
硬件平臺:STM32F103CB
三、版權聲明
博主:_懵懂
聲明:此博客僅供參考不做任何商業用途,最終解釋權歸原博主所有。
原文地址:http://blog.csdn.NET/qq_18842031
QQ:951795235
E-mail :[email protected]
懵懂之MCU交流羣:136384801
四、實驗前提
1、在進行本文步驟前,請先安裝IAR Embedded Workbench 5.4版本;準備好STM32F103CB硬件平臺。
五、基礎知識
暫無
六、源碼地址
暫無
七、關聯文章
暫無
八、實驗內容
1.初始化Timer2
void Hal_Init_Pwm(uint16 period,uint16 Prescaler)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /*開定時器2時鐘*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /*GPIO時鐘開啓*/
/*引腳配置*/
GPIO_InitTypeDef GPIO_InitStructure; /*配置GPIO*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*複用輸出*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*配置TIMER2*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /*配置TIMER2*/
TIM_DeInit(TIM2); /*初始化定時器2*/
TIM_TimeBaseStructure.TIM_Period = period; /*重裝值 計數到最大爲3600-1 然後從0開始*/
TIM_TimeBaseStructure.TIM_Prescaler = Prescaler; /*分頻係數*/
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; /*時鐘分割*/
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*向上計數*/
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*配置TIMER2PWM輸出*/
TIM_OCInitTypeDef TIM_OCInitStructure; /*配置TIMER2PWM輸出*/
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /*PWM2模式輸出*/
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /*比較輸出使能*/
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /*輸出極性高 輸出高電平*/
/*通道1*/
// TIM_OCInitStructure.TIM_Pulse =40*36;
// TIM_OC1Init(TIM2, &TIM_OCInitStructure);
// TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*通道2*/
TIM_OCInitStructure.TIM_Pulse =0; /*設置佔空比*/
TIM_OC2Init(TIM2, &TIM_OCInitStructure); /*初始化外設TIMx 通道*/
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);/*CH1預裝載使能*/
/*通道3*/
// TIM_OCInitStructure.TIM_Pulse =90*36;
// TIM_OC3Init(TIM2, &TIM_OCInitStructure);
// TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*通道4*/
// TIM_OCInitStructure.TIM_Pulse =0*36;
// TIM_OC4Init(TIM2, &TIM_OCInitStructure);
// TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE); /*使能TIMx在ARR上的預裝載寄存器*/
TIM_Cmd(TIM2, ENABLE); /*使能定時器2*/
}
2.編寫主函數
void main(void)
{
Init_Clock(); /*初始化時鐘*/
Hal_Init_Pwm(64000-1,0); /* F = PLL / (64000-1) */
TIM_SetCompare2(TIM2,50*640); /*輸出佔空比爲50%*/
while(1);
}