基于NRF Connect SDK在NRF52840开发板配置UART1引脚及初始化的方法咨询
在Zephyr中为NRF52840配置UART1及自定义引脚(连接RYS8330)
一、设备树配置(核心步骤)
Zephyr通过设备树指定硬件引脚映射,你需要在板级设备树文件(比如nrf52840dk_nrf52840.dts或自定义板级dts)中修改UART1的配置:
- 找到并修改UART1节点,启用设备并指定自定义引脚:
&uart1 { status = "okay"; tx-pin = <6>; /* 自定义TX引脚,对应P0.06,根据实际接线修改 */ rx-pin = <8>; /* 自定义RX引脚,对应P0.08,根据实际接线修改 */ current-speed = <9600>; /* RYS8330默认波特率为9600,需匹配模块参数 */ // 若模块支持流控,可添加rts-pin、cts-pin配置,RYS8330通常不需要 };
注意:引脚编号对应芯片引脚序号,NRF52840的P0.x对应0-31,P1.x对应32-63,比如P1.00对应编号32,需根据实际接线调整。
- 保存设备树后重新编译工程,让配置生效。
二、代码初始化与数据读取
在应用代码中完成UART1的初始化,读取并解析RYS8330的NMEA数据:
1. 引入必要头文件
#include <zephyr/kernel.h> #include <zephyr/drivers/uart.h> #include <string.h>
2. 定义UART设备与参数
/* 绑定设备树中的uart1节点 */ #define UART_DEVICE_NODE DT_NODELABEL(uart1) /* UART通信参数,需与RYS8330一致 */ static const struct uart_config uart_cfg = { .baudrate = 9600, .parity = UART_CFG_PARITY_NONE, .stop_bits = UART_CFG_STOP_BITS_1, .data_bits = UART_CFG_DATA_BITS_8, .flow_ctrl = UART_CFG_FLOW_CTRL_NONE, }; static const struct device *uart_dev = DEVICE_DT_GET(UART_DEVICE_NODE);
3. 初始化设备并读取数据
int main(void) { int ret; /* 检查UART设备是否就绪 */ if (!device_is_ready(uart_dev)) { printk("UART1 device not ready!\n"); return -1; } /* 配置UART参数 */ ret = uart_configure(uart_dev, &uart_cfg); if (ret < 0) { printk("Failed to configure UART1: %d\n", ret); return ret; } /* 循环读取并处理NMEA数据 */ uint8_t buf[128]; while (1) { ret = uart_fifo_read(uart_dev, buf, sizeof(buf)); if (ret > 0) { // 解析NMEA语句(如GPGGA帧)提取纬度、经度、卫星数 printk("Received %d bytes: %.*s\n", ret, ret, buf); } k_msleep(100); } }
三、关键注意事项
- 确认RYS8330的UART参数(波特率、奇偶校验等)与代码/设备树配置完全匹配,默认是9600 8N1。
- NRF52840和RYS8330均为3.3V电平,可直接接线,避免接入5V导致硬件损坏。
- 若设备树中无uart1节点,需在
prj.conf中确保CONFIG_SERIAL=y和CONFIG_UART_1=y已开启。
内容的提问来源于stack exchange,提问作者20200516
相关产品推荐
相关产品推荐

