瑞薩e2studio(11)----定時(shí)器GPT配置輸入捕獲
@TOC
概述
本篇文章主要介紹如何使用e2studio對(duì)瑞薩單片機(jī)定時(shí)器輸入捕獲,同時(shí)輸入一個(gè)PWM驗(yàn)證是否正確。
需要樣片的可以加qun申請(qǐng):6_15061293 。
視頻教學(xué)
聽不到聲音的請(qǐng)點(diǎn)擊跳轉(zhuǎn)進(jìn)行觀看。

csdn課程
csdn課程更加詳細(xì)。
https://edu.csdn.net/course/detail/36131
完整代碼下載
https://download.csdn.net/download/qq_24312945/85043457
硬件準(zhǔn)備
首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是芯片型號(hào)R7FAM2AD3CFP的開發(fā)板:

開發(fā)板

新建工程

工程模板

保存工程路徑

芯片配置
本文中使用R7FA4M2AD3CFP來進(jìn)行演示。

工程模板選擇

時(shí)鐘設(shè)置
開發(fā)板上的外部高速晶振為12M,需要修改XTAL為12M.

UART配置
點(diǎn)擊Stacks->New Stack->Driver->Connectivity -> UART Driver on r_sci_uart。

UART屬性配置
由于開發(fā)板的typc-c接口所接的是串口9,故配置為通道9。

回調(diào)函數(shù)user_uart_callback ()
發(fā)送完畢可以用UART_EVENT_TX_COMPLETE進(jìn)行判斷。

設(shè)置e2studio堆棧

e2studio的重定向printf設(shè)置

C++ 構(gòu)建->設(shè)置->GNU ARM Cross C Linker->Miscellaneous去掉Other linker flags中的 “--specs=rdimon.specs”

printf輸出重定向到串口
打印最常用的方法是printf,所以要解決的問題是將printf的輸出重定向到串口,然后通過串口將數(shù)據(jù)發(fā)送出去。
注意一定要加上頭文件#include
選擇定時(shí)器

PWM(脈沖寬度調(diào)制)
脈沖寬度調(diào)制是一種模擬控制方式,根據(jù)相應(yīng)載荷的變化來調(diào)制晶體管基極或MOS管柵極的偏置,來實(shí)現(xiàn)晶體管或MOS管導(dǎo)通時(shí)間的改變,從而實(shí)現(xiàn)開關(guān)穩(wěn)壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定,是利用微處理器的數(shù)字信號(hào)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。脈沖寬度調(diào)制是利用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用在從測(cè)量、通信到功率控制與變換的許多領(lǐng)域中。
在瑞薩RA系列MCU中有兩種定時(shí)器,一種是通用PWM定時(shí)器GPT,另外一種是異步通用定時(shí)器AGT。
頻率=主頻/period
+占空比=cycle/period

定時(shí)器配置
點(diǎn)擊Stacks->New Stack->Driver->Timers->Timer Driver on r_gpt。

定時(shí)器輸出PWM配置
設(shè)置PWM輸出,輸出頻率為1kHz,占空比為80%。


定時(shí)器輸入捕獲配置
點(diǎn)擊Stacks->New Stack->Driver->Timers->Timer Driver on r_gpt。

定時(shí)器輸入捕獲配置
設(shè)置定時(shí)器輸入捕獲,由于需要讀取PWM的占空比和頻率,故需要設(shè)置上升沿和下降沿都產(chǎn)生一個(gè)捕獲中斷。



工程文件
打開hal_entry.c,可以看到在hal_entry函數(shù)內(nèi),注釋著可以在這輸入自己的代碼。

占空比與頻率計(jì)算

占空比=(t1-t0)/(t2-t0)
頻率=(t2-t0)/時(shí)鐘頻率= =(t2-t0)/50M
回調(diào)函數(shù)tim_callback()
由于設(shè)置了上升沿和下降沿都會(huì)進(jìn)入回調(diào)函數(shù)中,故需要判斷引腳電平來判斷是屬于高電平還是低電平。

周期需要2個(gè)上升沿去判斷,設(shè)定第一個(gè)上升沿time_flag由0變?yōu)?,則第二個(gè)上升沿則為time_flag由1變?yōu)?.
計(jì)算周期需要注意定時(shí)器周期計(jì)數(shù)器溢出,若存在time_flag= 0->1讀取的計(jì)數(shù)值大于time_flag= 1->0讀取的計(jì)數(shù)值,則一個(gè)周期為g_capture_num=current_period_counts+g_capture_num1-g_capture_num0。
若沒有溢出,則g_capture_num=g_capture_num1-g_capture_num0。

頻率則需要計(jì)算下降沿到time_flag=1的一個(gè)周期,在除以g_capture_num(50M)。
計(jì)算頻率需要注意定時(shí)器周期計(jì)數(shù)器溢出,若存在time_flag= 0->1讀取的計(jì)數(shù)值大于g_capture_duty_cycle_num0讀取的計(jì)數(shù)值,則一個(gè)周期為g_capture_num=current_period_counts+g_capture_num1-g_capture_num0。
若沒有溢出,則g_capture_duty_cycle_num=g_capture_duty_cycle_num0-g_capture_num0。

完整代碼下載
https://download.csdn.net/download/qq_24312945/85043457
最后
以上的代碼會(huì)在Q_QUN里分享。Q_QUN:6_15061293。
或者關(guān)注『記帖』,持續(xù)更新文章和學(xué)習(xí)資料!
