概述
本篇文章主要介紹如何使用e2studio對瑞薩單片機定時器輸入捕獲,同時輸入一個PWM驗證是否正確。 需要樣片的可以加qun申請:615061293 。
完整代碼下載
https://download.csdn.net/download/qq_24312945/85043457
樣品申請
https://www.wjx.top/vm/wBbmSFp.aspx#
硬件準備
首先需要準備一個開發板,這里我準備的是芯片型號R7FAM2AD3CFP的開發板:
開發板
新建工程
工程模板
保存工程路徑
芯片配置
本文中使用R7FA4M2AD3CFP來進行演示。
工程模板選擇
時鐘設置
開發板上的外部高速晶振為12M,需要修改XTAL為12M.
UART配置
點擊Stacks->New Stack->Driver->Connectivity -> UART Driver on r_sci_uart。
UART屬性配置
由于開發板的typc-c接口所接的是串口9,故配置為通道9。
回調函數user_uart_callback ()
發送完畢可以用UART_EVENT_TX_COMPLETE進行判斷。
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
設置e2studio堆棧
e2studio的重定向printf設置
C++ 構建->設置->GNU ARM Cross C Linker->Miscellaneous去掉Other linker flags中的 “--specs=rdimon.specs”
printf輸出重定向到串口
打印最常用的方法是printf,所以要解決的問題是將printf的輸出重定向到串口,然后通過串口將數據發送出去。 注意一定要加上頭文件#include
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;ireturn size;
}
選擇定時器
PWM(脈沖寬度調制)
脈沖寬度調制是一種模擬控制方式,根據相應載荷的變化來調制晶體管基極或MOS管柵極的偏置,來實現晶體管或MOS管導通時間的改變,從而實現開關穩壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時保持恒定,是利用微處理器的數字信號對模擬電路進行控制的一種非常有效的技術。脈沖寬度調制是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。 在瑞薩RA系列MCU中有兩種定時器,一種是通用PWM定時器GPT,另外一種是異步通用定時器AGT。 頻率=主頻/period +占空比=cycle/period
定時器配置
點擊Stacks->New Stack->Driver->Timers->Timer Driver on r_gpt。
定時器輸出PWM配置
設置PWM輸出,輸出頻率為1kHz,占空比為80%。
定時器輸入捕獲配置
點擊Stacks->New Stack->Driver->Timers->Timer Driver on r_gpt。
定時器輸入捕獲配置
設置定時器輸入捕獲,由于需要讀取PWM的占空比和頻率,故需要設置上升沿和下降沿都產生一個捕獲中斷。
工程文件
打開hal_entry.c,可以看到在hal_entry函數內,注釋著可以在這輸入自己的代碼。
占空比與頻率計算
占空比=(t1-t0)/(t2-t0) 頻率=(t2-t0)/時鐘頻率= =(t2-t0)/50M
回調函數tim_callback()
由于設置了上升沿和下降沿都會進入回調函數中,故需要判斷引腳電平來判斷是屬于高電平還是低電平。
bsp_io_level_t p_port_value_port_101;
/*讀取端口電平狀態,如果是低電平則發生的是下降沿,高電平則是上升沿*/
R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_01, &p_port_value_port_101);
周期需要2個上升沿去判斷,設定第一個上升沿time_flag由0變為1,則第二個上升沿則為time_flag由1變為0. 計算周期需要注意定時器周期計數器溢出,若存在time_flag= 0->1讀取的計數值大于time_flag= 1->0讀取的計數值,則一個周期為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(50M)。 計算頻率需要注意定時器周期計數器溢出,若存在time_flag= 0->1讀取的計數值大于g_capture_duty_cycle_num0讀取的計數值,則一個周期為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
審核編輯:湯梓紅
-
單片機
+關注
關注
6043文章
44622瀏覽量
638668 -
瑞薩
+關注
關注
35文章
22311瀏覽量
86777 -
定時器
+關注
關注
23文章
3256瀏覽量
115397
發布評論請先 登錄
相關推薦
瑞薩e2studio(1)----瑞薩芯片之搭建FSP環境
瑞薩e2studio(3)----GPIO輸入檢測
![<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>e2studio</b>(3)----GPIO<b class='flag-5'>輸入</b>檢測](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
瑞薩e2studio(5)----PWM
![<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>e2studio</b>(5)----PWM](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論