1.TIMER輸出PWM基本概念
脈沖寬度調(diào)制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù)。簡單一點,就是對脈沖寬度的控制。一般用來控制步進電機的速度等等。
STM32的定時器除了TIM6和TIM7之外,其他的定時器都可以用來產(chǎn)生PWM輸出,其中高級定時器TIM1和TIM8可以同時產(chǎn)生7路的PWM輸出,而通用定時器也能同時產(chǎn)生4路的PWM輸出。
1.1PWM輸出模式
STM32的PWM輸出有兩種模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位確定的(“110”為模式1,“111”為模式2)。模式1和模式2的區(qū)別如下:
110:PWM模式1-在向上計數(shù)時,一旦TIMx_CNT 111:PWM模式2-在向上計數(shù)時,一旦TIMx_CNT 由此看來,模式1和模式2正好互補,互為相反,所以在運用起來差別也并不太大。 而從計數(shù)模式上來看,PWM也和TIMx在作定時器時一樣,也有向上計數(shù)模式、向下計數(shù)模式和中心對齊模式,關(guān)于3種模式的具體資料,可以查看《STM32參考手冊》的“14.3.9 PWM模式”一節(jié),在此就不詳細贅述了。 1.2PWM輸出管腳 PWM的輸出管腳是確定好的,具體的引腳功能可以查看《STM32參考手冊》的“8.3.7定時器復(fù)用功能重映射”一節(jié)。在此需要強調(diào)的是,不同的TIMx有分配不同的引腳,但是考慮到管腳復(fù)用功能,STM32提出了一個重映像的概念,就是說通過設(shè)置某一些相關(guān)的寄存器,來使得在其他非原始指定的管腳上也能輸出PWM。但是這些重映像的管腳也是由參考手冊給出的。比如說TIM3的第2個通道,在沒有重映像的時候,指定的管腳是PA.7,如果設(shè)置部分重映像之后,TIM3_CH2的輸出就被映射到PB.5上了,如果設(shè)置了完全重映像的話,TIM3_CH2的輸出就被映射到PC.7上了。 1.3PWM輸出信號 PWM輸出的是一個方波信號,信號的頻率是由TIMx的時鐘頻率和TIMx_ARR預(yù)分頻器所決定的,具體設(shè)置方法在前面一個學(xué)習(xí)筆記中有詳細的交代。而輸出信號的占空比則是由TIMx_CRRx寄存器確定的。其公式為“占空比=(TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通過向CRR中填入適當?shù)臄?shù)來輸出自己所需的頻率和占空比的方波信號。 2.TIMER輸出PWM實現(xiàn)步驟 1.設(shè)置RCC時鐘; 2.設(shè)置GPIO時鐘; 3.設(shè)置TIMx定時器的相關(guān)寄存器; 4.設(shè)置TIMx定時器的PWM相關(guān)寄存器。 第1步設(shè)置RCC時鐘已經(jīng)在前文中給出了詳細的代碼,在此就不再多說了。需要注意的是通用定時器TIMx是由APB1提供時鐘,而GPIO則是由APB2提供時鐘。注意,如果需要對PWM的輸出進行重映像的話,還需要開啟引腳復(fù)用時鐘AFIO。 第2步設(shè)置GPIO時鐘時,GPIO模式應(yīng)該設(shè)置為復(fù)用推挽輸出GPIO_Mode_AF_PP,如果需要引腳重映像的話,則需要用GPIO_PinRemapConfig()函數(shù)進行設(shè)置。 第3步設(shè)置TIMx定時器的相關(guān)寄存器時,和前一篇學(xué)習(xí)筆記一樣,設(shè)置好相關(guān)的TIMx的時鐘和技術(shù)模式等等。具體設(shè)置參看“TIMER基本定時功能”的學(xué)習(xí)筆記。 第4步設(shè)置PWM相關(guān)寄存器,首先要設(shè)置PWM模式(默認情況下PWM是凍結(jié)的),然后設(shè)置占空比(根據(jù)前面所述公式進行計算),再設(shè)置輸出比較極性:當設(shè)置為High時,輸出信號不反相,當設(shè)置為Low時,輸出信號反相之后再輸出。最重要是是要使能TIMx的輸出狀態(tài)和使能TIMx的PWM輸出使能。 相關(guān)設(shè)置完成之后,就可以通過TIM_Cmd()來打開TIMx定時器,從而得到PWM輸出了。 3.TIMER輸出PWM源代碼 由于我現(xiàn)在手上的奮斗開發(fā)板是將PB.5接到LED上,因此需要使用TIM3的CH2通道,并且要進行引腳重映像。打開TIM3之后,PWM輸出,使得LED點亮,通過改變PWM_cfg()中的占空比可以調(diào)節(jié)LED的亮度。 #include "stm32f10x_lib.h" void RCC_cfg(); void GPIO_cfg(); void TIMER_cfg(); void PWM_cfg(); //占空比,取值范圍為0-100 int dutyfactor = 50; int main() { int Temp; RCC_cfg(); GPIO_cfg(); TIMER_cfg(); PWM_cfg(); //使能TIM3計時器,開始輸出PWM TIM_Cmd(TIM3, ENABLE); while(1); } void RCC_cfg() { //定義錯誤狀態(tài)變量 ErrorStatus HSEStartUpStatus; //將RCC寄存器重新設(shè)置為默認值 RCC_DeInit(); //打開外部高速時鐘晶振 RCC_HSEConfig(RCC_HSE_ON); //等待外部高速時鐘晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { //設(shè)置AHB時鐘(HCLK)為系統(tǒng)時鐘 RCC_HCLKConfig(RCC_SYSCLK_Div1); //設(shè)置高速AHB時鐘(APB2)為HCLK時鐘 RCC_PCLK2Config(RCC_HCLK_Div1); //設(shè)置低速AHB時鐘(APB1)為HCLK的2分頻 RCC_PCLK1Config(RCC_HCLK_Div2); //設(shè)置FLASH代碼延時 FLASH_SetLatency(FLASH_Latency_2); //使能預(yù)取指緩存 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //設(shè)置PLL時鐘,為HSE的9倍頻8MHz * 9 = 72MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //使能PLL RCC_PLLCmd(ENABLE); //等待PLL準備就緒 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //設(shè)置PLL為系統(tǒng)時鐘源 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //判斷PLL是否是系統(tǒng)時鐘 while(RCC_GetSYSCLKSource() != 0x08); } //開啟TIM3的時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //開啟GPIOB的時鐘和復(fù)用功能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); } void GPIO_cfg() { GPIO_InitTypeDef GPIO_InitStructure; //部分映射,將TIM3_CH2映射到PB5 // GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //選擇引腳5 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //輸出頻率最大50MHz GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //復(fù)用推挽輸出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); } void TIMER_cfg() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //重新將Timer設(shè)置為缺省值 TIM_DeInit(TIM3); //采用內(nèi)部時鐘給TIM3提供時鐘源 TIM_InternalClockConfig(TIM3); //預(yù)分頻系數(shù)為0,即不進行預(yù)分頻,此時TIMER的頻率為72MHz TIM_TimeBaseStructure.TIM_Prescaler = 0; //設(shè)置時鐘分割 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設(shè)置計數(shù)器模式為向上計數(shù)模式 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //設(shè)置計數(shù)溢出大小,每計7200個數(shù)就產(chǎn)生一個更新事件,即PWM的輸出頻率為10kHz TIM_TimeBaseStructure.TIM_Period = 7200 - 1; //將配置應(yīng)用到TIM3中 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); } void PWM_cfg() { TIM_OCInitTypeDef TimOCInitStructure; //設(shè)置缺省值 TIM_OCStructInit(&TimOCInitStructure); //PWM模式1輸出 TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //設(shè)置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100% TimOCInitStructure.TIM_Pulse = dutyfactor * 7200 / 100; //TIM輸出比較極性高 TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //使能輸出狀態(tài) TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //TIM3的CH2輸出 TIM_OC2Init(TIM3, &TimOCInitStructure); //設(shè)置TIM3的PWM輸出為使能 TIM_CtrlPWMOutputs(TIM3,ENABLE); }
上一篇:STM32固件庫實現(xiàn)led亮滅閃爍和音頻發(fā)生器設(shè)計
下一篇:STM32自學(xué)筆記——定時器及PWM輸出
推薦閱讀
史海拾趣
Accelink Technologies Co Ltd是一家中國領(lǐng)先的光通信器件和子系統(tǒng)供應(yīng)商,以下是該公司發(fā)展的五個相關(guān)故事:
公司成立和起步階段: Accelink Technologies Co Ltd成立于2001年,總部位于中國安徽省合肥市。公司最初專注于光通信領(lǐng)域的研發(fā)和生產(chǎn),致力于提供高性能的光通信器件和解決方案。起步階段,公司的產(chǎn)品主要包括光纖光柵、光纖耦合器、光開關(guān)等。
技術(shù)創(chuàng)新和產(chǎn)品拓展: 隨著市場需求的增長和技術(shù)進步,Accelink不斷進行技術(shù)創(chuàng)新,并逐步拓展產(chǎn)品線。公司推出了包括光模塊、光收發(fā)器、光放大器等在內(nèi)的多種光通信子系統(tǒng)產(chǎn)品,為客戶提供了更全面的解決方案。
市場擴張和國際合作: Accelink積極拓展國內(nèi)外市場,并與全球各地的客戶建立了合作關(guān)系。公司的產(chǎn)品被廣泛應(yīng)用于光網(wǎng)絡(luò)建設(shè)、數(shù)據(jù)中心、無線通信等領(lǐng)域,贏得了國內(nèi)外客戶的認可。同時,Accelink還與國際知名光通信企業(yè)展開合作,共同推動技術(shù)創(chuàng)新和市場發(fā)展。
持續(xù)投入研發(fā)和創(chuàng)新: Accelink不斷加大研發(fā)投入,致力于技術(shù)創(chuàng)新和產(chǎn)品升級。公司設(shè)立了研發(fā)中心,擁有一支技術(shù)精湛的團隊,致力于開發(fā)新產(chǎn)品和解決方案,滿足客戶不斷變化的需求。同時,Accelink還與國內(nèi)外高校和研究機構(gòu)合作,共同推動光通信技術(shù)的發(fā)展。
未來發(fā)展展望: Accelink將繼續(xù)致力于光通信技術(shù)的研發(fā)和應(yīng)用,不斷推出更先進、更可靠的產(chǎn)品和解決方案,滿足客戶在光網(wǎng)絡(luò)建設(shè)和數(shù)據(jù)傳輸方面的需求。公司將加強國際市場拓展,拓展海外業(yè)務(wù)版圖,同時不斷提升自身的技術(shù)實力和市場競爭力,為光通信行業(yè)的發(fā)展做出更大的貢獻。
在國內(nèi)市場取得一定成功后,ERA Transformers公司開始將目光投向國際市場。為了打開國際市場,公司積極參加國際電子展會和交流活動,與多家國際知名企業(yè)建立了聯(lián)系。通過深入了解國際市場需求和標準,公司對產(chǎn)品進行了針對性的改進和優(yōu)化。經(jīng)過一段時間的努力,ERA Transformers公司的產(chǎn)品成功打入了國際市場,并獲得了良好的銷售業(yè)績和口碑。
隨著智能手機市場的迅速崛起,Equator敏銳地捕捉到了這一市場機會。從XX年代后期開始,公司逐漸將業(yè)務(wù)重心轉(zhuǎn)向手機圖像處理領(lǐng)域。通過與手機廠商的合作,Equator成功地將其先進的視頻處理技術(shù)應(yīng)用于智能手機中,顯著提升了手機的顯示效果和用戶體驗。這一轉(zhuǎn)型不僅為Equator帶來了豐厚的回報,也進一步鞏固了其在電子行業(yè)的地位。
近年來,隨著科技的快速發(fā)展和電子行業(yè)的變革,EREM公司也面臨著巨大的挑戰(zhàn)。為了應(yīng)對這些變革,EREM積極調(diào)整戰(zhàn)略方向,加大研發(fā)投入,推出了一系列符合市場需求的新產(chǎn)品。同時,EREM還注重人才培養(yǎng)和團隊建設(shè),打造了一支高效、專業(yè)的團隊,為公司的發(fā)展提供了有力保障。
在電感器領(lǐng)域取得成功后,F(xiàn)astron并沒有止步不前。相反,公司積極拓展業(yè)務(wù)領(lǐng)域,實現(xiàn)了多元化發(fā)展。除了電感器業(yè)務(wù)外,F(xiàn)astron還成功運營了大型鈑金生產(chǎn)業(yè)務(wù),專門生產(chǎn)精密金屬外殼和機電組件。此外,F(xiàn)astron集團還擁有位于德國的Rapid Biomedical公司,為MRI掃描儀定制MR線圈,進一步拓寬了公司的業(yè)務(wù)范圍。
隨著產(chǎn)品的不斷成熟和市場的認可,Diotec開始積極拓展國內(nèi)外市場。公司加強與國際知名電子企業(yè)的合作,不斷提升產(chǎn)品的品質(zhì)和技術(shù)水平。同時,Diotec還注重品牌建設(shè),通過一系列的市場推廣活動,提高了品牌的知名度和美譽度。這些努力使Diotec的產(chǎn)品在電子行業(yè)中占據(jù)了重要的地位,成為眾多客戶的首選供應(yīng)商。
如果將電腦ATX電源改裝成可調(diào)的直流穩(wěn)壓電源? 手頭有一個ATX2.0的電腦電源,如果將其改裝成可調(diào)的直流穩(wěn)壓電源??? 我想配1個11檔的波段開關(guān)來選擇輸出電壓,有無典型的電路圖,從哪里下手改呢?取樣電阻在哪里呢?… 查看全部問答∨ |
基于ZigBee網(wǎng)絡(luò)的無線智能照明系統(tǒng)設(shè)計 目前市場上有多種智能家居情景照明的解決方案,其中利用ZigBee技術(shù)組網(wǎng)配合MCU控制的方案因其成本低、功耗低和易于實現(xiàn)等優(yōu)點得到廣泛應(yīng)用。本文提出了一種利用ZigBee技術(shù)組建無線網(wǎng)絡(luò)配合ARM9內(nèi)核MCU,利用TCP/IP協(xié)議進行通信,可以對家居中每一盞 ...… 查看全部問答∨ |
偶爾重看圖形化書想到的問題: 陰極射線管的刷新頻率大約為50赫茲,在逐行掃描過程中,它每秒掃描整個屏幕50次;假定一個時刻只有一個電子束,屏幕大小為1000*1000即1M個點,那么1M個點全部掃描完的時間為20毫秒,即每個點掃描時間為0.02微秒,陰 ...… 查看全部問答∨ |
|
我現(xiàn)在要使用SIL9135這個芯片去做視頻處理,可是我現(xiàn)在對這個芯片主要能進行的操作還沒個大概的了解。哪位做過的,說說看你們用這個一般都是處理些啥,如何控制?… 查看全部問答∨ |
為什么wince的release版本能編譯通過,而debug版本就報錯! 請問各位高手,PB5.0 在編譯系統(tǒng)時,release版本能通過,而debug版本卻有報錯,是什么原因。另外,在編譯系統(tǒng)之前,需要配置那些參數(shù)才能使用wince 提供一些遠程工具,在網(wǎng)上找了很長時間也沒有找到,謝謝!… 查看全部問答∨ |
短信二次開發(fā),設(shè)置短信自動提示,指令A(yù)T+CNMI指令不支持?老返回error,各位可有此經(jīng)歷?… 查看全部問答∨ |
在windows fat32文件系統(tǒng)中,建立目錄項超過一個簇時,windows不能顯示新簇中的文件夾或文件(我自己的程序可以)。而且這個時候在windows上建立新文件的話,其回將原來分配的簇修改掉: 如:我建立文件并分配新簇后,fat表如下: F8 FF FF 0F&nb ...… 查看全部問答∨ |
基于ARm7 ucos ii系統(tǒng)下TCP/IP并發(fā)訪問 哪位仁兄做過ucos ii系統(tǒng)下的TCP/IP并發(fā)訪問的相關(guān)研究,我有幾個問題想要請教。… 查看全部問答∨ |
單片機開發(fā)設(shè)計廣泛的應(yīng)用領(lǐng)域 單片機設(shè)計廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域,大致可分如下幾個范疇。下面就由卓躍教育為您做一個介紹。   ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 座椅、天窗、電動尾門應(yīng)用 國產(chǎn)車規(guī)級高壓霍爾效應(yīng)傳感器推薦
- 突發(fā)!又一車企車機“崩了”
- 寧德時代為陳立泉院士頒發(fā)“卓越貢獻獎”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會重點
- 2025年1-4月ADAS供應(yīng)商裝機量排行榜:頭部集中與國產(chǎn)突圍并存
- 國內(nèi)飛行汽車無線通信測試成功,通信安全新突破
- SPAD席卷車載激光雷達市場
- 大聯(lián)大品佳集團推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬級像素大燈方案
- 哈曼推出采用三星Neo QLED技術(shù)的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術(shù) 提升車輛安全性和用戶體驗
- 貿(mào)澤電子贊助面向青少年的FIRST機器人競賽助力培養(yǎng)下一代工程師
- 單片機模塊化編程的原則有哪些
- 51單片機自定義函數(shù)實現(xiàn)任意串口的printf()
- 單片機不支持printf函數(shù),實現(xiàn)幾個常用串口打印函數(shù)
- 關(guān)于51單片機使用printf進行串口調(diào)試的方法
- 晶圓測試大廠京元電子12名員工確診新冠 將對6000名員快篩
- 中國電科(北京)集成電路核心裝備項目主體結(jié)構(gòu)封頂了
- 晶圓大廠漲價“亂象”曝光:加錢≠分到產(chǎn)能
- 拜登的芯片政府補貼法案就是老套的政治把戲
- 印度手機市場2021年下半年將同比降10%