亚洲av成人精品日韩一区,97久久久精品综合88久久,玩弄japan白嫩少妇hd,亚洲av片不卡无码久久,玩弄人妻少妇500系列

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

定義IO初始化結構體

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

掃碼添加小助手

加入工程師交流群

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

8.2.5定義IO初始化結構體

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

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

左右滑動查看完整內容

/* IOPORT 初始化結構體類型定義 */


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操作函數

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

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

左右滑動查看完整內容

/* IO 操作函數(調用一次只能操作一個 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 初始化函數(調用一次只能初始化一個 IO 引腳) */
voidIOPORT_Init(IOPORT_Init_t *ioport_init);

然后在ra_ioport.c源文件里面實現這些IO操作函數。

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

左右滑動查看完整內容

/* 讀引腳電平 */


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);
}


/* 翻轉引腳電平 */
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初始化函數

最后編寫IOPORT初始化函數。

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

左右滑動查看完整內容

/* IOPORT 初始化函數 */


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入口函數

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

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

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

注解

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

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

左右滑動查看完整內容

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


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


/* 調用取消寫保護函數 */
IOPORT_PinAccessEnable();


/* 使用 IOPORT 初始化結構體和調用初始化函數來配置 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 模式,而不是復用功能模式或其他
的
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);//調用初始化函數,進行 LED1 引腳初始化
led_io_init.Pin = IO_PIN_03;//更換引腳號
IOPORT_Init(&led_io_init);//結構體其他屬性不變,再次調用初始化函數,進行 LED2 引
腳初始化
led_io_init.Pin = IO_PIN_04;//更換引腳號
IOPORT_Init(&led_io_init);//結構體其他屬性不變,再次調用初始化函數,進行 LED3 引
腳初始化


/** 此時 3 個 LED 燈的引腳默認輸出的是高電平,所以 3 個 LED 燈都會默認不亮
* 我們先打開所有 LED 燈,然后在 while 循環(huán)里讓 LED1 閃爍:每秒鐘翻轉一次狀態(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)
{
/* 使用函數 IOPORT_PinToggle 翻轉 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ā)板上面除了電源指示燈之外的3個LED燈當中有兩個燈常亮,還有一個燈在緩慢閃爍。閃爍著的LED燈為LED1,它每秒鐘(1000毫秒)便改變一次亮滅的狀態(tài)。

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

    關注

    3

    文章

    4380

    瀏覽量

    64844
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5679

    瀏覽量

    104611
  • 結構體
    +關注

    關注

    1

    文章

    131

    瀏覽量

    11113
  • FSP
    FSP
    +關注

    關注

    0

    文章

    44

    瀏覽量

    7421

原文標題:定義IO初始化結構體——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(21)

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RT-Thread自動初始化詳解

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

    自動初始化機制原理詳解

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

    LED實驗中把結構定義放在時鐘初始化后出現報錯

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

    C51的結構初始化編譯錯誤

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

    定時器初始化結構定義

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

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

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

    STM32f1單片機的HAL庫是如何去定義定時器相關的初始化結構

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

    請問STM32通用定時器初始化結構定義是什么

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

    結構初始化怎么才能在keil4中編譯通過呢

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

    利用結構數組方便地控制單片機IO相關資料推薦

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

    USART初始化結構詳解

    USART 初始化結構詳解標準庫函數對每個外設都建立了一個初始化結構,比如USART_Ini
    發(fā)表于 02-22 06:08

    結構數組的初始化

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

    結構定義、初始化和賦值

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

    STM32的IO口基本操作:初始化結構,設置系統時鐘,開啟外設時鐘資料下載

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

    C語言指定初始化器解析及其應用

    C90 標準要求初始化程序中的元素以固定的順序出現,與要初始化的數組或結構中的元素順序相同。但是在新標準 C99 中,增加了一個新的特...
    發(fā)表于 02-07 11:28 ?2次下載
    C語言指定<b class='flag-5'>初始化</b>器解析及其應用