安徽省建設(shè)法治協(xié)會網(wǎng)站google play官網(wǎng)入口
開啟攻城獅的成長之旅!這是我參與的由?CSDN博客專家 架構(gòu)師李肯(http://yyds.recan-li.cn)和?瑞薩MCU?(瑞薩電子 (Renesas Electronics Corporation)?) 聯(lián)合發(fā)起的「 致敬未來的攻城獅計(jì)劃 」的第 7?天,點(diǎn)擊查看活動計(jì)劃詳情?(https://bbs.csdn.net/topics/613916237)!
對于從事電子方面開發(fā)的技術(shù)工程師來說,跑馬燈大概是最簡單的例子,就類似于每種編程語言中程序員接觸的第一個程序 Hello World 一樣,所以這個例子就從跑馬燈開始。讓它定時地對 LED 進(jìn)行更新(亮或滅)。
用自家的IDE會更容易上手一些。所以我選擇了e2studio。
新建項(xiàng)目
新建一個瑞薩RA的項(xiàng)目
如果沒有RA,則需要在“幫助”菜單下安裝設(shè)備。
選擇合適的FSP
有些FSP的board列表是沒有RA2E1板子的。需要導(dǎo)入合適的板級支持包BSP。
BSP下載地址:CPK-RA2L1 - RA2L1 MCU 群組中國本地評估板 | Renesas
點(diǎn)擊“幫助”,在二級菜單中選擇“關(guān)于e2studio”,在新窗口中選擇“安裝細(xì)節(jié)”,按圖中順序打開目錄。
然后將BSP壓縮包內(nèi)容解壓到目錄中,一級目錄有重名文件夾“internal”,如果是第一次安裝,win環(huán)境下不會報(bào)重復(fù)文件的提示,如果有,覆蓋即可。
回到上一步中到“新建項(xiàng)目”,項(xiàng)目名稱隨便寫一個,然后會到這個界面。
如果BSP安裝成功,則在對應(yīng)版本的FSP下,board菜單會有CPK-RA2E1開頭的選項(xiàng)。
可以選擇CPK-RA2E1開頭的選項(xiàng),也可以選擇第一個選項(xiàng)“Any Device”。
以下三段是瑞薩產(chǎn)品手冊的指示:
- 對于小型動手實(shí)驗(yàn),請選擇“Executable”(可執(zhí)行文件)和“No RTOS”(無 RTOS),然后單擊“下一步”。
- 這將打開“Project Template Selection”(項(xiàng)目模板選擇)頁面,可以在其中選擇初始項(xiàng)目內(nèi)容的模板。 項(xiàng)目模板可能包含多個條目;至少包括適合所選電路板/器件組合的板級支持包。有些模板甚至包括一個完整 的示例項(xiàng)目,但“Project Configurator”(項(xiàng)目配置器)將僅顯示與您在先前屏幕上所做選擇匹配的模板。在 本例中,選擇“Bare Metal – Minimal”(裸機(jī) – 最小化)條目,以加載評估板的板級支持包。單擊“完成”。完成項(xiàng)目的配置。
- “Project Configurator”(項(xiàng)目配置器)將關(guān)閉并在最后一步中創(chuàng)建項(xiàng)目所需的所有文件。完成此后處理 后,將出現(xiàn)一個對話框,詢問您是否要打開“FSP Configuration”(FSP 配置)透視圖。選擇“Open Perspective”(打開透視圖)。
開始編寫
不要修改main.c,要修改hal_entry.c
獲取所有自動生成的文件之后,接下來查看創(chuàng)建的內(nèi)容。 IDE 左側(cè)的“Project Explorer
”(項(xiàng)目資源管理器)列出了當(dāng)前 包含的所有內(nèi)容。ra_gen
文件夾保存通道號等配置集。src 目錄包 含一個名為 hal_entry.c
的文件。這是稍后要編輯的文件。請注 意,盡管在 ra_gen 文件夾中有一個名為 main.c
的文件,但用戶 代碼必須轉(zhuǎn)到 hal_entry.c
中。否則,如果您在 FSP 配置器中進(jìn) 行修改并重新創(chuàng)建項(xiàng)目內(nèi)容,在 main.c 中的更改會丟失,因?yàn)槊看螁螕簟?code>Generate Project Content”(生成項(xiàng)目內(nèi)容)時,都將覆蓋該文件。
該項(xiàng)目還包含幾個名稱中帶有“ra
”或“fsp
”的目錄,其中 包含 FSP
的源文件、包含文件和配置文件。通常的規(guī)則是,不得 修改這些文件夾(和子文件夾)的內(nèi)容。其中包含由配置器生成 的文件,在此所做的任何更改都將在下次生成或刷新項(xiàng)目內(nèi)容時 丟失。用戶可編輯的源文件是直接位于 \src
文件夾或您添加的任 何其他文件夾為根目錄中的文件。
在common_data.c中, 寫有 I/O 端口驅(qū)動程序?qū)嵗?g_ioport
const ioport_instance_t g_ioport = { .p_api = &g_ioport_on_ioport, .p_ctrl = &g_ioport_ctrl, .p_cfg = &g_bsp_pin_cfg, };
g_ioport_on_ioport
是一個結(jié)構(gòu)體,用于聲明端口可能執(zhí)行的操作,將分配給 g_ioport
實(shí)例 的 API 指針。將鼠標(biāo)懸停在該結(jié)構(gòu)體上,可以輕松查看其中的內(nèi)容,此結(jié)構(gòu)體顯示了其成員之一 (.pinWrite
) 是指向引腳寫入函數(shù)的指針。
根據(jù)官方文檔的指示,要點(diǎn)量led燈,需要這行代碼:
g_ioport.p_api->pinwrite (&g_ioport_ctrl, pin, BSP_IO_LEVEL_LOW);
其中,g_ioport_ctrl是一個結(jié)構(gòu)體。
/** IOPORT private control block. DO NOT MODIFY. Initialization occurs when R_IOPORT_Open() is called. */
/** IOPORT 私有控制塊。不要修改。初始化發(fā)生在調(diào)用 R_IOPORT_Open() 時。 */
typedef struct st_ioport_instance_ctrl
{uint32_t open;void const * p_context;
} ioport_instance_ctrl_t;
pin顯然不是官方提供的對象
接下來我們需要自行修改
BSP_IO_LEVEL_LOW是一個宏,表示低電平
按Ctrl+Shift+T
,可以搜索全局變量。
/** Levels that can be set and read for individual pins */
/** 可以為各個引腳設(shè)置和讀取的電平 */
typedef enum e_bsp_io_level
{BSP_IO_LEVEL_LOW = 0, ///< LowBSP_IO_LEVEL_HIGH ///< High
} bsp_io_level_t;
對于BSP_IO_LEVEL_LOW
和BSP_IO_LEVEL_HIGH
,使用了枚舉來進(jìn)行存儲,因此第四行中的BSP_IO_LEVEL_HIGH
不需要手動賦值,默認(rèn)升序。
獲取燈泡端口
接下來我們可以查閱官方的原理圖,獲取燈泡對應(yīng)的端口,下載鏈接:
官方:https://www.renesas.cn/cn/zh/document/sch/1596866?r=1596841
CSDN:https://download.csdn.net/download/m0_49303993/87624323
官方文檔給的樣例是使用FSP。
創(chuàng)建類型為 bsp_leds_t
的結(jié)構(gòu)體(在 board_leds.h
中聲明)并為其分配在 board_leds.c
中定義的全局 BSP 結(jié)構(gòu)體 g_bsp_leds
即可解決問題。這兩個文件均位于項(xiàng)目的 ra\board\ra2e1_cpk
文件夾內(nèi)。因此,以下兩行代碼足以獲取有關(guān)評估板上 LED 的信息:
extern bsp_leds_t g_bsp_leds;
bsp_leds_t Leds = g_bsp_leds;
現(xiàn)在,可以使用 LED 結(jié)構(gòu)體來訪問電路板上的所有 LED,并使用以下語句點(diǎn)亮紅色 LED(將端口設(shè)置為 低電平將點(diǎn)亮 LED,將端口設(shè)置為高電平則將熄滅 LED):
此語句后需要有第二條語句,用于將其引腳設(shè)置為高電平以熄滅 用戶 LED。 最后,需要提供一段延時以使 LED 以用戶友好的方式切換。為此,可以再次調(diào)用 BSP API:
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
R_BSP_SoftwareDelay
函數(shù)的第一個參數(shù)是要延遲的單位數(shù),而第二個參數(shù)是指定的基本單位,在 本例中為秒。其他選項(xiàng)包括毫秒和微秒。
最后,由于我們想無限期地運(yùn)行程序,因此必須圍繞代碼創(chuàng)建一個 while(1) 循環(huán)。
根據(jù)官方文檔的指示,我們要將代碼輸入到 hal_entry.c
文件中的函數(shù)簽名之后,替換 /* TODO: add your own code here */
行。對于由項(xiàng)目配置器和 FSP 配置器插入的其他代碼,請保持不變。單片機(jī)需要借助這些代碼來正常運(yùn)行。
但我默認(rèn)生成的項(xiàng)目沒有這一行。
可以將以下代碼復(fù)制到hal_entry.c
的hal_entry()
函數(shù)體的第一行中。
extern bsp_leds_t g_bsp_leds;
bsp_leds_t Leds = g_bsp_leds;
while (1)
{g_ioport.p_api->pinWrite (&g_ioport_ctrl, Leds.p_leds[BSP_LED_LED1], BSP_IO_LEVEL_LOW);R_BSP_SoftwareDelay (1, BSP_DELAY_UNITS_SECONDS);g_ioport.p_api->pinWrite (&g_ioport_ctrl, Leds.p_leds[BSP_LED_LED1], BSP_IO_LEVEL_HIGH);R_BSP_SoftwareDelay (1, BSP_DELAY_UNITS_SECONDS);
}
復(fù)制到選中的位置中
編譯運(yùn)行
插入開發(fā)板,依次點(diǎn)擊“構(gòu)建”、“調(diào)試”、“繼續(xù)”、“繼續(xù)”。
然后就看到開發(fā)板紅燈交替閃爍