采用定時(shí)器2的通道2,使PA1輸出頻率1K,占空比40的PWM波形,用PA8隨意延時(shí)取反led燈,指示程序運(yùn)行
上午花了半天時(shí)間熟悉了stm32的PWM模塊。中午利用午飯時(shí)間把PWM功能調(diào)試成功。當(dāng)然,很簡(jiǎn)單的東西,也許很多前輩估計(jì)都不屑一顧的東西。
今天最大的感嘆就是網(wǎng)絡(luò)資源實(shí)在是個(gè)巨大的寶庫(kù),真的很慶幸,在這個(gè)復(fù)雜的社會(huì)環(huán)境里,在一個(gè)到處充斥著私心、私利的時(shí)代,各個(gè)網(wǎng)站,各個(gè)論壇上的眾多網(wǎng)友都時(shí)刻保持著開源的氛圍。學(xué)習(xí)一定要和他人交流,而網(wǎng)絡(luò)提供了這么一個(gè)極好的平臺(tái)。
廢話少說,言歸正傳。
實(shí)現(xiàn)功能:采用定時(shí)器2的通道2,使PA1輸出頻率1K,占空比40的PWM波形,用PA8隨意延時(shí)取反led燈,指示程序運(yùn)行。
首先熟悉一下定時(shí)器的PWM相關(guān)部分。看圖最明白
其實(shí)PWM就是定時(shí)器的一個(gè)比較功能而已。
CNT里的值不斷++,一旦加到與CCRX寄存器值相等,那么就產(chǎn)生相應(yīng)的動(dòng)作。這點(diǎn)和AVR單片機(jī)很類似。既然這樣,我們要產(chǎn)生需要的PWM信號(hào),就需要設(shè)定PWM的頻率和PWM的占空比。
首先說頻率的確定。由于通用定時(shí)器的時(shí)鐘來源是PCLK1,而我又喜歡用固件庫(kù)的默認(rèn)設(shè)置,那么定時(shí)器的時(shí)鐘頻率就這樣來確定了,如下:
AHB(72MHz)→APB1分頻器(默認(rèn)2)→APB1時(shí)鐘信號(hào)(36MHz)→倍頻器(*2倍)→通用定時(shí)器時(shí)鐘信號(hào)(72MHz)。
這里為什么是這樣,在RCC模塊學(xué)習(xí)記錄里有詳細(xì)記載,不多說。
因此圖中的CK_PSC就是72MHz了。
下面的資料也是網(wǎng)上一搜一大把,我就羅列了:
STM32的PWM輸出有兩種模式,模式1(PWM1)和模式2(PWM2),由TIMx_CCMRx寄存器中的OCxM位確定的(“110”為模式1,“111”為模式2)。模式1和模式2的區(qū)別如下:
110:PWM模式1-在向上計(jì)數(shù)時(shí),一旦TIMx_CNT=TIMx_CCR1時(shí)通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。
111:PWM模式2-在向上計(jì)數(shù)時(shí),一旦TIMx_CNT=TIMx_CCR1時(shí)通道1為有效電平,否則為無效電平。
由此看來,模式1和模式2正好互補(bǔ),互為相反,所以在運(yùn)用起來差別也并不太大。我用的是模式一,因此后面的設(shè)定都是按照模式一來設(shè)定的。
PWM的周期是就是由定時(shí)器的自動(dòng)重裝值和CNT計(jì)數(shù)頻率決定的。而CNT的計(jì)數(shù)時(shí)鐘是CK_PSC經(jīng)分頻器PSC得到,因此CNT的時(shí)鐘就是CK_PSC/分頻系數(shù)。這個(gè)分頻系數(shù)在TIM_TimeBaseStructure.TIM_Prescaler確定。成都網(wǎng)站設(shè)計(jì)我設(shè)置的值是72,因此CNT的計(jì)數(shù)頻率也就是CK_CNT的頻率為1MHz。
下一步就是確定定時(shí)器自動(dòng)重裝值。因?yàn)镃NT每自加到ARR寄存器的值時(shí)就會(huì)自動(dòng)清零,當(dāng)然前提是設(shè)定為為向上計(jì)數(shù)模式,而就是根據(jù)這個(gè)溢出事件來改變PWM的周期。所以PWM信號(hào)的頻率由ARR的值來確定。我設(shè)置的值是1000-1,即TIM_TimeBaseStructure.TIM_Period = 1000-1;因此PWM的周期是1MHz/1000=1KHz。
接下來就要確定PWM的占空比了。因?yàn)镃NT在自加到ARR值的過程中會(huì)不斷和CRRX的值相比較,一旦二者相等就產(chǎn)生匹配事件,但要注意CNT不會(huì)理會(huì)這件事,它會(huì)繼續(xù)++直到等于ARR。而CRRX的值我設(shè)定為400-1,那么占空比就隨之確定為40%。
好了,下面就是庫(kù)函數(shù)的配置了。
TIMER輸出PWM實(shí)現(xiàn)步驟
1.設(shè)置RCC時(shí)鐘;
2.設(shè)置GPIO;
3.設(shè)置TIMx定時(shí)器的相關(guān)寄存器;
4.設(shè)置TIMx定時(shí)器的PWM相關(guān)寄存器。
首先是main函數(shù)和全局變量申明,很簡(jiǎn)單,不作說明
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TimOCInitStructure;
int main(void)
{
rcc_cfg();
gpio_cfg();
tim2_cfg();
pwm_cfg();
//
while (1)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET);
delay();
GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET);
delay();
}
}
下面是IO口的配置:
void gpio_cfg()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
此處要注意的是PWM輸出口要配置為復(fù)用推挽輸出,原因我也不知道,反正照搬就是了。
下面是TIM配置函數(shù),注釋很清楚了,不作說明:
void tim2_cfg()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_DeInit(TIM2);
TIM_InternalClockConfig(TIM2);
//預(yù)分頻系數(shù)為72,這樣計(jì)數(shù)器時(shí)鐘為72MHz/72 = 1MHz
TIM_TimeBaseStructure.TIM_Prescaler = 72;
//設(shè)置時(shí)鐘分割
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
//設(shè)置計(jì)數(shù)器模式為向上計(jì)數(shù)模式
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//設(shè)置計(jì)數(shù)溢出大小,每計(jì)1000個(gè)數(shù)就產(chǎn)生一個(gè)更新事件
TIM_TimeBaseStructure.TIM_Period = 1000-1;
//將配置應(yīng)用到TIM2中
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
//禁止ARR預(yù)裝載緩沖器
TIM_ARRPreloadConfig(TIM2, DISABLE);
TIM_Cmd(TIM2, ENABLE); //使能TIMx外設(shè)
}
接下來是關(guān)鍵的PWM的配置函數(shù):
void pwm_cfg()
{
//設(shè)置缺省值
TIM_OCStructInit(&TimOCInitStructure);
//PWM模式1輸出
TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
//設(shè)置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100%
TimOCInitStructure.TIM_Pulse = 400-1;
//TIM輸出比較極性高
TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
//使能輸出狀態(tài)
TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
//TIM2的CH2輸出
TIM_OC2Init(TIM2, &TimOCInitStructure);
//設(shè)置TIM2的PWM輸出為使能
TIM_CtrlPWMOutputs(TIM2,ENABLE);
}
stm32固件庫(kù)的輸出比較單元結(jié)構(gòu)體與定時(shí)器的時(shí)基單元是分開定義的,而PWM模式只是輸出比較結(jié)構(gòu)體成員TimOCInitStructure.TIM_OCMode的一個(gè)取值,當(dāng)把此結(jié)構(gòu)體填充完后,還要映射到某個(gè)定時(shí)器,用TIM_OCXInit函數(shù)實(shí)現(xiàn),我用了一個(gè)X,說明不止一個(gè)這樣的函數(shù),事實(shí)上,stm32的通用定時(shí)器都有四個(gè)通道,每個(gè)通道對(duì)應(yīng)一個(gè)初始化函數(shù),這里真夠糾結(jié)的!最后還要使能該定時(shí)器的PWM輸出功能,TIM_CtrlPWMOutputs(TIM2,ENABLE)函數(shù)要注意,是outputs而不是output,說明TIM2不止一個(gè)通道嘛!夠復(fù)雜,夠繁瑣的!
下面是輸出比較單元的結(jié)構(gòu)體原型:
typedef struct
{
uint16_t TIM_OCMode;
uint16_t TIM_OutputState;
uint16_t TIM_OutputNState;
uint16_t TIM_Pulse;
uint16_t TIM_OCPolarity;
uint16_t TIM_OCNPolarity;
uint16_t TIM_OCIdleState;
uint16_t TIM_OCNIdleState;
} TIM_OCInitTypeDef;
其中沒有加色的成員是高級(jí)定時(shí)器才有的,通用定時(shí)器就不用管了。
這里還有個(gè)TimOCInitStructure.TIM_OCPolarity 成員需要注意,它有什么作用呢?在網(wǎng)上查的資料,如下圖:
前面說到pwm有pwm1和pwm2兩種模式,這兩種模式只能控制到OCXREF為止,TIM_OCPolarity 能控制OC1是直接等于OCXREF,還是取反極性!OC1才是最終的PWM信號(hào)。
這里有個(gè)小插曲,我用示波器去測(cè)量PWM信號(hào),發(fā)現(xiàn)信號(hào)居然是雙極性的,然后改變TIM_OCPolarity ,再測(cè),還是雙極性,只是倒了個(gè)跟頭。還真以為stm32單片機(jī)能輸出兩極性的PWM,后面把示波器改為直流檔(之前用的是交流檔),波形才從零電位一下縱向移上去。以后要注意!
上一篇:基于STM32的數(shù)字PDA系統(tǒng)軟件系統(tǒng)設(shè)計(jì)
下一篇:單片機(jī)STM32時(shí)鐘圖文理解
推薦閱讀
史海拾趣
CALMIRCO公司深知合作共贏的重要性,因此積極與上下游企業(yè)建立緊密的合作伙伴關(guān)系。公司與多家知名芯片制造商、電子設(shè)備生產(chǎn)商等建立了長(zhǎng)期穩(wěn)定的合作關(guān)系,共同推動(dòng)產(chǎn)業(yè)鏈的發(fā)展。通過資源共享、技術(shù)互補(bǔ)等方式,CALMIRCO公司與合作伙伴實(shí)現(xiàn)了共贏發(fā)展,共同提升了行業(yè)競(jìng)爭(zhēng)力。
在國(guó)內(nèi)市場(chǎng)取得一定成績(jī)后,BOPLA開始將目光投向海外市場(chǎng)。通過參加國(guó)際電子展會(huì)、與海外客戶建立合作關(guān)系等方式,公司成功將產(chǎn)品打入國(guó)際市場(chǎng)。同時(shí),BOPLA還積極調(diào)整產(chǎn)品策略,根據(jù)不同國(guó)家和地區(qū)的市場(chǎng)需求,推出定制化的電子元件產(chǎn)品,進(jìn)一步擴(kuò)大了市場(chǎng)份額。
Elpac公司深知人才是企業(yè)發(fā)展的核心動(dòng)力。因此,公司高度重視人才培養(yǎng)和團(tuán)隊(duì)建設(shè)。公司建立了完善的人才培訓(xùn)體系,為員工提供多樣化的培訓(xùn)和發(fā)展機(jī)會(huì)。同時(shí),公司還鼓勵(lì)員工積極參與各種創(chuàng)新活動(dòng)和競(jìng)賽,激發(fā)員工的創(chuàng)新精神和創(chuàng)造力。這種積極向上的企業(yè)文化吸引了大量?jī)?yōu)秀人才加入Elpac公司,為公司的持續(xù)發(fā)展提供了有力保障。
為了適應(yīng)全球化的市場(chǎng)趨勢(shì),茂達(dá)電子制定了全面的全球化戰(zhàn)略。公司不僅加強(qiáng)了與國(guó)際市場(chǎng)的聯(lián)系,還積極尋求與國(guó)際知名企業(yè)的合作機(jī)會(huì)。同時(shí),茂達(dá)電子還加大了對(duì)海外市場(chǎng)的投入,通過設(shè)立海外分支機(jī)構(gòu)、參加國(guó)際展會(huì)等方式,不斷提升品牌知名度和市場(chǎng)影響力。
這五個(gè)故事只是Anpec(茂達(dá)電子)發(fā)展歷程中的一部分,但它們充分展示了茂達(dá)電子在電子行業(yè)中的崛起和成就。作為一家具有創(chuàng)新精神和市場(chǎng)洞察力的企業(yè),茂達(dá)電子將繼續(xù)致力于為客戶提供優(yōu)質(zhì)的產(chǎn)品和服務(wù),推動(dòng)電子行業(yè)的持續(xù)發(fā)展。
近年來,隨著數(shù)字化技術(shù)的快速發(fā)展,AIRPAX也開始積極探索數(shù)字化轉(zhuǎn)型之路。公司加大了對(duì)智能化、自動(dòng)化生產(chǎn)線的投入,提高了生產(chǎn)效率和質(zhì)量。同時(shí),AIRPAX還積極利用大數(shù)據(jù)、云計(jì)算等先進(jìn)技術(shù),對(duì)客戶需求和市場(chǎng)趨勢(shì)進(jìn)行深入分析,以更好地滿足客戶需求并推動(dòng)創(chuàng)新發(fā)展。
這些故事只是AIRPAX發(fā)展歷程中的一部分,它們展示了AIRPAX如何在技術(shù)、市場(chǎng)、環(huán)保和創(chuàng)新等多個(gè)方面取得了顯著成就。然而,隨著電子行業(yè)的不斷發(fā)展和競(jìng)爭(zhēng)的加劇,AIRPAX仍需繼續(xù)努力,以保持其在電氣保護(hù)領(lǐng)域的領(lǐng)先地位。
效益是企業(yè)賴以生存的前提,創(chuàng)新是企業(yè)發(fā)展的動(dòng)力,創(chuàng)新活動(dòng),是市場(chǎng)拉動(dòng)和技術(shù)推動(dòng)兩者的匯聚點(diǎn)。在過去的計(jì)劃經(jīng)濟(jì)時(shí)代,重慶川儀和當(dāng)時(shí)很多國(guó)營(yíng)企業(yè)一樣,技術(shù)開發(fā)嚴(yán)重脫離市場(chǎng)、脫離生產(chǎn),看似研發(fā)成果不斷,但真正形成產(chǎn)品并賺回真金白銀的卻不 ...… 查看全部問答∨ |
|
EBOOT中的 CS8900: MAC Address: 11:11:11:11:11:11 ERROR: Probe: EISA Number Error. ERROR: InitEthDevice: Failed to initialize Ethernet controller. ERROR: OEMPlatformInit: Failed to initialize Ethernet controller. 這個(gè)錯(cuò)誤一般 ...… 查看全部問答∨ |
關(guān)于6410訪問SPI總線的問題,請(qǐng)高手指教 小弟把三星的SPI總線驅(qū)動(dòng)編譯進(jìn)了內(nèi)核,(開發(fā)板提供了源碼但是沒有加入內(nèi)核)。然后用WriteFile函數(shù)發(fā)送測(cè)試數(shù)據(jù),可以看到SPI口輸出正常,但是用ReadFile讀取SPI口時(shí),一直讀回0. SPI的讀取時(shí)序如下圖,我先用 WriteFile(hSPI, &cBuffer_out, 1, ...… 查看全部問答∨ |
LM3S8962學(xué)習(xí)(二) -- 按鍵與中斷 讀按鍵的值,可以通過函數(shù)GPIOPinRead來完成 如何實(shí)現(xiàn)中斷呢?主要有以下幾個(gè)步驟需要做 1. 先定義一個(gè)LED和一個(gè)KEY #define LED GPIO_PIN_0#define KEY GPIO_PIN_0 2. 在startup_rvmdk.S 文件中增加PORT_E的中斷服務(wù) ...… 查看全部問答∨ |
我需要測(cè)小于零的信號(hào),我看過手冊(cè),是不是在參考電壓端口用一個(gè)正負(fù)的參考電源?可STM32內(nèi)部只有一個(gè)1.2v的正電源,可怎樣找到一個(gè)負(fù)電源?。縿e的單片機(jī)一般這樣解決辦法是采用的雙端輸入,STM32有沒有類視的設(shè)置???請(qǐng)大家給一個(gè)解決方案… 查看全部問答∨ |
【求助】請(qǐng)幫忙選個(gè)MOS管做開關(guān)管 要求條件是:通過電壓為5V電流最大值是2A,有著方面得經(jīng)驗(yàn)得DX幫忙?。。。。? 先謝謝了?。。。?! 把你們經(jīng)常用的型號(hào)告訴我好嗎???… 查看全部問答∨ |
請(qǐng)問貴網(wǎng)站的LSD2262 芯片能替換上去嗎..!!!直接取下焊上就能用嗎!!!先謝謝!!!我是菜鳥… 查看全部問答∨ |
人人都愛易電源——轉(zhuǎn)發(fā)有禮! 活動(dòng)主題:人人都愛易電源——轉(zhuǎn)發(fā)有禮!活動(dòng)時(shí)間:10月11日—28日 活動(dòng)鏈接:https://bbs.eeworld.com.cn/thread-352431-1-1.html… 查看全部問答∨ |
哎,研究生生活馬上過去一半了,回望著一年確實(shí)學(xué)到了不少東西,感覺自己能力提高了些許,但是還是很多細(xì)節(jié)的方面需要加強(qiáng),繼續(xù)努力,加油!… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 貿(mào)澤授權(quán)代理Texas Instruments 豐富多樣的產(chǎn)品
- 美國(guó)為何恢復(fù)英偉達(dá)H20對(duì)華銷售?白宮AI負(fù)責(zé)人回應(yīng)
- Cadence 率先推出業(yè)內(nèi)首款 LPDDR6/5X 14.4Gbps 內(nèi)存 IP,為新一代 AI 基礎(chǔ)架構(gòu)助力
- 手把手教你從零設(shè)計(jì)一款算力超過 1000Tops 的智能駕駛芯片
- OrangeBox汽車連接域控制器(CDC)開發(fā)平臺(tái)
- 采用反激式轉(zhuǎn)換器進(jìn)行高功率應(yīng)用設(shè)計(jì)
- Vishay推出PLCC-6封裝RGB LED通過獨(dú)立控制紅色、綠色和藍(lán)色芯片實(shí)現(xiàn)寬色域
- 芯對(duì)話 | CBMG719單刀雙擲模擬開關(guān):高精度信號(hào)切換低阻高速寬溫
- 大聯(lián)大詮鼎集團(tuán)推出基于Qualcomm和Thundercomm產(chǎn)品的AI電子圍欄方案
- AMD:AI加速卡MI308將恢復(fù)出貨,許可證申請(qǐng)將被推進(jìn)至審核流程
- 我是大偵探之:尋找遺落的TI電源拼圖
- “悅”讀deyisupport博文 樂享知識(shí)智贏好禮
- 有獎(jiǎng)直播|Keysight World 2020【電信基礎(chǔ)設(shè)施、云與人工智能分論壇】
- 免費(fèi)申請(qǐng)富士通FRAM 曬心得 贏大禮!
- 有獎(jiǎng)直播:使用 NI CompactDAQ 和 LabVIEW構(gòu)建基于傳感器的測(cè)試系統(tǒng)
- 看這里!發(fā)表個(gè)人原創(chuàng)就有機(jī)會(huì)獲得E金幣啦~~
- 【ST直播】MEMS傳感器開發(fā)套件簡(jiǎn)介、了解內(nèi)嵌“有限狀態(tài)機(jī)和機(jī)器學(xué)習(xí)內(nèi)核”的傳感器
- 看視頻答題,玩轉(zhuǎn)幸運(yùn)大抽獎(jiǎng):Littelfuse汽車電子電路保護(hù)知多少
- 【EE團(tuán)拍賣】\\
- 搶先體驗(yàn)!免費(fèi)試用LM3S8962 評(píng)估套件?。?0.13~11.30)
- 關(guān)于C51的IE(中斷使能寄存器)的初級(jí)認(rèn)識(shí)
- 51特殊功能寄存器data
- 標(biāo)志寄存器及其標(biāo)志位
- 輕智能技術(shù):典型的應(yīng)用場(chǎng)景有哪些?
- iGun可終結(jié)美國(guó)頻發(fā)的槍擊案?
- ABB機(jī)器人與人類完美協(xié)作上演震撼現(xiàn)代舞
- 共享充電樁的發(fā)展優(yōu)勢(shì)
- 新三板142家機(jī)器人企業(yè) 7家終止掛牌4家轉(zhuǎn)讓
- AI犯錯(cuò)不可怕 反躬自省糾正它
- IFR:2018中國(guó)工業(yè)機(jī)器人銷量增幅放緩 2019年將提速
- CANopen主節(jié)點(diǎn)的設(shè)計(jì)方案
- 主流藍(lán)牙BLE MESH模塊藍(lán)牙芯片ic的選型總結(jié)經(jīng)驗(yàn)
- NXP-EVB-P6UL(I.mx6ul)的3G網(wǎng)絡(luò)測(cè)試—by szypf2011
- 【LPC8N04測(cè)評(píng)】5.LPC8N04天線設(shè)計(jì)
- 您的手機(jī)RF是否準(zhǔn)備好使用5G?
- CE5.0大內(nèi)存支持問題
- CC3200 Wi-Fi 和物聯(lián)網(wǎng)解決方案
- 今天在淘寶看到XDS100V2帶隔離的仿真器只要49.88元,靠譜不?
- 降低數(shù)字信號(hào)對(duì)模擬信號(hào)干擾的幾點(diǎn)
- Qt學(xué)習(xí)之路第1篇 Qt簡(jiǎn)介