女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解hal_entry入口函數(shù)

瑞薩MCU小百科 ? 來(lái)源:野火電子 ? 2025-07-25 15:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

10.2.3

hal_entry入口函數(shù)

當(dāng)使用RTOS時(shí),程序從main函數(shù)開始進(jìn)行線程調(diào)度;當(dāng)沒有使用RTOS時(shí),C語(yǔ)言程序的入口函數(shù)main函數(shù)調(diào)用了hal_entry函數(shù)。由于我們新建的工程是沒有選用RTOS的,因此,用戶程序從hal_entry函數(shù)開始執(zhí)行。我們直接打開“srchal_entry.c”文件,在hal_entry函數(shù)里面編寫我們的代碼。

想要實(shí)現(xiàn)LED燈的閃爍效果,其思路非常地簡(jiǎn)單:首先初始化配置LED引腳,然后在一個(gè)死循環(huán)里面重復(fù)此流程:LED燈亮,延時(shí)1s,LED燈滅,延時(shí)1s,然后LED燈又亮。如此反復(fù)循環(huán),就能實(shí)現(xiàn)LED燈的閃爍效果。

首先,我們需要通過(guò)R_IOPORT_Open函數(shù)來(lái)初始化IOPORT模塊,在調(diào)用R_IOPORT_Open函數(shù)時(shí),需要傳入控制塊參數(shù)g_ioport_ctrl和配置參數(shù)g_ioport.p_cfg。

左右滑動(dòng)查看完整內(nèi)容

//調(diào)用 R_IOPORT_Open 函數(shù)來(lái)初始化 IOPORT 模塊
R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);

注解

實(shí)際上,由于在R_BSP_WarmStart函數(shù)中已經(jīng)打開了一個(gè)IOPORT模塊,因此并不需要重復(fù)打開IOPORT模塊,雖然重復(fù)打開也不會(huì)出錯(cuò)。R_BSP_WarmStart函數(shù)將會(huì)在后面的“FSP庫(kù)啟動(dòng)文件詳解”章節(jié)介紹到,這里可暫且忽略。

成功打開IOPORT模塊后,說(shuō)明IO引腳已經(jīng)全部初始化完成。接著讓程序繼續(xù)往下執(zhí)行,進(jìn)入到while(1)死循環(huán)。在while(1)循環(huán)里,我們使用R_IOPORT_PinWrite和R_BSP_SoftwareDelay這兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)前面所述的思路。

使用R_IOPORT_PinWrite函數(shù)可以控制引腳的輸出高低電平,從而控制LED燈的亮滅。它的第一個(gè)參數(shù)需要傳入控制塊g_ioport_ctrl,第二個(gè)參數(shù)傳入IO端口和引腳號(hào),第三個(gè)參數(shù)傳入IO引腳電平。

左右滑動(dòng)查看完整內(nèi)容

fsp_err_tR_IOPORT_PinWrite(ioport_ctrl_t*constp_ctrl, bsp_io_port_pin_
→t pin,bsp_io_level_tlevel);

使用R_BSP_SoftwareDelay函數(shù)可以進(jìn)行延時(shí),LED燈維持亮和滅這兩種狀態(tài)的時(shí)間由此函數(shù)決定。它的第一個(gè)參數(shù)表示延時(shí)的時(shí)間量,第二個(gè)參數(shù)表示時(shí)間單位。

左右滑動(dòng)查看完整內(nèi)容

voidR_BSP_SoftwareDelay(uint32_tdelay,bsp_delay_units_tunits);

時(shí)間單位參數(shù)可選:

BSP_DELAY_UNITS_SECONDS,表示秒;

BSP_DELAY_UNITS_MILLISECONDS,表示毫秒;

BSP_DELAY_UNITS_MICROSECONDS,表示微秒。

以啟明6M5開發(fā)板為例,完整代碼如下:代碼清單11_1

列表2:代碼清單10-1:hal_entry入口函數(shù)

左右滑動(dòng)查看完整內(nèi)容

voidhal_entry(void)
{
/*TODO:add your own code here */
/* 初始化配置引腳(這里重復(fù)初始化了,可以注釋掉) */
R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
while(1)
{
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_00, BSP_IO_
→LEVEL_LOW);//LED1 亮
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_03, BSP_IO_
→LEVEL_LOW);//LED2 亮
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_
→LEVEL_LOW);//LED3 亮
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);//延時(shí) 1 秒
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_00, BSP_IO_
→LEVEL_HIGH);//LED1 滅
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_03, BSP_IO_
→LEVEL_HIGH);//LED2 滅
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_
→LEVEL_HIGH);//LED3 滅
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);//延時(shí) 1 秒
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

到此,我們已經(jīng)完全實(shí)現(xiàn)了讓LED閃爍的效果,讀者可以跳到“下載驗(yàn)證”小節(jié)驗(yàn)證其實(shí)際效果。按照編寫驅(qū)動(dòng)程序的一般要求,我們可以把LED的驅(qū)動(dòng)單獨(dú)拿出來(lái),放到獨(dú)立的源文件/頭文件里面進(jìn)行封裝。接下來(lái)將介紹封裝LED設(shè)備驅(qū)動(dòng)程序的一般方法。

10.2.4

封裝LED設(shè)備驅(qū)動(dòng)程序

讓我們重新規(guī)劃一下我們的工程結(jié)構(gòu)。在src文件夾里面新建一個(gè)“l(fā)ed”文件夾,再在該文件夾里面新建兩個(gè)文件:“bsp_led.c”和“bsp_led.h”,如同前面“新建工程”小節(jié)所述,把它們加入到我們的工程中。這兩個(gè)文件的內(nèi)容如下。

列表3:代碼清單10-2:led/bsp_led.h

左右滑動(dòng)查看完整內(nèi)容

#ifndef__BSP_LED_H
#define__BSP_LED_H
#include"hal_data.h"
/* LED 引腳置低電平 LED 燈亮 */
#defineLED1_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_00,
→ BSP_IO_LEVEL_LOW)
#defineLED2_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_03,
→ BSP_IO_LEVEL_LOW)
#defineLED3_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04,
→ BSP_IO_LEVEL_LOW)
/* LED 引腳置高電平 LED 燈滅 */
#defineLED1_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_00,
→ BSP_IO_LEVEL_HIGH)
#defineLED2_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_03,
→ BSP_IO_LEVEL_HIGH)
#defineLED3_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04,
→ BSP_IO_LEVEL_HIGH)
/* 使用寄存器來(lái)實(shí)現(xiàn) LED 燈翻轉(zhuǎn) */
#defineLED1_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_00 & 0xFF)
#define?LED2_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_03 & 0xFF)
#define?LED3_TOGGLE R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_04 & 0xFF)
/* LED 初始化函數(shù) */
voidLED_Init(void);
#endif

列表4:代碼清單10-3:led/bsp_led.c

左右滑動(dòng)查看完整內(nèi)容

#include"bsp_led.h"
/* LED 初始化函數(shù) */
voidLED_Init(void)
{
/* 初始化配置引腳(這里重復(fù)初始化了,可以注釋掉) */
R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}

在“hal_entry.c”文件中添加對(duì)頭文件“bsp_led.h”的包含,然后將hal_entry入口函數(shù)的內(nèi)容改為如下。

列表5:代碼清單10-4:hal_entry入口函數(shù)

左右滑動(dòng)查看完整內(nèi)容

/* 用戶頭文件包含 */
#include"led/bsp_led.h"


voidhal_entry(void)
{
/*TODO:add your own code here */
LED_Init();// LED 初始化
while(1)
{
LED1_ON;// LED1 亮
LED2_ON;// LED2 亮
LED3_ON;// LED3 亮
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);//延時(shí) 1 秒
LED1_OFF;// LED1 滅
LED2_OFF;// LED2 滅
LED3_OFF;// LED3 滅
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);//延時(shí) 1 秒
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

通過(guò)這種方式來(lái)封裝硬件的驅(qū)動(dòng)程序可以使程序看起來(lái)更簡(jiǎn)單與清晰,并且會(huì)讓我們以后的開發(fā)變得更加的順暢。

10.3

下載驗(yàn)證

將程序編譯并下載到開發(fā)板之后,按下復(fù)位按鍵來(lái)復(fù)位開發(fā)板,可以觀察到開發(fā)板上面除了電源指示燈之外的三個(gè)LED燈在同時(shí)緩慢閃爍,三個(gè)LED燈每秒鐘改變一次亮滅的狀態(tài)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 瑞薩
    +關(guān)注

    關(guān)注

    36

    文章

    22388

    瀏覽量

    88105
  • 引腳
    +關(guān)注

    關(guān)注

    16

    文章

    1759

    瀏覽量

    53019
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4383

    瀏覽量

    65008
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4902

    瀏覽量

    70862

原文標(biāo)題:hal_entry入口函數(shù)——瑞薩RA系列FSP庫(kù)開發(fā)實(shí)戰(zhàn)指南(24)

文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    main函數(shù)不一定就是程序入口

    我們都知道,main函數(shù)是C程序的入口,那這個(gè)入口能不能修改?
    發(fā)表于 06-15 17:09 ?813次閱讀

    【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】MDK+點(diǎn)燈+流水燈

    調(diào)用了 hal_entry 函數(shù)。 由于我們新建的工程是沒有選用 RTOS 的,因此,用戶程序從 hal_entry 函數(shù)開始執(zhí)行。 我們直接打開 “\\\\src\\\\
    發(fā)表于 12-15 15:59

    【小e物聯(lián)網(wǎng)試用體驗(yàn)】之修改程序入口函數(shù)

    入口函數(shù)名然后如下圖所示,修改ld腳本的entry命令,將命令的選項(xiàng)設(shè)置為函數(shù)名最后修改gen_appbin.py工具腳本,如下圖所示,將入口
    發(fā)表于 07-10 18:00

    PICC庫(kù)函數(shù)詳解

    PICC庫(kù)函數(shù)詳解
    發(fā)表于 04-18 20:13 ?132次下載

    Cadance安裝入口詳解

    Cadance安裝入口詳解
    發(fā)表于 12-04 16:00 ?0次下載

    STM32F4 HAL庫(kù)函數(shù)說(shuō)明下載

    STM32F4 HAL庫(kù)函數(shù)說(shuō)明下載
    發(fā)表于 05-26 09:27 ?79次下載

    HAL庫(kù)部分常用函數(shù)名稱及作用

    HAL帶msp的函數(shù)功能:MCU Specific Package 單片機(jī)的具體方案,即MSP是指和MCU相關(guān)的初始化HAL帶MX前綴的函數(shù):應(yīng)該是與CubeMX相關(guān)(可能是與MX通用
    發(fā)表于 11-30 10:51 ?9次下載
    <b class='flag-5'>HAL</b>庫(kù)部分常用<b class='flag-5'>函數(shù)</b>名稱及作用

    STM32HAL庫(kù)函數(shù)

    函數(shù)的主要功能是將我們?cè)?函數(shù)初始化之后的引腳恢復(fù)成默認(rèn)的狀態(tài),即各個(gè)寄存器復(fù)位時(shí)的值例:HAL_GPIO_DeInit(GPIOx,GPIO_PIN_X);(2)HAL_GPIO_E
    發(fā)表于 12-04 18:06 ?218次下載
    STM32<b class='flag-5'>HAL</b>庫(kù)<b class='flag-5'>函數(shù)</b>

    STM32F4xx usb庫(kù)源碼詳解HAL_PCDEx_SetRxFiFo 和 HAL_PCDEx_SetTxFiFo

    HAL_PCDEx_SetRxFiFo 和 HAL_PCDEx_SetTxFiFo這兩個(gè)函數(shù)的作用是:該EndPoint數(shù)據(jù)傳輸最大數(shù)量的限定除前面貼子里廛的影響數(shù)據(jù)傳輸量的函數(shù)外,這
    發(fā)表于 12-20 19:33 ?9次下載
    STM32F4xx usb庫(kù)源碼<b class='flag-5'>詳解</b>:<b class='flag-5'>HAL</b>_PCDEx_SetRxFiFo 和 <b class='flag-5'>HAL</b>_PCDEx_SetTxFiFo

    基于標(biāo)準(zhǔn)庫(kù)函數(shù)與基于HAL庫(kù)函數(shù)的stm32編程方式對(duì)比

    以實(shí)例程序(串口通信),分析基于標(biāo)準(zhǔn)庫(kù)函數(shù)與基于HAL庫(kù)函數(shù)的stm32編程方式的差異一、基于標(biāo)準(zhǔn)庫(kù)函數(shù)的stm32編程方式二、基于HAL庫(kù)
    發(fā)表于 12-28 19:09 ?30次下載
    基于標(biāo)準(zhǔn)庫(kù)<b class='flag-5'>函數(shù)</b>與基于<b class='flag-5'>HAL</b>庫(kù)<b class='flag-5'>函數(shù)</b>的stm32編程方式對(duì)比

    STM32 HAL 庫(kù)延時(shí)函數(shù) HAL_Delay 解析

    HAL 庫(kù)有提供延時(shí)函數(shù),只不過(guò)它只能實(shí)現(xiàn)簡(jiǎn)單的毫秒級(jí)別延時(shí),沒有實(shí)現(xiàn) us 級(jí)別延時(shí)。下面我們列出HAL 庫(kù)實(shí)現(xiàn)延時(shí)相關(guān)的函數(shù)。首先是功能配置函數(shù)
    發(fā)表于 01-17 09:48 ?8次下載
    STM32 <b class='flag-5'>HAL</b> 庫(kù)延時(shí)<b class='flag-5'>函數(shù)</b> <b class='flag-5'>HAL</b>_Delay 解析

    HAL庫(kù)常用函數(shù)匯總

    1,系統(tǒng)函數(shù)HAL_Delay原型:voidHAL_Delay(uint32_tDelay);作用:利用滴答定時(shí)器生成的系統(tǒng)延遲函數(shù)參數(shù):Delay:延遲時(shí)間,單位是ms返回值:無(wú)示例代碼
    的頭像 發(fā)表于 11-29 08:00 ?5195次閱讀
    <b class='flag-5'>HAL</b>庫(kù)常用<b class='flag-5'>函數(shù)</b>匯總

    RA Swap模式在FSP中的支持(1)

    Assistance找到Call Quick Setup,鼠標(biāo)左鍵點(diǎn)選,保持左鍵按下的狀態(tài),拖動(dòng)到hal_entry.c文件的hal_entry()函數(shù)定義之前。
    的頭像 發(fā)表于 08-22 10:27 ?935次閱讀
    RA Swap模式在FSP中的支持(1)

    如何獲取入口函數(shù)不是__iar_program_start的Program entry的stack使用情況

    entry的stack使用相關(guān)信息: 如果對(duì)應(yīng)啟動(dòng)代碼沒有使用默認(rèn)的入口函數(shù)__iar_program_start,需要使用--entry鏈接器選項(xiàng)指定對(duì)應(yīng)的
    的頭像 發(fā)表于 11-25 16:23 ?1081次閱讀
    如何獲取<b class='flag-5'>入口</b><b class='flag-5'>函數(shù)</b>不是__iar_program_start的Program <b class='flag-5'>entry</b>的stack使用情況

    HAL庫(kù)的函數(shù)調(diào)用示例

    HAL(Hardware Abstraction Layer,硬件抽象層)庫(kù)是STM32等微控制器中常用的庫(kù),它為開發(fā)者提供了訪問(wèn)和控制硬件設(shè)備的接口。以下是一些常用的HAL庫(kù)函數(shù)及其調(diào)用示例: 一
    的頭像 發(fā)表于 12-02 14:01 ?1651次閱讀