//TIM1 PWM部分初始化
//PWM輸出初始化
//arr:自動重裝值
//psc:時鐘預(yù)分頻數(shù)
void TIM1_PWM_Init(u32 arr,u32 psc)
{
//此部分需手動修改IO口設(shè)置
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //TIM1時鐘使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能PORTA時鐘
//復(fù)用不能寫成下面,會出問題
//GPIO_PinAFConfig(GPIOA,GPIO_PinSource8|GPIO_PinSource11,GPIO_AF_TIM1); //GPIO復(fù)用為定時器1
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1); //復(fù)用GPIOA_Pin8為TIM1_Ch1,
GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_TIM1);//復(fù)用GPIOA_Pin11為TIM1_Ch4,注意沒有CH4N
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11; //GPIO
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //復(fù)用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽復(fù)用輸出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化P
TIM_TimeBaseStructure.TIM_Prescaler=psc; //定時器分頻
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數(shù)模式
TIM_TimeBaseStructure.TIM_Period=arr; //自動重裝載值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
//TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;//默認就為0
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);//初始化定時器1
//初始化TIM1 PWM模式
//PWM 模式 1–– 在遞增計數(shù)模式下,只要 TIMx_CNT TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1為正常占空比模式,PWM2為反極性模式 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //輸出極性:TIM輸出比較極性低,有效電平為低電平 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//在空閑時輸出 低,這里的設(shè)置可以改變TIM_OCPolarity 如果沒這句,第1通道有問題 TIM_OCInitStructure.TIM_Pulse = 2000; //輸入通道1 CCR1(占空比數(shù)值) TIM_OC1Init(TIM1, &TIM_OCInitStructure); //Ch1初始化 TIM_OCInitStructure.TIM_Pulse = 5000; TIM_OC4Init(TIM1, &TIM_OCInitStructure);//通道4 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR1上的預(yù)裝載寄存器,CCR自動裝載默認也是打開的 TIM_ARRPreloadConfig(TIM1,ENABLE);//ARPE使能 TIM_Cmd(TIM1, ENABLE); //使能TIM1 TIM_CtrlPWMOutputs(TIM1, ENABLE);//使能TIM1的PWM輸出,TIM1與TIM8有效,如果沒有這行會問題 }
上一篇:STM32的PWM波產(chǎn)生的問題總結(jié)
下一篇:LPC17xx的MCPWM周期設(shè)置與計算
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 保障工業(yè)核心命脈:深度解讀工業(yè)交換機QoS的“智能流量治理”之道
- WAIC 直擊|Arm 鄒挺:突破基礎(chǔ)設(shè)施、數(shù)據(jù)安全與人才三重挑戰(zhàn),釋放 AI 發(fā)展新潛能
- 鎧俠第九代 BiCS FLASH? 512Gb TLC 存儲器開始送樣
- 基于PPEC32系列芯片的10kW純正弦波車載逆變器應(yīng)用方案
- 新唐科技推出全新KM1M4BF6x系列單電機控制MCU
- 伺服電機中的回原點方式
- 芯科集成CX3288系列車規(guī)MCU在旋轉(zhuǎn)變壓器的應(yīng)用
- AI玩具DC-DC芯片,安全與成本雙突圍
- 訂單暴增800%!消費芯片新風(fēng)口:東北裝空調(diào)
- 機器人也能純視覺控制?MIT華人博士團隊登上Nature主刊