在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

GPIO輸出——使用FSP庫點亮LED燈

CHANBAEK ? 來源:doc.embedfire.com ? 作者:doc.embedfire.com ? 2023-02-15 15:43 ? 次閱讀

GPIO輸出——使用FSP庫點亮LED

關于 IOPORT 的詳細分析,我們不再贅述,請讀者參考前面“第一個實驗:用寄存器點亮LED燈”章節。

11.1. 硬件設計

野火啟明6M5開發板的 LED 電路圖如圖所示。 圖中 RA6M5 芯片的 P400、P403、P404 引腳分別通過一個 2.2 KΩ 的限流電阻連接到 LED1、LED2、LED3 這三個 LED 燈的陰極,LED 燈的陽極連接到 3.3V 電源。 而 LED4 是電源指示燈,只要開發板通電就會亮。

圖

11.2. 軟件設計

11.2.1. 新建工程

對于 e2 studio 開發環境:拷貝一份我們之前的 e2s 工程模板 “05_Template” , 然后將工程文件夾重命名為 “11_GPIO_LED” ,最后再將它導入到我們的 e2 studio 工作空間中。

對于 Keil 開發環境:拷貝一份我們之前的 Keil 工程模板 “06_Template” , 然后將工程文件夾重命名為 “11_GPIO_LED” ,并進入該文件夾里面雙擊 Keil 工程文件,打開該工程。

工程新建好之后,在工程根目錄的 “src” 文件夾下面新建 “led” 文件夾, 再進入 “led” 文件夾里面新建 led 驅動的源文件和頭文件:“bsp_led.c” 和 “bsp_led.h”。 工程文件結構如下。

文件結構

11_GPIO_LED
├─ ......
└─ src
   ├─ led
   │  ├─ bsp_led.c
   │  └─ bsp_led.h
   └─ hal_entry.c

警告

注意:對于使用 Keil 開發環境的用戶,將代碼文件放到 “src” 文件夾下之后, Keil 軟件并不會自動將它們加入到工程,這時候需要打開 RASC FSP 配置界面, 點擊一次單擊右上角的 “Generate Project Content” 按鈕,從而 “src” 文件夾下的代碼文件就會被自動加進工程中。 接著關閉 FSP 配置界面返回到 Keil,然后進行一次編譯會彈出一個提示框提示工程結構發生了變化,點擊確定即可。 對于使用 e2 studio 的用戶則不需如此。

11.2.2. FSP配置

首先打開 “11_GPIO_LED” 項目的 FSP 配置界面,接下來我們要在這個界面里配置芯片的引腳。

在 FSP 配置界面里面點開 Pins” -> “Ports” -> “P4” -> “P400” , 然后將連接到LED燈的 IO 引腳的 “Mode” 屬性配置為 “Output mode (Initial High)” , 表示該引腳默認輸出高電平,其他的屬性默認即可。 其他的LED引腳 “P403”“P404” 也是按照這樣子配置。

圖Pin Configuration 頁面的 IOPORT 屬性介紹:

IOPORT 屬性介紹 [](https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter11/chapter11.html#id10 "永久鏈接至表格")| IOPORT 屬性 | 描述 |
| - | - |
| ---------------------------------------------------------------------------------------------- |

模式 IO引腳的工作模式,包括輸入模式和輸出模式,選擇輸出模式時可以設置引腳的初始輸出電平。
IO引腳是否上拉。
驅動器容量 IO引腳的驅動能力設置。
輸出類型 IO引腳的輸出類型。 可以選 CMOS 推挽輸出或開漏輸出。

三個 LED 引腳都配置完成之后的配置界面如圖所示。

圖配置完成之后按下快捷鍵 “Ctrl + S” 保存,最后點右上角的 “Generate Project Content” 圖標, 讓軟件根據我們的設置自動生成配置代碼即可。

對于 Keil 這邊 RASC 的 FSP 配置也是一樣的,需要先通過 RASC 軟件打開 Keil 工程相關的 FSP 配置界面。 具體的方法在前面的章節已經詳述過了,這里不再重復說明。

如果從左側“項目資源管理器”打開工程目錄下的 “ra_gen/pin_data.c” 源文件, 就會看到 g_bsp_pin_cfg_data 數組中已經加入了LED引腳的配置數據。 在 IOPORT 初始化的時候,它們會被用來初始化引腳。

11.2.3. hal_entry入口函數

當使用 RTOS 時,程序從 main 函數開始進行線程調度; 當沒有使用 RTOS 時,C語言程序的入口函數 main 函數調用了 hal_entry 函數。 由于我們新建的工程是沒有選用 RTOS 的,因此,用戶程序從 hal_entry 函數開始執行。 首先打開 “\\src\\hal_entry.c” 文件,在 hal_entry 函數里面編寫我們的代碼。

想要實現LED燈的閃爍效果,其思路非常地簡單:首先初始化配置 LED 引腳, 然后在一個死循環里面重復此流程:LED 燈亮,延時1s,LED 燈滅,延時1s,然后 LED 燈又亮。 如此反復循環,就能實現 LED 燈的閃爍效果。

首先,我們需要通過 R_IOPORT_Open 函數來初始化 IOPORT 模塊, 在調用 R_IOPORT_Open 函數時,需要傳入控制塊參數 g_ioport_ctrl 和配置參數 g_ioport.p_cfg。

R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);

注解

實際上,由于在 R_BSP_WarmStart 函數中已經打開了一個 IOPORT 模塊, 因此并不需要重復打開 IOPORT 模塊,雖然重復打開也不會出錯。 R_BSP_WarmStart 函數將會在后面的“FSP庫啟動文件詳解”章節介紹到,這里無需在意。

成功打開 IOPORT 模塊后,說明 IO 引腳已經全部初始化完成。 接著讓程序繼續往下執行,進入到 while(1) 死循環。 在 while(1) 循環里,我們使用 R_IOPORT_PinWrite 和 R_BSP_SoftwareDelay 這兩個函數來實現我們前面所述的思路。

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

使用 R_BSP_SoftwareDelay 函數可以進行延時,LED 燈維持亮和滅這兩種狀態的時間由此函數決定。 它的第一個參數表示延時的時間量,第二個參數表示時間單位。

  • BSP_DELAY_UNITS_SECONDS 表示秒;
  • BSP_DELAY_UNITS_MILLISECONDS 表示毫秒;
  • BSP_DELAY_UNITS_MICROSECONDS 表示微秒。

完整代碼如下:代碼清單11_1

代碼清單 11-1:hal_entry 入口函數 [](https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter11/chapter11.html#id4 "永久鏈接至代碼")

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

     /* 初始化配置引腳(這里重復初始化了,可以注釋掉) */
     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); //延時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); //延時1秒
     }

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

到此,我們已經完全實現了讓 LED 閃爍的效果,讀者可以跳到“下載驗證”小節驗證其實際效果。 按照編寫驅動程序的一般要求,我們可以把 LED 的驅動單獨拿出來,放到獨立的源文件/頭文件里面進行封裝。 接下來將介紹封裝 LED 設備驅動程序的一般方法。

11.2.4. 封裝 LED 設備驅動程序

讓我們重新規劃一下我們的工程結構。 在 src 文件夾里面新建一個“led”文件夾,再在該文件夾里面新建兩個文件:“bsp_led.c”和“bsp_led.h”, 如同前面“新建工程”小節所述,把它們加入到我們的工程中。 這兩個文件的內容如下。

代碼清單 11-2:led/bsp_led.h [](https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter11/chapter11.html#id5 "永久鏈接至代碼")

#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "hal_data.h"

/* LED引腳置低電平 LED燈亮 */
#define LED1_ON     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_00, BSP_IO_LEVEL_LOW)
#define LED2_ON     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_03, BSP_IO_LEVEL_LOW)
#define LED3_ON     R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_LOW)

/* LED引腳置高電平 LED燈滅 */
#define LED1_OFF    R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_00, BSP_IO_LEVEL_HIGH)
#define LED2_OFF    R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_03, BSP_IO_LEVEL_HIGH)
#define LED3_OFF    R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_HIGH)

/* 使用寄存器來實現 LED燈翻轉 */
#define LED1_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初始化函數 */
void LED_Init(void);

#endif

代碼清單 11-3:led/bsp_led.c [](https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter11/chapter11.html#id6 "永久鏈接至代碼")

#include "bsp_led.h"

/* LED初始化函數 */
void LED_Init(void)
{
   /* 初始化配置引腳(這里重復初始化了,可以注釋掉) */
   R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}

在 “hal_entry.c” 文件中添加對頭文件 “bsp_led.h” 的包含, 然后將 hal_entry 入口函數的內容改為如下。

代碼清單 11-4:hal_entry入口函數 [](https://doc.embedfire.com/mcu/renesas/fsp_ra/zh/latest/doc/chapter11/chapter11.html#id7 "永久鏈接至代碼")

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

void hal_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); //延時1秒
      LED1_OFF; // LED1滅
      LED2_OFF; // LED2滅
      LED3_OFF; // LED3滅
      R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); //延時1秒
   }


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

11.3. 下載驗證

將程序編譯并下載到開發板之后,按下復位按鍵來復位開發板, 可以觀察到開發板上面除了電源指示燈之外的3個 LED 燈在同時緩慢閃爍, 3個 LED 燈每秒鐘改變一次亮滅的狀態。

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

    關注

    22

    文章

    1592

    瀏覽量

    108007
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120377
  • 開發板
    +關注

    關注

    25

    文章

    5050

    瀏覽量

    97484
  • GPIO
    +關注

    關注

    16

    文章

    1204

    瀏覽量

    52104
  • FSP
    FSP
    +關注

    關注

    0

    文章

    34

    瀏覽量

    7141
收藏 人收藏

    評論

    相關推薦

    基于51單片機通過GPIO點亮LED

    在之前的教程中,我們成功搭建了開發環境,初步對開發板的GPIO口有了一定的了解,在本教程中,我們將帶領大家制作第一個工程,就是通過GPIO口來點亮一盞LED
    發表于 07-17 14:18 ?6014次閱讀
    基于51單片機通過<b class='flag-5'>GPIO</b>口<b class='flag-5'>點亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    【CANNON試用體驗】之GPIO--點亮LED

    _Pin_3);delay_ms(500);GPIO_ResetBits(GPIOB,GPIO_Pin_3);delay_ms(500);}4、程序下載入開發板上圖中LEDD3已
    發表于 02-28 15:08

    STM32LL系列教程(二)——點亮LED 精選資料推薦

    LL直接操作寄存器,改變GPIO輸出狀態,進而點亮LED
    發表于 08-03 06:54

    如何利用stm32固件點亮LED

    簡直是保姆級別…贊贊贊!二、正文:這是LED的硬件電路,綠燈為PB0,紅燈為PB5,藍燈為PB1。這些LED的陰極都是連接到STM32的GPIO引腳,只要我們控制
    發表于 08-24 07:44

    匯編點亮LED的方法

    IX6MULL之匯編點亮LED一、原理分析1、查看原理圖2、配置GPIO復用3、配置GPIO的電氣特性一、原理分析IX6MULL是恩智浦公
    發表于 12-08 06:08

    如何利用stm32的GPIO口去點亮一個LED

    stm32的GPIO口的基本結構是怎樣構成的?stm32的GPIO口的工作模式有哪幾種呢?如何利用stm32的GPIO口去點亮一個LED
    發表于 12-15 07:04

    控制GPIO輸出低電平來點亮LED

    控制GPIO輸出低電平來點亮LED。 */_start:/* 1、使能所有時鐘 */ldr r0, =0X020C4068/* CCGR0
    發表于 01-12 08:34

    【野火啟明6M5開發板體驗】開箱+認識開發板+資料

    10. 初識瑞薩FSP固件11. GPIO輸出——使用FSP
    發表于 12-20 23:28

    IO輸出-點亮多個LED方法2

    4-IO輸出-點亮多個LED方法2---51單片機源代碼 用keil直接打開
    發表于 06-15 18:17 ?18次下載

    STM32的GPIO輸出編程實例之點亮三色LED

    本實驗通過STM32的三個GPIO口驅動三色LED的三個通道,將GPIO設置為推挽輸出模式,采用灌電流的方式與LED連接,
    的頭像 發表于 02-07 11:14 ?2.8w次閱讀
    STM32的<b class='flag-5'>GPIO</b><b class='flag-5'>輸出</b>編程實例之<b class='flag-5'>點亮</b>三色<b class='flag-5'>LED</b>

    2. 匯編實現GPIO輸出實驗(LED)

    基于I.MX6U通過匯編實現點亮LED的實驗,分析GPIO的控制方法和配置。一、原理圖分析LED0 接到了 GPIO_3 上,
    發表于 12-01 19:06 ?10次下載
    2. 匯編實現<b class='flag-5'>GPIO</b><b class='flag-5'>輸出</b>實驗(<b class='flag-5'>LED</b>)

    【STM32】標準與HAL對照學習教程三--使用庫函數配置GPIO點亮LED

    【STM32】標準與HAL對照學習教程三--使用庫函數配置GPIO點亮LED一、前言二、準
    發表于 12-05 14:06 ?15次下載
    【STM32】標準<b class='flag-5'>庫</b>與HAL<b class='flag-5'>庫</b>對照學習教程三--使用庫函數配置<b class='flag-5'>GPIO</b><b class='flag-5'>點亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    ESP32入門之GPIO點亮一盞LED

    物理GPIO引腳,除了一些具有特殊用途的GPIO外,大部分GPIO都可以復用。本文就通過點亮一盞LED
    發表于 12-07 17:06 ?10次下載
    ESP32入門之<b class='flag-5'>GPIO</b>:<b class='flag-5'>點亮</b>一盞<b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    【STM32】開發板學習1 NUCLEO-L476RG:GPIO例程 點亮LED2

    【STM32】開發板學習1 NUCLEO-L476RG:GPIO例程 點亮LED2
    發表于 12-08 15:36 ?31次下載
    【STM32】開發板學習1 NUCLEO-L476RG:<b class='flag-5'>GPIO</b>例程 <b class='flag-5'>點亮</b><b class='flag-5'>LED</b>2<b class='flag-5'>燈</b>

    使用樹莓派GPIO點亮雙色LED

    上一篇文章向大家介紹樹莓派的硬件部分、安裝操作系統及基礎設置。這篇文章將介紹樹莓派的強大的開發功能口——GPIO,以及利用GPIO點亮雙色LED
    的頭像 發表于 07-04 11:34 ?2336次閱讀
    使用樹莓派<b class='flag-5'>GPIO</b>口<b class='flag-5'>點亮</b>雙色<b class='flag-5'>LED</b><b class='flag-5'>燈</b>
    主站蜘蛛池模板: 人成xxxwww免费视频| 午夜免费看片| 精品黄色片| 国产亚洲精品久久久久久久软件| 国产综合免费视频| 久久99国产精品免费观看| 在线国产三级| 五月婷婷免费视频| 狠狠做深爱婷婷综合一区| 国产aaa级一级毛片| 97人人做人人爱| 天天干天天射天天舔| 久久国产午夜精品理论片34页| 97国内精品久久久久久久影视 | 天天摸天天舔天天操| 国产ccc| 黄色插插插| 色人阁婷婷| 激情网站网址| 天天综合天天综合色在线| 国产免费福利网站| 亚洲一区二区在线视频| 一色桃子juy774在线播放| 日本亚洲欧美国产日韩ay高清| 韩日中文字幕| www.夜夜骑| 在线天堂中文新版www| 黄色视屏在线免费观看| 国产精品久久久久久久久免费| 亚洲欧美精品一区二区| 免费看欧美一级特黄a大片一| www.五月天| 国产精品秒播无毒不卡| 一级特黄aa大片一又好看| ww免费视频| 国产精品秒播无毒不卡| 四虎影院色| 都市激情综合| 在线观看日本亚洲一区| 色欲香天天天综合网站| 俺去啦五月|