找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8606|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32高級(jí)定時(shí)器輸出PWM的簡(jiǎn)單使用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:102668 發(fā)表于 2016-1-16 05:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
先配置好IO
注:TIM1的定時(shí)器通道時(shí)間1到4分別為PA8 PB9 PB10 PB11而互補(bǔ)輸出分別為PB13 PB14 PB15 中止PB12

void GPIO_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//設(shè)置推挽輸出
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PWM波設(shè)為復(fù)用推挽輸出
GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//設(shè)置推挽輸出
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PWM波設(shè)為復(fù)用推挽輸出
GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PWM波設(shè)為復(fù)用推挽輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PWM波設(shè)為復(fù)用推挽輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);
}

再對(duì)TIM1進(jìn)行配置:
void TIM1_PWM_1_init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_DeInit(TIM1);
TIM_TimeBaseStructure.TIM_Prescaler=4000;//預(yù)分頻(時(shí)鐘分頻)72M/4000=18K
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period=144;//裝載值 18K/144=125Hz 向上加144就滿了
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//設(shè)置了時(shí)鐘分割
TIM_TimeBaseStructure.TIM_RepetitionCounter=0x00;//周期數(shù)值
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//初始化TIMX的時(shí)間計(jì)基數(shù)單位

/*channel 1 configuration in pwm mode 通道一的PWM*/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;//PWM模式2
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//正向通道有效
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//方向通道有效
  TIM_OCInitStructure.TIM_Pulse=40;//占空時(shí)間144中有40的時(shí)間為高,互補(bǔ)的輸出正好相反
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//輸出極性
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low;//互補(bǔ)端的輸出極性
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;//空閑狀態(tài)下的非工作狀態(tài)下
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure);//初始化外設(shè)TIMX通道1
//*************************************通道2******************************************//
TIM_OCInitStructure.TIM_Pulse=60;//占空比的初值
TIM_OC2Init(TIM1,&TIM_OCInitStructure);//初始化外設(shè)TIMX通道2
//**************************************通道3********************************************//
TIM_OCInitStructure.TIM_Pulse=70;
TIM_OC3Init(TIM1,&TIM_OCInitStructure);//初始化外設(shè)TIMX通道3
//************************************通道4***********************************************//
TIM_OCInitStructure.TIM_Pulse=80;
TIM_OC2Init(TIM1,&TIM_OCInitStructure);//初始化外設(shè)TIMX通道4
TIM_Cmd(TIM1,ENABLE);
   TIM_CtrlPWMOutputs(TIM1,ENABLE);  
}
//設(shè)置TIM1捕獲寄存器 設(shè)置占空比
void SetT1Pwm1(u16 pulse1,u16 pulse2,u16 pulse3,u16 pulse4 )
{
TIM1->CCR1=pulse1;
TIM1->CCR2=pulse2;
TIM1->CCR3=pulse3;
TIM1->CCR4=pulse4;
}

時(shí)鐘配置
void RCC_Configuration(void)
{
  SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);
}
接下來就是主函數(shù)了
void main()
{
  RCC_Configuration();
GPIO_init();
TIM1_PWM_1_init();
SetT1Pwm1(10,20,30,40);//控制4路PWM的占空比
while(1);
}




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表