chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

定義IO初始化結(jié)構(gòu)體

瑞薩嵌入式小百科 ? 來源:野火電子 ? 2025-07-16 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

歡迎回到我們的RA系列FSP庫開發(fā)實戰(zhàn)指南頻道,下面我們將繼續(xù)講解“自己寫庫——構(gòu)建庫函數(shù)雛形”部分:

8.2.5定義IO初始化結(jié)構(gòu)體

由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據(jù)情況配置它們。因此我們定義一個IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此該結(jié)構(gòu)體類型的變量可以包含IOPORT的相關(guān)功能配置。

列表5:代碼清單8-4:ra_ioport.h文件

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

/* IOPORT 初始化結(jié)構(gòu)體類型定義 */


typedefstruct
{
IO_Port_tPort;
IO_Pin_tPin;
IO_Mode_tMode;
IO_Dir_tDir;
IO_OType_tOType;
IO_DriveCapability_tDrive;
IO_Level_tLevel;
IO_Pull_tPull;
} IOPORT_Init_t;

8.2.6編寫IO操作函數(shù)

我們把IO操作函數(shù)的聲明和IO初始化函數(shù)的聲明都放在ra_ioport.h頭文件。

列表6:代碼清單8-5:ra_ioport.h文件

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

/* IO 操作函數(shù)(調(diào)用一次只能操作一個 IO 引腳) */
uint32_tIOPORT_PinRead(IO_Port_t port, IO_Pin_t pin);
voidIOPORT_PinWrite(IO_Port_t port, IO_Pin_t pin, IO_Level_t?
→level);
voidIOPORT_PinToggle(IO_Port_t port, IO_Pin_t pin);
voidIOPORT_PinAccessEnable(void);
voidIOPORT_PinAccessDisable(void);


/* IO 初始化函數(shù)(調(diào)用一次只能初始化一個 IO 引腳) */
voidIOPORT_Init(IOPORT_Init_t *ioport_init);

然后在ra_ioport.c源文件里面實現(xiàn)這些IO操作函數(shù)。

列表7:代碼清單8-6:ra6m5_ioport.c文件

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

/* 讀引腳電平 */


uint32_tIOPORT_PinRead(IO_Port_t port, IO_Pin_t pin)
{
/* Read pin level. */
returnR_PFS->PORT[port >>8].PIN[pin].PmnPFS_b.PIDR;
}


/* 寫引腳電平 */
voidIOPORT_PinWrite(IO_Port_t port, IO_Pin_t pin, IO_Level_t level)
{
uint32_t pfs_bits =R_PFS->PORT[port >>8].PIN[pin].PmnPFS;//讀寄存器?
→PmnPFS


pfs_bits &= ~(uint32_t)0x1;//清零 PODR 位
R_PFS->PORT[port >>8].PIN[pin].PmnPFS= (pfs_bits | level);
}


/* 翻轉(zhuǎn)引腳電平 */
voidIOPORT_PinToggle(IO_Port_t port, IO_Pin_t pin)
{
uint32_t pfs_bits =R_PFS->PORT[port >>8].PIN[pin].PmnPFS;//讀寄存器?
→PmnPFS
pfs_bits ^= (uint32_t)0x1;//取反 PODR 位
R_PFS->PORT[port >>8].PIN[pin].PmnPFS= pfs_bits;
}


/* 引腳訪問使能 */
voidIOPORT_PinAccessEnable(void)
{
R_PMISC->PWPR=0;///< Clear BOWI bit - writing to PFSWE bit?
→enabled
R_PMISC->PWPR= 1U << 6U;?///< Set PFSWE bit - writing to PFS register?
→enabled
}


/* 引腳訪問禁止 */
voidIOPORT_PinAccessDisable(void)
{
R_PMISC->PWPR=0;///< Clear PFSWE bit - writing to PFS register?
→disabled
R_PMISC->PWPR= 1U << 7U;?///< Set BOWI bit - writing to PFSWE bit?
→disabled
}

8.2.7編寫IO初始化函數(shù)

最后編寫IOPORT初始化函數(shù)。

列表8:代碼清單8-7:ra_ioport.c文件

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

/* IOPORT 初始化函數(shù) */


voidIOPORT_Init(IOPORT_Init_t *ioport_init)
{
uint32_t pfs_bits =0;//不讀取寄存器 PmnPFS
if(ioport_init->Mode==IO_MODE_GPIO)//如果引腳用作普通 GPIO 功能
{
if(ioport_init->Dir==IO_DIR_INPUT)/* 用作輸入模式 */
{
pfs_bits |= (ioport_init->Pull) <Dir==IO_DIR_OUTPUT)/* 用作輸出模式 */
{
pfs_bits |= (ioport_init->Dir) <Level) <Mode) <Drive) <PORT[ioport_init->Port>>8].PIN[ioport_init->Pin].PmnPFS= pfs_
→bits;
}

8.2.8hal_entry入口函數(shù)

前一章節(jié)實驗里有講過,當(dāng)使用RTOS時,程序從main函數(shù)開始進行線程調(diào)度;當(dāng)沒有使用RTOS時,C語言程序的入口函數(shù)main函數(shù)調(diào)用了hal_entry函數(shù)。本章節(jié)實驗的工程也是沒有選用RTOS的,因此,用戶程序是從hal_entry函數(shù)開始執(zhí)行。

打開“srchal_entry.c”文件,我們在“hal_entry.c”文件中添加對頭文件“ra_ioport.h”的包含,然后在hal_entry函數(shù)里面編寫我們的代碼。

以啟明6M5開發(fā)板為例,RA6M5工程的hal_entry數(shù)代碼如下所示。

注解

啟明4M2開發(fā)板和啟明2L1開發(fā)板的用戶可直接打開配套的“09_Register_MyLib”例程查看該代碼,限于篇幅,不在本章中貼出。

列表9:代碼清單8-8:hal_entry.c文件

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

/* IOPORT 模塊頭文件 (自己寫庫——構(gòu)建庫函數(shù)雛形) */
#include"ioport/ra_ioport.h"


voidhal_entry(void)
{
/*TODO:add your own code here */


/* 調(diào)用取消寫保護函數(shù) */
IOPORT_PinAccessEnable();


/* 使用 IOPORT 初始化結(jié)構(gòu)體和調(diào)用初始化函數(shù)來配置 PFS 寄存器 */
IOPORT_Init_t led_io_init;
led_io_init.Port = IO_PORT_04;
led_io_init.Pin = IO_PIN_00;
led_io_init.Mode = IO_MODE_GPIO;//普通 GPIO 模式,而不是復(fù)用功能模式或其他
的
led_io_init.Dir = IO_DIR_OUTPUT;
led_io_init.OType = IO_OTYPE_PP;
led_io_init.Drive = IO_DRIVE_LOW;
led_io_init.Level = IO_LEVEL_HIGH;//輸出高電平(LED 熄滅)
//LED_IO_Init.Pull = IO_NO_PULL; //端口方向處于輸出模式下是用不了上拉的,所以這
個屬性沒意義
IOPORT_Init(&led_io_init);//調(diào)用初始化函數(shù),進行 LED1 引腳初始化
led_io_init.Pin = IO_PIN_03;//更換引腳號
IOPORT_Init(&led_io_init);//結(jié)構(gòu)體其他屬性不變,再次調(diào)用初始化函數(shù),進行 LED2 引
腳初始化
led_io_init.Pin = IO_PIN_04;//更換引腳號
IOPORT_Init(&led_io_init);//結(jié)構(gòu)體其他屬性不變,再次調(diào)用初始化函數(shù),進行 LED3 引
腳初始化


/** 此時 3 個 LED 燈的引腳默認(rèn)輸出的是高電平,所以 3 個 LED 燈都會默認(rèn)不亮
* 我們先打開所有 LED 燈,然后在 while 循環(huán)里讓 LED1 閃爍:每秒鐘翻轉(zhuǎn)一次狀態(tài)
*/
IOPORT_PinWrite(IO_PORT_04, IO_PIN_00, IO_LEVEL_LOW);//點亮 LED1
IOPORT_PinWrite(IO_PORT_04, IO_PIN_03, IO_LEVEL_LOW);//點亮 LED2
IOPORT_PinWrite(IO_PORT_04, IO_PIN_04, IO_LEVEL_LOW);//點亮 LED3


while(1)
{
/* 使用函數(shù) IOPORT_PinToggle 翻轉(zhuǎn) LED1 引腳電平 */
IOPORT_PinToggle(IO_PORT_04, IO_PIN_00);
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
}


#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

8.3下載驗證

編寫好上述代碼,然后將程序編譯并下載到開發(fā)板之后,按下復(fù)位按鍵來復(fù)位開發(fā)板,可以觀察到實驗現(xiàn)象與上一章的實驗現(xiàn)象相同:開發(fā)板上面除了電源指示燈之外的3個LED燈當(dāng)中有兩個燈常亮,還有一個燈在緩慢閃爍。閃爍著的LED燈為LED1,它每秒鐘(1000毫秒)便改變一次亮滅的狀態(tài)。

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

    關(guān)注

    3

    文章

    4400

    瀏覽量

    66365
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5999

    瀏覽量

    110061
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    131

    瀏覽量

    11248
  • FSP
    FSP
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    RT-Thread自動初始化詳解

    初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過宏定義的方式進行申明,就會在系統(tǒng)啟動過程中被執(zhí)行,非常的方便。 1 普通初始化 前面也講了,我們在寫單片機的程序時,需要對硬件進行
    的頭像 發(fā)表于 06-25 21:38 ?1.2w次閱讀
    RT-Thread自動<b class='flag-5'>初始化</b>詳解

    自動初始化機制原理詳解

    自動初始化機制是指初始化函數(shù)不需要被顯式調(diào)用,只需要在函數(shù)定義處通過宏定義的方式進行申明,就會在系統(tǒng)啟動過程中被執(zhí)行。這篇文章就來探索一下其中的奧秘, 簡單理解其原理!
    的頭像 發(fā)表于 12-16 09:33 ?1620次閱讀
    自動<b class='flag-5'>初始化</b>機制原理詳解

    LED實驗中把結(jié)構(gòu)定義放在時鐘初始化后出現(xiàn)報錯

    有人知道LED實驗中,led.c文件中把結(jié)構(gòu)定義放在時鐘初始化后面,會報錯,這是什么原因呢?正常程序如下:GPIO_InitTypeDef GPIO_InitStructure
    發(fā)表于 03-23 04:37

    C51的結(jié)構(gòu)初始化編譯錯誤

    8051的結(jié)構(gòu)初始化錯誤,我查了下這種初始化是C99可以支持的,但在option中設(shè)置沒有C99模式選項,怎么破?
    發(fā)表于 03-25 02:37

    定時器初始化結(jié)構(gòu)定義

    定時器初始化結(jié)構(gòu)定義為typedef struct{uint16_t TIM_Prescaler; uint16_t TIM_CounterMode; uint16_t TIM_Pe
    發(fā)表于 08-18 07:12

    【原創(chuàng)分享】變量的初始化技巧

    由于在嵌入式系統(tǒng)中必須考慮程序規(guī)模的問題,因此,對程序中的變量的初始化也需要進行慎重的考慮。在C語言中,基本數(shù)據(jù)結(jié)構(gòu)(字符型、整型)的初始化相對簡單;數(shù)組、結(jié)構(gòu)
    發(fā)表于 09-08 15:28

    STM32f1單片機的HAL庫是如何去定義定時器相關(guān)的初始化結(jié)構(gòu)

    STM32F1定時器可分為哪幾類呢?STM32f1單片機的HAL庫是如何去定義定時器相關(guān)的初始化結(jié)構(gòu)的?
    發(fā)表于 11-23 07:39

    請問STM32通用定時器初始化結(jié)構(gòu)定義是什么

    請問STM32通用定時器初始化結(jié)構(gòu)定義是什么?
    發(fā)表于 11-23 06:56

    結(jié)構(gòu)初始化怎么才能在keil4中編譯通過呢

    結(jié)構(gòu)初始化怎么才能在keil4中編譯通過呢?有何解決辦法?
    發(fā)表于 12-20 07:58

    利用結(jié)構(gòu)數(shù)組方便地控制單片機IO相關(guān)資料推薦

    定義結(jié)構(gòu)typedef struct {GPIO_TypeDef *GPIOx;u8Pinx;} relay_io;初始化
    發(fā)表于 01-18 09:10

    USART初始化結(jié)構(gòu)詳解

    USART 初始化結(jié)構(gòu)詳解標(biāo)準(zhǔn)庫函數(shù)對每個外設(shè)都建立了一個初始化結(jié)構(gòu),比如USART_Ini
    發(fā)表于 02-22 06:08

    結(jié)構(gòu)數(shù)組的初始化

    ] = {3,4},[4] = {5,6},[2] = {7,8}, [0] = {9,10}};//首次見到的初始化方法,這樣賦值順序可自定義。但有什么用呢? for(i = 0 ; i
    發(fā)表于 05-21 15:24

    結(jié)構(gòu)定義初始化和賦值

    type)的一類。結(jié)構(gòu)可以被聲明為變量、指針或數(shù)組等,用以實現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)同時也是一些元素的集合,這些元素稱為
    發(fā)表于 11-20 09:29 ?5.7w次閱讀

    STM32的IO口基本操作:初始化結(jié)構(gòu),設(shè)置系統(tǒng)時鐘,開啟外設(shè)時鐘資料下載

    電子發(fā)燒友網(wǎng)為你提供STM32的IO口基本操作:初始化結(jié)構(gòu),設(shè)置系統(tǒng)時鐘,開啟外設(shè)時鐘資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計、用
    發(fā)表于 03-29 16:49 ?17次下載
    STM32的<b class='flag-5'>IO</b>口基本操作:<b class='flag-5'>初始化</b><b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>,設(shè)置系統(tǒng)時鐘,開啟外設(shè)時鐘資料下載

    GraniStudio:IO初始化以及IO資源配置例程

    1.文件運行 導(dǎo)入工程 雙擊運行桌面GraniStudio.exe。 通過引導(dǎo)界面導(dǎo)入IO初始化以及IO資源配置例程,點擊導(dǎo)入按鈕。 打開IO初始化
    的頭像 發(fā)表于 08-22 17:34 ?634次閱讀
    GraniStudio:<b class='flag-5'>IO</b><b class='flag-5'>初始化</b>以及<b class='flag-5'>IO</b>資源配置例程