微信公眾號?| strongerHuang
一些小伙伴覺得單片機入門太難了,又要懂原理圖、又要懂寄存器、還要學編程語言......
其實,現(xiàn)在入門比我們之前學習單片機要簡單多了,我們那會兒網(wǎng)絡還不這么發(fā)達,網(wǎng)上教程幾乎很少,再次,就是現(xiàn)在各種配置工具,只需要動動鼠標就能創(chuàng)建工程,隨便寫兩段代碼,就能讓單片機跑起來了。
即便是現(xiàn)在單片機寄存器越來越多、功能模塊也越來越多,但現(xiàn)在工具越來越強了啊,不用你一步一步移植代碼了。
這里結合瑞薩e2 studio工具,以及RA8D1單片機,配置一個按鍵中斷給大家看看,你會發(fā)現(xiàn)其實很簡單。
準備工作
開發(fā)RA8D1單片機需要提前安裝好軟件工具,還有準備好RA8板卡以及下載調試器。
1、下載安裝集成開發(fā)環(huán)境
開發(fā)瑞薩RA8系列單片機的工具有很多,常見的主要是:e2 studio一站式服務工具RASC + Keil,或RASC + IAR
推薦大家使用瑞薩官網(wǎng)的 e2 studio 一站式服務工具。
2、準備硬件板卡
本教程就使用瑞薩CPKCOR_RA8D1B評估板,這塊板卡集成了J-link,我們只需要用一根線連接電腦即可下載調試。
e2s配置按鍵中斷
e2 studio可以理解為包含單片機底層配置工具、編輯器、編譯器、調試器等多種功能為一體的一站式服務工具,和其他一些MCU廠商的“可視化配置工具”類似,只需要動動鼠標,就能快速創(chuàng)建瑞薩單片機軟件工程。
我們這里配置一個LED翻轉(亮滅)+一個按鍵(Key)中斷:按鍵按一次,LED翻轉一下。
1、基于e2s快速創(chuàng)建軟件工程模板
打開e2s,文件 -> 新建?-> 瑞薩C/C++項目?-> Renesas RA:
輸入工程名稱,比如我們輸入RA8D1_KEY:
選擇單片機型號,比如R7FA8D1BHEC:
選擇Non-TrustZone項目工程:
選擇Executable:
選擇【Bare Metal-Minimal】,然后點擊完成,一個項目模板就創(chuàng)建好了。
2、配置LED+KEY中斷
在【Pins】選項欄,選中LED引腳,我們這里PA01,配置為輸出模式。
然后,在IRQ欄目下,選在對于的中斷號,我們使用P008作為按鍵中斷,這里就是IRQ12。
在【Stacks】選項欄,新增一個Stack ->Input?->?External lRQ:
然后,設置對應屬性:
3、添加代碼實現(xiàn)按鍵中斷功能
這里,我們只需要在自帶的hal_entry.c源文件下添加少許代碼,即可實現(xiàn)按鍵中斷:按鍵KEY按下,LED翻轉
#include "hal_data.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
/* 定義LED翻轉 */
#define LED_TOGGLE R_PORT10->PODR ^= 1<<(BSP_IO_PORT_10_PIN_01 & 0xFF)
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
/* TODO: add your own code here */
//中斷初始化
R_ICU_ExternalIrqOpen(&g_external_irq12_ctrl, &g_external_irq12_cfg);
R_ICU_ExternalIrqEnable(&g_external_irq12_ctrl);
while(1)
{
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
/* 按鍵中斷回調函數(shù) */
void key_external_irq_callback(external_irq_callback_args_t *p_args)
{
/* 判斷中斷通道 */
if (12 == p_args->channel)
{
LED_TOGGLE; // 按鍵KEY按下,LED翻轉
}
}
實現(xiàn)效果:最后,這樣配置,是不是相對以前那種一步一步移植代碼更簡單?