欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

GPIO輸出——使用FSP庫點(diǎn)亮LED燈

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

GPIO輸出——使用FSP庫點(diǎn)亮LED

關(guān)于 IOPORT 的詳細(xì)分析,我們不再贅述,請(qǐng)讀者參考前面“第一個(gè)實(shí)驗(yàn):用寄存器點(diǎn)亮LED燈”章節(jié)。

11.1. 硬件設(shè)計(jì)

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

圖

11.2. 軟件設(shè)計(jì)

11.2.1. 新建工程

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

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

工程新建好之后,在工程根目錄的 “src” 文件夾下面新建 “l(fā)ed” 文件夾, 再進(jìn)入 “l(fā)ed” 文件夾里面新建 led 驅(qū)動(dòng)的源文件和頭文件:“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

警告

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

11.2.2. FSP配置

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

在 FSP 配置界面里面點(diǎn)開 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í)可以設(shè)置引腳的初始輸出電平。
IO引腳是否上拉。
驅(qū)動(dòng)器容量 IO引腳的驅(qū)動(dòng)能力設(shè)置。
輸出類型 IO引腳的輸出類型。 可以選 CMOS 推挽輸出或開漏輸出。

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

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

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

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

11.2.3. hal_entry入口函數(shù)

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

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

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

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庫啟動(dòng)文件詳解”章節(jié)介紹到,這里無需在意。

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

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

使用 R_BSP_SoftwareDelay 函數(shù)可以進(jìn)行延時(shí),LED 燈維持亮和滅這兩種狀態(tài)的時(shí)間由此函數(shù)決定。 它的第一個(gè)參數(shù)表示延時(shí)的時(shí)間量,第二個(gè)參數(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); //延時(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秒
     }

 #if BSP_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ú)拿出來,放到獨(dú)立的源文件/頭文件里面進(jìn)行封裝。 接下來將介紹封裝 LED 設(shè)備驅(qū)動(dòng)程序的一般方法。

11.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)容如下。

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

/* 使用寄存器來實(shí)現(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” 文件中添加對(duì)頭文件 “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); //延時(shí)1秒
      LED1_OFF; // LED1滅
      LED2_OFF; // LED2滅
      LED3_OFF; // LED3滅
      R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); //延時(shí)1秒
   }


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

11.3. 下載驗(yàn)證

將程序編譯并下載到開發(fā)板之后,按下復(fù)位按鍵來復(fù)位開發(fā)板, 可以觀察到開發(fā)板上面除了電源指示燈之外的3個(gè) LED 燈在同時(shí)緩慢閃爍, 3個(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ī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1592

    瀏覽量

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

    關(guān)注

    31

    文章

    5368

    瀏覽量

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

    關(guān)注

    25

    文章

    5125

    瀏覽量

    98292
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1217

    瀏覽量

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

    關(guān)注

    0

    文章

    34

    瀏覽量

    7184
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于51單片機(jī)通過GPIO點(diǎn)亮LED

    在之前的教程中,我們成功搭建了開發(fā)環(huán)境,初步對(duì)開發(fā)板的GPIO口有了一定的了解,在本教程中,我們將帶領(lǐng)大家制作第一個(gè)工程,就是通過GPIO口來點(diǎn)亮一盞LED
    發(fā)表于 07-17 14:18 ?6255次閱讀
    基于51單片機(jī)通過<b class='flag-5'>GPIO</b>口<b class='flag-5'>點(diǎn)亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    【CANNON試用體驗(yàn)】之GPIO--點(diǎn)亮LED

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

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

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

    如何利用stm32固件點(diǎn)亮LED

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

    匯編點(diǎn)亮LED的方法

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

    如何利用stm32的GPIO口去點(diǎn)亮一個(gè)LED

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

    控制GPIO輸出低電平來點(diǎn)亮LED

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

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

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

    IO輸出-點(diǎn)亮多個(gè)LED方法2

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

    STM32的GPIO輸出編程實(shí)例之點(diǎn)亮三色LED

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

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

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

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

    【STM32】標(biāo)準(zhǔn)與HAL對(duì)照學(xué)習(xí)教程三--使用庫函數(shù)配置GPIO點(diǎn)亮LED一、前言二、準(zhǔn)
    發(fā)表于 12-05 14:06 ?15次下載
    【STM32】標(biāo)準(zhǔn)<b class='flag-5'>庫</b>與HAL<b class='flag-5'>庫</b>對(duì)照學(xué)習(xí)教程三--使用庫函數(shù)配置<b class='flag-5'>GPIO</b><b class='flag-5'>點(diǎn)亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    ESP32入門之GPIO點(diǎn)亮一盞LED

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

    【STM32】開發(fā)板學(xué)習(xí)1 NUCLEO-L476RG:GPIO例程 點(diǎn)亮LED2

    【STM32】開發(fā)板學(xué)習(xí)1 NUCLEO-L476RG:GPIO例程 點(diǎn)亮LED2
    發(fā)表于 12-08 15:36 ?31次下載
    【STM32】開發(fā)板學(xué)習(xí)1 NUCLEO-L476RG:<b class='flag-5'>GPIO</b>例程 <b class='flag-5'>點(diǎn)亮</b><b class='flag-5'>LED</b>2<b class='flag-5'>燈</b>

    使用樹莓派GPIO點(diǎn)亮雙色LED

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