91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

【瑞薩RA × Zephyr評測】LED、按鍵和UART

楓雪天 ? 來源:楓雪天 ? 2026-01-10 10:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

硬件: Renesas FPB-RA6E2 + 板載 LED 和按鍵
目標(biāo): 實現(xiàn)按鍵控制 LED 的開關(guān)狀態(tài),并通過 UART 輸出按鍵事件日志,驗證 GPIO 和串口通信功能。


1. 硬件連接與引腳定義

包含 GPIO 輸入輸出功能與 UART 數(shù)據(jù)傳輸引腳。

功能物理引腳 (Pin)信號定義接線說明
按鍵輸入P304Digital In (SW0)板載按鍵無需接線
LED 輸出P207Digital Out (LED0)板載 LED 無需接線
UART 發(fā)送P411UART TX連接到調(diào)試器
UART 接收P410UART RX連接到調(diào)試器

2. 軟件環(huán)境配置


2.1 Device Tree Overlay (app.overlay)

必須明確指定 GPIO 和 UART 的物理引腳綁定,并開啟外設(shè)狀態(tài)。

chosen {
    zephyr,console = &uart0;    /* in externalzephyrboardsrenesasfpb_ra6e2fpb_ra6e2.dts:22 */
    zephyr,shell-uart = &uart0; /* in externalzephyrboardsrenesasfpb_ra6e2fpb_ra6e2.dts:23 */
};

/* GPIO 配置 */
leds {
    compatible = "gpio-leds";
    led1: led1 {
        gpios = < &ioport2 7 GPIO_ACTIVE_HIGH >;
        label = "LED1";
    };
    led2: led2 {
        gpios = < &ioport2 6 GPIO_ACTIVE_HIGH >;
        label = "LED2";
    };
};

buttons {
    compatible = "gpio-keys";
    button0: s1 {
    gpios = < &ioport3 4 (GPIO_PULL_UP | GPIO_ACTIVE_LOW) >;
    label = "Push button switch 1";
        zephyr,code = < INPUT_KEY_0 >;
    };
};

/* UART 配置 */
&uart0 {
    status = "okay";
    pinctrl-0 = < &uart0_default >;
    pinctrl-names = "default";
    current-speed = < 115200 >; /* 波特率設(shè)置 */
};
};
};

2.2 Kconfig 配置 (prj.conf)

確保啟用了 GPIO 和 UART 驅(qū)動支持。

CONFIG_GPIO=y
CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y

3. 代碼邏輯分析

3.1 主程序代碼(main.c)

/*
 * Copyright (c) 2016 Open-RnD Sp. z o.o.
 * Copyright (c) 2020 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * NOTE: If you are looking into an implementation of button events with
 * debouncing, check out `input` subsystem and `samples/subsys/input/input_dump`
 * example instead.
 */

#include < zephyr/kernel.h >
#include < zephyr/device.h >
#include < zephyr/drivers/gpio.h >
#include < zephyr/sys/util.h >
#include < zephyr/sys/printk.h >
#include < inttypes.h >

#define SLEEP_TIME_MS	1

/*
 * Get button configuration from the devicetree sw0 alias. This is mandatory.
 */
#define SW0_NODE	DT_ALIAS(sw0)
#if !DT_NODE_HAS_STATUS_OKAY(SW0_NODE)
#error "Unsupported board: sw0 devicetree alias is not defined"
#endif
static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET_OR(SW0_NODE, gpios,
							      {0});
static struct gpio_callback button_cb_data;

/*
 * The led0 devicetree alias is optional. If present, we'll use it
 * to turn on the LED whenever the button is pressed.
 */
static struct gpio_dt_spec led = GPIO_DT_SPEC_GET_OR(DT_ALIAS(led0), gpios,
						     {0});

void button_pressed(const struct device *dev, struct gpio_callback *cb,
		    uint32_t pins)
{
	printk("Button pressed at %" PRIu32 "n", k_cycle_get_32());
}

int main(void)
{
	int ret;

	if (!gpio_is_ready_dt(&button)) {
		printk("Error: button device %s is not readyn",
		       button.port- >name);
		return 0;
	}

	ret = gpio_pin_configure_dt(&button, GPIO_INPUT);
	if (ret != 0) {
		printk("Error %d: failed to configure %s pin %dn",
		       ret, button.port- >name, button.pin);
		return 0;
	}

	ret = gpio_pin_interrupt_configure_dt(&button,
					      GPIO_INT_EDGE_TO_ACTIVE);
	if (ret != 0) {
		printk("Error %d: failed to configure interrupt on %s pin %dn",
			ret, button.port- >name, button.pin);
		return 0;
	}

	gpio_init_callback(&button_cb_data, button_pressed, BIT(button.pin));
	gpio_add_callback(button.port, &button_cb_data);
	printk("Set up button at %s pin %dn", button.port- >name, button.pin);

	if (led.port && !gpio_is_ready_dt(&led)) {
		printk("Error %d: LED device %s is not ready; ignoring itn",
		       ret, led.port- >name);
		led.port = NULL;
	}
	if (led.port) {
		ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT);
		if (ret != 0) {
			printk("Error %d: failed to configure LED device %s pin %dn",
			       ret, led.port- >name, led.pin);
			led.port = NULL;
		} else {
			printk("Set up LED at %s pin %dn", led.port- >name, led.pin);
		}
	}

	printk("Press the buttonn");
	if (led.port) {
		while (1) {
			/* If we have an LED, match its state to the button's. */
			int val = gpio_pin_get_dt(&button);

			if (val >= 0) {
				gpio_pin_set_dt(&led, val);
			}
			k_msleep(SLEEP_TIME_MS);
		}
	}
	return 0;
}

3.2 核心流程

程序采用中斷驅(qū)動的方式,實現(xiàn)了按鍵事件捕獲與 LED 狀態(tài)切換,同時通過 UART 輸出日志。

  1. 初始化階段
    • 配置 GPIO 引腳:P002 設(shè)置為輸入模式,啟用內(nèi)部上拉電阻;P003 設(shè)置為輸出模式。
    • 配置 UART:波特率 115200,8N1 格式。
    • 注冊按鍵中斷回調(diào)函數(shù)。
  2. 運行時邏輯
    • 按鍵按下時觸發(fā)中斷,切換 LED 狀態(tài)(開/關(guān))。
    • 在中斷回調(diào)中,記錄按鍵事件并通過 UART 輸出日志。
    • 主循環(huán)保持空閑,等待中斷觸發(fā)。

3.1 關(guān)鍵 API 使用

以下是代碼中使用的關(guān)鍵 API:

  • GPIO 初始化與控制
    gpio_pin_configure(gpio_dev, PIN_BTN, GPIO_INPUT | GPIO_PULL_UP);
    gpio_pin_configure(gpio_dev, PIN_LED, GPIO_OUTPUT);
    
  • UART 數(shù)據(jù)發(fā)送
    printk(str, args...);
    
  • 中斷注冊與處理
    gpio_pin_interrupt_configure(gpio_dev, PIN_BTN, GPIO_INT_EDGE_TO_ACTIVE);
    gpio_init_callback(&btn_cb, button_pressed, BIT(PIN_BTN));
    gpio_add_callback(gpio_dev, &btn_cb);
    

4. 實驗現(xiàn)象與數(shù)據(jù)分析

4.1 串口日志 (UART Output)

終端應(yīng)顯示如下數(shù)據(jù)流:

Button pressed at 91714454
Button pressed at 228051750
Button pressed at 342154106
Button pressed at 431864898
Button pressed at 514931258
...

4.2 板載 LED 行為

  • 初始狀態(tài):LED 關(guān)閉。
  • 每次按鍵按下,LED 狀態(tài)翻轉(zhuǎn)(開/關(guān))。
  • 視覺效果:LED 應(yīng)與按鍵動作同步,無明顯延遲。

5. 測評總結(jié)

本程序成功演示了 Renesas RA6E2 在 Zephyr RTOS 下的 GPIO 和 UART 外設(shè)控制。通過按鍵事件驅(qū)動 LED 狀態(tài)切換,并實時記錄日志到 UART,直觀地展示了嵌入式系統(tǒng)中“輸入-處理-輸出”的基本工作流程。代碼結(jié)構(gòu)清晰,適配了最新的驅(qū)動 API,適用于初學(xué)者學(xué)習(xí)和開發(fā)者快速驗證硬件功能。

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

    關(guān)注

    6076

    文章

    45500

    瀏覽量

    670698
  • 瑞薩
    +關(guān)注

    關(guān)注

    37

    文章

    22482

    瀏覽量

    90904
  • Zephyr
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    如何搭建RA VS code開發(fā)環(huán)境

    在上一篇文章“當(dāng)RA MCU遇見Zephyr,打通嵌入式開發(fā)任督二脈!”中,我們介紹了Zephyr極具前景的發(fā)展趨勢以及開發(fā)板對
    的頭像 發(fā)表于 11-05 14:41 ?4455次閱讀
    如何搭建<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b> VS code開發(fā)環(huán)境

    RA6M3 HMI Board評測挑戰(zhàn)】-RA6M3上的CAN實踐

    RA6M3 HMI Board 評測大挑戰(zhàn)】-RA6M3上的CAN實踐
    的頭像 發(fā)表于 10-17 14:55 ?3665次閱讀
    【<b class='flag-5'>RA</b>6M3 HMI Board<b class='flag-5'>評測</b>挑戰(zhàn)】-<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b>6M3上的CAN實踐

    當(dāng)RA MCU遇見Zephyr系列(3)——在Vs code中配置Zephyr集成開發(fā)環(huán)境

    RA生態(tài)工作室關(guān)注我們上一篇文章介紹了如何在VScode中使用官方插件為RA芯片創(chuàng)建項目與項目調(diào)試,相信大家對RA在VScode中的開發(fā)
    的頭像 發(fā)表于 01-01 10:04 ?4883次閱讀
    當(dāng)<b class='flag-5'>RA</b> MCU遇見<b class='flag-5'>Zephyr</b>系列(3)——在Vs  code中配置<b class='flag-5'>Zephyr</b>集成開發(fā)環(huán)境

    RA-Eco-RA6M4開發(fā)板評測】——2.串口打印

    3_ON;delay_ms(200);LED3_OFF; printf(\"歡迎試用電子RA-Eco-RA6M4開發(fā)板評測\\\\r\\
    發(fā)表于 07-16 13:20

    RA6E2】zephyr系統(tǒng)適配、點亮leduart輸出測試

    就行了。如下: 到這里板卡基本也就適配完成,但是由于ek_ra6e2板子的串口、led、按鍵等外設(shè)引腳和RA-Eco-RA6E2-64PIN-V1.0 開發(fā)板存在差異,所以我們要
    發(fā)表于 11-16 17:57

    FPB-RA6E2試用】【原創(chuàng)】【RA × Zephyr開發(fā)板評測】+入門級任務(wù)測試1

    很榮幸獲得了RA × ZephyrFPB-RA
    發(fā)表于 12-24 23:52

    FPB-RA6E2試用】基礎(chǔ)功能使用1

    ,首先從點燈開始。 zephyrLED工程 在配置好環(huán)境以后,需要驗證配置的環(huán)境是否正常,生成的代碼是否能夠在開發(fā)板上成功跑通。在零基礎(chǔ)的情況下,參考
    發(fā)表于 12-28 21:35

    FPB-RA6E2試用】【RA × Zephyr開發(fā)板評測】Linux環(huán)境配置和初步試用

    1. 前言 很榮幸獲得了RA × ZephyrFPB-
    發(fā)表于 12-29 12:55

    FPB-RA6E2試用】【原創(chuàng)】基于【FPB-RA6E2】Windows 下Zephyr RTOS自定義項目開發(fā)全流程(創(chuàng)建-編譯-燒錄-串口調(diào)試)

    【原創(chuàng)】基于【FPB-RA6E2】Windows 下Zephyr RTOS自定義項目開發(fā)全流程(創(chuàng)建 · 編譯 · 燒錄 · 串口調(diào)試) 《整體全流程演示》。 使用的硬件:
    發(fā)表于 01-01 15:35

    FPB-RA6E2試用】【RA × Zephyr開發(fā)板評測】+以按鍵控制LED

    安裝過程中常會出現(xiàn)安裝失敗的情況,為此需要多次重復(fù)才能確保完成。 在完成安裝后,即可進行工程的創(chuàng)建。 具體其操作為,點擊界面左側(cè)下方的“Create Renesas RA Project”。隨后,將
    發(fā)表于 01-05 17:04

    FPB-RA6E2試用】GPIO-Zephyr RTOS 閃爍程序及設(shè)備樹理解

    ://docs.zephyrproject.org/latest/samples/basic/blinky/README.html 5.3 項目代碼 *附件:fpb_ra6e2_basic_blinky.zip 感謝電子發(fā)燒友平臺,感謝
    發(fā)表于 01-13 14:37

    RA × Zephyr開發(fā)板評測】基于PWM的電機轉(zhuǎn)速控制

    。 Zephyr對于RAE62 開發(fā)板的支持很友好,很多例程直接下載進去即可運行,比如LED,UART,DAC等, 配置外設(shè)階段需要通過
    發(fā)表于 01-16 01:19

    FPB-RA6E2試用】環(huán)境配置及基礎(chǔ)任務(wù)代碼示例

    RA × Zephyr開發(fā)板評測】 開發(fā)板基礎(chǔ)功能測試與代碼移植 本報告兩篇開發(fā)內(nèi)容主要以入門級的外設(shè)為標(biāo)準(zhǔn)進行測試,在入門級測試需求
    發(fā)表于 01-24 20:47

    RA × Zephyr開發(fā)板評測】+ CANFD

    感謝【RA x Zephyr評測】三、CAN模塊測試_
    發(fā)表于 02-03 00:08

    RA × Zephyr評測】SSD1306顯示MPU6050加速度計讀數(shù)

    本文介紹了在RA6E2單片機上基于Zephyr RTOS操作SPI與I2C總線的實驗
    的頭像 發(fā)表于 01-10 10:24 ?760次閱讀
    【<b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b> × <b class='flag-5'>Zephyr</b><b class='flag-5'>評測</b>】SSD1306顯示MPU6050加速度計讀數(shù)