娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月21日(星期一)

2021年04月21日 | STM32 PWM 輸出

發布者:虛擬現實迷 來源: eefocus關鍵字:STM32  PWM  輸出 手機看文章 掃描二維碼
隨時隨地手機看文章

簡介:脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。簡單一點,就是對脈沖寬度的控制。STM32 的定時器除了 TIM6 和 7。其他的定時器都可以用來產生 PWM 輸出。其中高級定時器 TIM1 和 TIM8 可以同時產生多達 7 路的 PWM 輸出。


而通用定時器也能同時產生多達 4路的 PWM 輸出,這樣,STM32 最多可以同時產生 30 路 PWM 輸出!首先要提到的是,PWM 相關的函數設置在庫函數文件 stm32f10x_tim.h 和 stm32f10x_tim.c文件中。


1)開啟 TIM3 時鐘以及復用功能時鐘,配置 PB5 為復用輸出。


要使用 TIM3,我們必須先開啟 TIM3 的時鐘,這里我們還要配置 PB5 為復用輸出,這是因為 TIM3_CH2 通道將重映射到 PB5 上,此時, PB5屬于復用功能輸出。庫函數使能 TIM3 時鐘的方法是:


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


庫函數設置 AFIO 時鐘的方法是:


RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //復用時鐘使能


2)設置 TIM3_CH2 重映射到 PB5 上。


因為 TIM3_CH2 默認是接在 PA7 上的,所以我們需要設置 TIM3_REMAP 為部分重映射(通過 AFIO_MAPR 配置),讓 TIM3_CH2 重映射到 PB5 上面。在庫函數函數里面設置重映射的函數是:


void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);


STM32 重映射只能重映射到特定的端口。 第一個入口參數可以理解為設置重映射的類型,比如 TIM3 部分重映射入口參數為GPIO_PartialRemap_TIM3,這點可以顧名思義了。 所以 TIM3 部分重映射的庫函數實現方法是:


GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);


3)初始化 TIM3,設置 TIM3 的 ARR 和 PSC。


在開啟了 TIM3 的時鐘之后,我們要設置 ARR 和 PSC 兩個寄存器的值來控制輸出 PWM 的周期。調用的格式為:


TIM_TimeBaseStructure.TIM_Period = arr; //設置自動重裝載值


TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置預分頻值


TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim


TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數模式


TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據指定的參數初始化 TIMx 的


4)設置 TIM3_CH2 的 PWM 模式,使能 TIM3 的 CH2 輸出。


在庫函數中,PWM 通道設置是通過函數 TIM_OC1Init()~TIM_OC4Init()來設置的, 不同的通道的設置函數不一樣, 這里我們使用的是通道 2,所以使用的函數是 TIM_OC2Init()。


void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);


直接來看看結構體 TIM_OCInitTypeDef的定義:




1.typedef struct


2.{


3.uint16_t TIM_OCMode; //設置模式是 PWM 還是輸出比較


4.uint16_t TIM_OutputState; //設置比較輸出使能,也就是使能 PWM 輸出到端口。


5.uint16_t TIM_OutputNState;


6.uint16_t TIM_Pulse;


7.uint16_t TIM_OCPolarity; //設置極性是高還是低。


8.uint16_t TIM_OCNPolarity;


9.uint16_t TIM_OCIdleState;


10.uint16_t TIM_OCNIdleState;


11.} TIM_OCInitTypeDef;

其他的參數 TIM_OutputNState,TIM_OCNPolarity,TIM_OCIdleState 和 TIM_OCNIdleState 是高級定時器 TIM1 和 TIM8 才用到的。


方法是:




1.TIM_OCInitTypeDef TIM_OCInitStructure;


2.TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇 PWM 模式 2


3.TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能


4.TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性高


5.TIM_OC2Init(TIM3, &TIM_OCInitStructure);

5)使能 TIM3。


在完成以上設置了之后,我們需要使能 TIM3。使能 TIM3 的方法前面已經講解過:


TIM_Cmd(TIM3, ENABLE); //使能 TIM3


6)修改 TIM3_CCR2 來控制占空比。


最后,在經過以上設置之后,PWM 其實已經開始輸出了,只是其占空比和頻率都是固定的,而我們通過修改 TIM3_CCR2 則可以控制 CH2 的輸出占空比。在庫函數中,修改 TIM3_CCR2 占空比的函數是:


void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);


理所當然,對于其他通道,分別有一個函數名字,函數格式為 TIM_SetComparex(x=1,2,3,4)。


通過以上 6 個步驟,我們就可以控制 TIM3 的 CH2 輸出 PWM 波了。




1./**


2. * TIM3 PWM部分初始化


3. * PWM輸出初始化


4. * arr:自動重裝值


5. * psc:時鐘預分頻數


6. */


7.void TIM3_PWM_Init(u16 arr,u16 psc)


8.{


9. GPIO_InitTypeDef GPIO_InitStructure;


10. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


11. TIM_OCInitTypeDef TIM_OCInitStructure;


12.


13. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /*使能定時器3時鐘*/


14.// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); /*使能GPIO外設和AFIO復用功能模塊時鐘*/


15.


16. /*設置該引腳為復用輸出功能,輸出TIM3 CH2的PWM脈沖波形 GPIOB.5*/


17. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;


18. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*復用推挽輸出*/


19. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


20. GPIO_Init(GPIOB, &GPIO_InitStructure); /*初始化GPIO*/


21.


22. GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); /*Timer3部分重映射 TIM3_CH2->PB5*/


23. /*初始化TIM3*/


24. TIM_TimeBaseStructure.TIM_Period = arr; /*周期的值*/


25. TIM_TimeBaseStructure.TIM_Prescaler = psc; /*預分頻值*/


26. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /*設置時鐘分割:TDTS = Tck_tim*/


27. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*/TIM向上計數模式*/


28. TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); /*初始化TIMx*/


29.


30. /*初始化TIM3 Channel2 PWM模式*/


31. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /*選擇定時器模式:TIM脈沖寬度調制模式2*/


32. TIM_OCInitStructure.TIM_OutputState = TIM_OutputNState_Enable; /*比較輸出使能*/


33. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /*輸出極性:TIM輸出比較極性高*/


34. TIM_OC2Init(TIM3, &TIM_OCInitStructure); /*初始化外設*/


35. TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); /*使能TIM3在CCR2上的預裝載寄存器*/


36.


37. TIM_Cmd(TIM3,ENABLE); /*使能TIM3*/


38.}




1.int main(void)


2.{


3. u16 led0pwmval=0;


4. u8 dir=1;


5. SYS_Init(); //??????????


6.


7. while(1)


8. {


9. delay_ms(50);


10. if(dir)


11. led0pwmval++;


12. else


13. led0pwmval--;


14.


15. if(led0pwmval > 300)


16. dir = 0;


17. else if(led0pwmval == 0)


18. dir = 1;


19. TIM_SetCompare2(TIM3,led0pwmval);


20. }


21.}


關鍵字:STM32  PWM  輸出 引用地址:STM32 PWM 輸出

上一篇:關于STM32的USB問題
下一篇:IAR環境下STM32+IAP方案的實現

推薦閱讀

近日,百度向合作伙伴正式發布Apollo(阿波羅)2.5軟件平臺,在發布會現場,百度員工向媒體表示,美團和百度已經達成協議,計劃率先在雄安試驗無人駕駛送餐。公開信息顯示,在2016年,美團就成立了W項目組,專注于研發特定場景下的無人車配送。到2018年3月24日,美團點評CEO王興就在“中國發展高層論壇2018年會”上透露,“美團無人配送團隊在無人車和無...
據外媒報道,Trimble 發布了Trimble? RTX Auto,這是一個全球導航衛星系統(GNSS)軟件庫,專為安全關鍵的汽車應用建立。RTX Auto軟件庫可以與任何GNSS設備集成,并能解碼Trimble領先的RTX厘米級絕對定位精度校正流。RTX Auto與其他車載傳感器并行運作,提供滿足高級駕駛輔助系統(ADAS)和自動駕駛要求的定位解決方案。RTX Auto通過了汽車安全完整性等...
電網頭條客戶端特約記者侯婷 徐寧發自濟南 近日,國家統計局發布2020年一季度經濟和電力運行數據。數據顯示,1-3月份,我國全社會用電量累計15698億千瓦時。其中,山東、江蘇和廣東的全社會用電量位列全國前三,分別為1381億千瓦時、1293億千瓦時和1156億千瓦時。因新冠肺炎疫情爆發,今年一季度數據引起各方高度關注。在經濟數據普遍回落的大背景下...
描述:STM32f0按鍵模塊電路經常遇到上電不復位的情況,芯片采用的是stm32f030,按鍵模塊采用ZLG7290芯片、4X4按鍵LED矩陣。ZLG7290是周立功公司專門開發的按鍵芯片,其最大可支持64個按鍵和64個LED,可通過I2C協議對其讀寫,ZLG7290與stm32f030復位電路采用datasheet參考電路,如下:正常情況下,電路上電后會有一個LED全部點亮的過程,上電穩定延時后,LED...

史海拾趣

問答坊 | AI 解惑

高速PCB設計指南

高速PCB設計指南 …

查看全部問答∨

寬量程頻率測量原理及電路

要求能測量0.1-10Mhz,誤差0.5%,低頻用測周法,高頻用測頻法,根據信號自動切換測量方法,使用單片機…

查看全部問答∨

學習CPLD是用VHDL 還是VERILOG

現在 學校本科階段的教學 一般是VHDL         在企業里一般都是VERILOG         VHDL 語法相對 嚴格 代碼效率較高些   較大系統 一般都采用它      &nbs ...…

查看全部問答∨

一般的7號電池容量是多少的?

來自EEWORLD合作群:49900581  群主:wangkj…

查看全部問答∨

380V交流電怎么整出500V的直流電

380V交流電怎么整出500V的直流電,如果用H橋,負載為電感。 是否需要加電容濾波。…

查看全部問答∨

誰能介紹下WinCE BSP的BIB文件?謝謝!

誰能介紹下WinCE BSP的BIB文件?謝謝!…

查看全部問答∨

wifi不能接收數據廣播包的問題

無線網卡wifi可以接收beacon的廣播包,但是不能接收數據廣播包,無線是通的,如果STA先ping AP的話能雙向ping通,但AP不能先ping STA,就是說AP發送的ARP廣播包不能被STA接收,大家說可能是什么原因呢?RX的Broadcast和Multicast寄存器都設置好的…

查看全部問答∨

windows ce 5.0 和 windows ce 6.0區別在哪里呢?

windows ce 5.0 和 windows ce 6.0區別在哪里呢? 我想要購買windows ce 的安裝盤,請問各位大俠 這兩個版本 如果現在購買的話,應改買哪一個版本比較好呢 他們的區別在那里啊 請求各位了…

查看全部問答∨

求教:關于IAR的初始化指令,這些指令的意思是什么?

STM32F10X_vector.c的說明STM32F10X_vector.c的說明剛用IAR,有些東東不大明白,能否詳細說明一下stm32f10x_vector.c這個文件。#pragma segment="CSTACK"     /*不明白*/#pragma location =  ...…

查看全部問答∨

12V產生-12V的DC-DC芯片

最近做信號發生器,其中運放需要用到正負12V供電,加起來-12V應該有200mA的電流,最好有最大電流可以輸出500mA的。 想用電源適配器輸入一路12V,然后產生整個板子所需要的電壓,包括正負12V,正負5V,3.3V。現在就是負電壓產生比較頭疼。 …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 贵州省| 北京市| 沾益县| 凉山| 济源市| 天台县| 河北省| 左贡县| 贵阳市| 凤阳县| 扎鲁特旗| 盐山县| 鹤庆县| 宁德市| 阿勒泰市| 邹城市| 邢台市| 汶上县| 湖北省| 东源县| 乌鲁木齐市| 潢川县| 名山县| 城步| 汨罗市| 梁河县| 罗甸县| 贺兰县| 普格县| 青河县| 天津市| 辽阳县| 浙江省| 商河县| 平原县| 咸宁市| 郯城县| 上栗县| 于都县| 滕州市| 社旗县|