一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

CHANBAEK ? 來源:doc.embedfire.com ? 作者:doc.embedfire.com ? 2023-02-15 15:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

11.1. 硬件設(shè)計

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

圖

11.2. 軟件設(shè)計

11.2.1. 新建工程

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

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

工程新建好之后,在工程根目錄的 “src” 文件夾下面新建 “l(fā)ed” 文件夾, 再進入 “l(fā)ed” 文件夾里面新建 led 驅(qū)動的源文件和頭文件:“bsp_led.c” 和 “bsp_led.h”。 工程文件結(jié)構(gòu)如下。

文件結(jié)構(gòu)

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

警告

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

11.2.2. FSP配置

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

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

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

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

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

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

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

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

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

11.2.3. hal_entry入口函數(shù)

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

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

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

R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);

注解

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

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

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

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

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

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

代碼清單 11-1:hal_entry 入口函數(shù) [](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 */

     /* 初始化配置引腳(這里重復(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); //延時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
 }

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

11.2.4. 封裝 LED 設(shè)備驅(qū)動程序

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

代碼清單 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)

/* 使用寄存器來實現(xiàn) LED燈翻轉(zhuǎn) */
#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初始化函數(shù) */
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初始化函數(shù) */
void LED_Init(void)
{
   /* 初始化配置引腳(這里重復(fù)初始化了,可以注釋掉) */
   R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
}

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

代碼清單 11-4:hal_entry入口函數(shù) [](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. 下載驗證

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

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

    關(guān)注

    22

    文章

    1595

    瀏覽量

    109505
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5430

    瀏覽量

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

    關(guān)注

    25

    文章

    5622

    瀏覽量

    103615
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1279

    瀏覽量

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

    關(guān)注

    0

    文章

    43

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    在之前的教程中,我們成功搭建了開發(fā)環(huán)境,初步對開發(fā)板的GPIO口有了一定的了解,在本教程中,我們將帶領(lǐng)大家制作第一個工程,就是通過GPIO口來點亮一盞LED
    發(fā)表于 07-17 14:18 ?7169次閱讀
    基于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、程序下載入開發(fā)板上圖中LEDD3已
    發(fā)表于 02-28 15:08

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

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

    如何利用stm32固件點亮LED

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

    匯編點亮LED的方法

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

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

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

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

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

    【野火啟明6M5開發(fā)板體驗】開箱+認(rèn)識開發(fā)板+資料

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

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

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

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

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

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

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

    【STM32】標(biāo)準(zhǔn)與HAL對照學(xué)習(xí)教程三--使用庫函數(shù)配置GPIO點亮LED

    【STM32】標(biāo)準(zhǔn)與HAL對照學(xué)習(xí)教程三--使用庫函數(shù)配置GPIO點亮LED一、前言二、準(zhǔn)
    發(fā)表于 12-05 14:06 ?17次下載
    【STM32】標(biāo)準(zhǔn)<b class='flag-5'>庫</b>與HAL<b class='flag-5'>庫</b>對照學(xué)習(xí)教程三--使用庫函數(shù)配置<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都可以復(fù)用。本文就通過點亮一盞LED
    發(fā)表于 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】開發(fā)板學(xué)習(xí)1 NUCLEO-L476RG:GPIO例程 點亮LED2

    【STM32】開發(fā)板學(xué)習(xí)1 NUCLEO-L476RG:GPIO例程 點亮LED2
    發(fā)表于 12-08 15:36 ?33次下載
    【STM32】開發(fā)板學(xué)習(xí)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

    上一篇文章向大家介紹樹莓派的硬件部分、安裝操作系統(tǒng)及基礎(chǔ)設(shè)置。這篇文章將介紹樹莓派的強大的開發(fā)功能口——GPIO,以及利用GPIO點亮雙色LED
    的頭像 發(fā)表于 07-04 11:34 ?3182次閱讀
    使用樹莓派<b class='flag-5'>GPIO</b>口<b class='flag-5'>點亮</b>雙色<b class='flag-5'>LED</b><b class='flag-5'>燈</b>