瑞薩e2studio(12)----外部中斷&定時器配置輸入捕獲測量頻率
概述
本篇文章主要介紹如何使用e2studio對瑞薩單片機(jī)外部中斷進(jìn)行輸入捕獲,同時通過定時器計算其頻率和占空比,同時輸入一個PWM驗證是否正確。
需要樣片的可以加Q_QUN申請:6_15061293。
視頻教學(xué)
聽不到聲音的請點(diǎn)擊跳轉(zhuǎn)進(jìn)行觀看。

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

開發(fā)板鏈接

新建工程

工程模板

保存工程路徑

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

工程模板選擇

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

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

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

uart屬性配置

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

設(shè)置e2studio堆棧

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

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 <stdio.h>
選擇定時器
RA MCU 有兩個定時器外設(shè):通用 PWM 定時器 (GPT) 和異步通用定時器 (AGT)。在它們之間進(jìn)行選擇時,請考慮以下因素:

時鐘源在這設(shè)置的是PCKLD 50M 。
可以通過修改該頻率來修改占空比頻率。

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

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

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

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

設(shè)置定時器制作計數(shù)器配置,由于不需要對上升沿和下降沿進(jìn)行捕獲,故只需配置為計數(shù)模式即可。

點(diǎn)擊Stacks->New Stack->Driver->Input -> External IRQ Driver on r_icu 。
IRQ配置
點(diǎn)擊Stacks->New Stack->Driver->Input -> External IRQ Driver on r_icu 。

IRQ屬性配置
由于需要計算頻率和占空比,故需要設(shè)置觸發(fā)方式為雙邊觸發(fā)的模式。

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

占空比與頻率計算

占空比=(t1-t0)/(t2-t0)
頻率=(t2-t0)/時鐘頻率= =(t2-t0)/50M
回調(diào)函數(shù)exit4_callback()
由于設(shè)置了上升沿和下降沿都會進(jìn)入回調(diào)函數(shù)中,故需要判斷引腳電平來判斷是屬于高電平還是低電平。
周期需要2個上升沿去判斷,設(shè)定第一個上升沿time_flag由0變?yōu)?,則第二個上升沿則為time_flag由1變?yōu)?.
計算周期需要注意定時器周期計數(shù)器溢出,若存在time_flag= 0->1讀取的計數(shù)值大于time_flag= 1->0讀取的計數(shù)值,則一個周期為g_capture_num=current_period_counts+g_capture_num1-g_capture_num0。
若沒有溢出,則g_capture_num=g_capture_num1-g_capture_num0。

頻率則需要計算下降沿到time_flag=1的一個周期,在除以g_capture_num(48M)。
計算頻率需要注意定時器周期計數(shù)器溢出,若存在time_flag= 0->1讀取的計數(shù)值大于g_capture_duty_cycle_num0讀取的計數(shù)值,則一個周期為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/86509099
最后
以上的代碼會在Q群里分享。QQ群:615061293。
或者關(guān)注微信公眾號『記帖』,持續(xù)更新文章和學(xué)習(xí)資料,可加作者的微信交流學(xué)習(xí)!

結(jié)果演示
頻率1K 占空比80%

串口打印。

頻率4K 占空比30%

串口打印。
