久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > stm32的(de)PWM實(shi)現過程(cheng)

stm32的PWM實現過(guo)程 時間:2018-01-08      來源:未知

PWM是定(ding)(ding)時(shi)器(qi)擴展出來的(de)一個(ge)功能(neng)(本質(zhi)上是使用一個(ge)比較計數器(qi)的(de)功能(neng)),配置過程一般為選(xuan)定(ding)(ding)定(ding)(ding)時(shi)器(qi)、復(fu)用GPIO口、選(xuan)擇通(tong)道(傳入比較值)、使能(neng)相(xiang)應(ying)系統時(shi)鐘(zhong)、設定(ding)(ding)相(xiang)應(ying)的(de)預分頻、計數周期、PWM模式(有兩(liang)種)、電平極性(xing)等。具體介紹如下:

一(yi)、定(ding)時(shi)器的特點(dian)歸類

STM32中一共有11個(ge)定(ding)時器(qi),即 2個(ge)看門(men)狗定(ding)時器(qi)、1個(ge)系統嘀嗒定(ding)時器(qi)(SysTick)及8個(ge)Timer定(ding)時器(qi),詳情(qing)如下表所示。

定時器 計數器分辨率 計數器類型 預分頻系數 產生DMA請求 捕獲/比較通道 互補輸出
TIM1
TIM8
16位 向上,向下,向上/向下 1-65536之間的任意數 可以 4
TIM2
TIM3
TIM4
TIM5
16位 向上,向下,向上/向下 1-65536之間的任意數 可以 4 沒有
TIM6
TIM7
16位 向上 1-65536之間的任意數 可以 0 沒有










二、定時(shi)器所在時(shi)鐘線路(lu)

stm32的PWM實現過程

三、PWM波形產生的原理

通用定時器可以(yi)利用GPIO引腳進行脈(mo)沖輸出,在配(pei)置為比較(jiao)輸出、PWM輸出功(gong)能時,捕獲/比較(jiao)寄(ji)存(cun)器TIMx_CCR被用作(zuo)比較(jiao)功(gong)能,下面把它簡稱(cheng)為比較(jiao)寄(ji)存(cun)器。

這里直接舉(ju)例說(shuo)明定(ding)時(shi)(shi)(shi)器(qi)的PWM輸出工作過(guo)程:若配置(zhi)(zhi)脈沖計(ji)數(shu)器(qi)TIMx_CNT為向上計(ji)數(shu),而重載寄存器(qi)TIMx_ARR被配置(zhi)(zhi)為N,即(ji)TIMx_CNT的當前計(ji)數(shu)值(zhi)數(shu)值(zhi)X在(zai)TIMxCLK時(shi)(shi)(shi)鐘源的驅動下不斷累加,當TIMx_CNT的數(shu)值(zhi)X大于N時(shi)(shi)(shi),會(hui)重置(zhi)(zhi)TIMx_CNT數(shu)值(zhi)為0重新計(ji)數(shu)。

四、STM32產(chan)生PWM的配置方法(fa)

1、配置GPIO口:

查(cha)看具(ju)體的GPIO引腳,以及查(cha)看GPIO口的復(fu)用功能(參考手冊),我(wo)們(men)這塊用的是PC6。

a.定時器1的引(yin)腳(jiao)復用(yong)功能映(ying)像(xiang):

stm32的PWM實現過程

b.定時器(qi)2的引腳(jiao)復用功(gong)能映(ying)像:

stm32的PWM實現過程

c.定時器3的(de)引(yin)腳(jiao)復用功能映(ying)像:

stm32的PWM實現過程

d.定時器4的引腳復用功能(neng)映像:

stm32的PWM實現過程

根據以上重映像(xiang)表,我們使(shi)用定(ding)時器(qi)3的(de)通(tong)道2作為PWM的(de)輸(shu)出引(yin)腳,所以需要對PB5引(yin)腳進行配置,對IO口操作代碼:

GPIO_InitTypeDef GPIO_InitStructure;//定義結構(gou)體

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//使能(neng)GPIO外(wai)設和(he)AFIO復用(yong)功能(neng)模塊時鐘

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //選(xuan)擇(ze)Timer3完全(quan)重映像

//選擇定時器3的通(tong)道(dao)1作為PWM的輸出(chu)引腳TIM3_CH1->PB6 GPIOC.6

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM_CH1

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽功能

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &;GPIO_InitStructure);//初始化引(yin)腳

2、初(chu)始化(hua)定(ding)時(shi)器

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定義初始(shi)化結構(gou)體

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定時(shi)器3時(shi)鐘

//初始化TIM3

TIM_TimeBaseStructure.TIM_Period = 255; //自(zi)動(dong)重裝載(zai)寄(ji)存器的值

TIM_TimeBaseStructure.TIM_Prescaler =7199; //TIMX預分頻的值(zhi)

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //時鐘分割

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向(xiang)上(shang)計數

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據以上(shang)功能對定(ding)時器進行(xing)初始化

3、設置TIM3_CH1的PWM模式,使能TIM3的CH1輸出

TIM_OCInitTypeDef TIM_OCInitStructure;//定義結構體

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//選擇定時器模(mo)(mo)式,TIM脈沖寬度(du)調(diao)制模(mo)(mo)式1

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比較輸出(chu)使能(neng)

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//輸出比較極性低

TIM_OC1Init(TIM3, &TIM_OCInitStructure);//根據結(jie)構體信息進行初始化(hua)

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能定時器TIM2在(zai)CCR1上的預裝載(zai)值(zhi)

4、使能定(ding)時(shi)器3

TIM_Cmd(TIM3, ENABLE); //使能定時(shi)器TIM3

5、使(shi)用PWM

經過上述(shu)操作,我們(men)只需調用(yong)函數(如下)給通道1傳值即可實現(xian)PWM波形正常(chang)輸出。

static void PWM_Channel1_Out(u16 pwm)

{

TIM3->CCR1 = pwm;

}

上一篇:C語言常用排序算法

下一篇:Linux底層驅動開發需要學習哪些內容

熱(re)點(dian)文章推(tui)薦
華清學員就業榜(bang)單
高(gao)薪學員經(jing)驗分享
熱點新(xin)聞推薦
前臺專線:010-82525158 企(qi)業培(pei)訓洽談專線:010-82525379 院校合作洽談專(zhuan)線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部