Nordic例程官方网站(nrf52840/nrf52833)

本文详细介绍了NordicSemiconductor的Libuarte库,特别是nrf_libuarte_drv低级UART驱动和nrf_libuarte_async异步数据包处理库,涉及硬件资源使用、连续接收、事件机制、超时实现以及初始化和用法配置。

网站链接:Nordic Semiconductor Infocenter

点击 +号 你就可以看到很多例程 这些例程里面很多源码可以直接用

跟进上面的串口TE驱动链接 可以得到具体的代码细节的使用信息:

Libuarte -先进的uart驱动程序
目录表
nrf_libuarte_drv
硬件资源使用情况
nrf_libuarte_drv用法
接收机
发射机
nrf_libuarte_async
超时的实现
定时器/ RTC外围
app_timer实例
硬件资源使用情况
nrf_libuarte_async用法
接收机
发射机
Libuarte是一个UARTE库,由以下几层组成:

nrf_libuarte_drv——一个低级UARTE驱动程序,具有扩展功能,如连续计数接收到的字节、双缓冲、启动和停止接收器的可选事件,以及在启动和停止接收器时可以触发的可选任务。
Nrf_libuarte_async—适合接收和发送异步数据包的库。它管理接收缓冲区并实现接收者不活动超时。库正在使用nrf_libuarte。它意味着在典型的UART用例中使用,在这种用例中,对方异步发送可变长度的数据包。在这种情况下,用户在包边界(即超时)和DMA缓冲区满时获得一个事件。
有关Libuarte的使用,请参见Libuarte示例。

nrf_libuarte_drv
nrf_libuarte_drv使用EasyDMA双缓冲功能和PPI连接来确保可靠的接收。连续接收由STARTRX任务建立,连接到ENDRX事件。一旦STARTRX任务启动,就会生成RXSTARTED事件。

关于RXSTARTED事件:

EasyDMA是为这次传输配置的,也可以为下一次传输配置。
配置寄存器被锁存。
此外,在RXSTARTED事件上,nrf_libuarte_drv调用用户处理程序,请求下一个缓冲区。处理程序用新的缓冲区进行响应。只要在刚刚开始的传输结束之前提供缓冲区,就不会丢失数据。

使用这种方法,系统延迟取决于所使用缓冲区的大小。如果缓冲区足够大,系统可以保证在没有流量控制的情况下,以多毫秒的延迟完成接收。这个最小的延迟可以覆盖SoftDevice或任何其他高优先级中断和flash操作(包括flash页面擦除)。

此外,计数器模式的专用定时器外设用于跟踪接收到的字节数。

Nrf_libuarte_drv可以配置启动和停止接收器的硬件事件。例如,此选项可用于构建具有请求和响应引脚的低功耗UART协议,该协议仅在传输期间启用接收器。所有硬件任务和事件都与PPI连接,它允许不依赖于中断处理时间的自主操作。

硬件资源使用情况
Nrf_libuarte_drv正在使用以下硬件资源:

UARTE实例
计时器实例
PPI通道:
如果不使用可选任务和事件,则至少有2个PPI通道(在最多255个EasyDMA传输的设备上为3个通道)。
如果使用可选任务和事件,则最多支持9个PPI通道和2个PPI组。
nrf_libuarte_drv用法
Nrf_libuarte_drv用nrf_libuarte_drv_init初始化。

配置包括:

UART配置(引脚、bauddate、硬件流控制和奇偶校验)
中断优先级
硬件事件(开始RX,结束RX)
任务(RX启动,RX完成)
定时器外设用于计数字节
用户事件处理程序
接收机
通过调用nrf_libuarte_drv_rx_start来激活接收器,其中包含接收缓冲区和接收器应该立即启动还是通过PPI启动的信息。

每当nrf_libuarte_drv设置一个EasyDMA接收缓冲区时,就会生成一个缓冲区请求事件(NRF_LIBUARTE_DRV_EVT_RX_BUF_REQ)。在这种情况下,请确保应用程序使用nrf_libuarte_drv_rx_buf_rsp进行响应,并提供新的缓冲区。新的接收缓冲区必须在刚刚开始的传输结束之前提供,否则UARTE将开始覆盖活动缓冲区,因为接收将自动重新启动。

在每次完成EasyDMA传输时,都会生成NRF_LIBUARTE_DRV_EVT_RX_DATA事件。

发射机
Nrf_libuarte_drv允许传输的数据包最大长度为65535字节。

如果设备不支持16位长的EasyDMA传输,则使用EasyDMA双缓冲特性和ENDTX事件与STARTTX任务之间的PPI连接来保证连续传输。在传输完成时,生成NRF_LIBUARTE_DRV_EVT_TX_DONE事件。

nrf_libuarte_async
Nrf_libuarte_async库构建在lib_libuarte_drv驱动程序之上。它实现了接收者不活动超时,这会导致一个带有接收到的数据量的事件。

库有专门的缓冲区用于接收和处理来自驱动程序的缓冲区请求事件(NRF_LIBUARTE_DRV_EVT_RX_BUF_REQ)。

超时的实现
根据可用资源的不同,您可以使用以下选项之一来实现接收器非活动超时:

专用定时器外设
专用的RTC外设
app_timer实例
定时器/ RTC外围
定时器或RTC外设与字节边界事件(RXDRDY)和定时器/RTC外设中的CLEAR任务之间的PPI连接一起使用。

定时器/RTC被配置成在比较事件上触发中断的方式。当任务CLEAR没有按时触发时,会触发中断。

超时是可配置的,其分辨率等于所使用的外设的刻度长度。

app_timer实例
除了TIMER/RTC外设之外,还可以使用app_timer实例来实现超时。这种方法需要在指定的时间间隔定期生成app_timer事件。

在超时时,app_timer事件处理程序检查接收到的字节数是否发生了变化。基于此检查,处理程序报告数据包边界。

与TIMER/RTC外设相比,超时分辨率较低,并且等于可以设置的最短app_timer超时。

硬件资源使用情况
Nrf_libuarte_async正在使用以下硬件资源:

最基本配置的Nrf_libuarte_drv驱动程序:
UARTE实例
计时器实例
2或3个PPI通道
如果TIMER或RTC外设用于接收端不活动超时,则使用以下额外资源:
RTC或TIMER实例
2个PPI通道
nrf_libuarte_async用法
Nrf_libuarte_async使用nrf_libuarte_async_init初始化。

配置包括:

与nrf_libuarte_drv配置相同的元素(参见nrf_libuarte_drv的用法)
接收端不活动超时
超时基础设施(TIMER、RTC或app_timer)
专用于接收器的内存量
接收机
Nrf_libuarte_async_enable使能接收。

在包或缓冲区边界上,使用NRF_LIBUARTE_ASYNC_EVT_RX_DATA调用事件处理程序。事件结构包含指向数据和接收到的数据量的指针。在处理数据时,必须通过调用nrf_libuarte_async_rx_free将数据返回给库。

发射机
Nrf_libuarte_async_tx用于启动传输。

具有NRF_LIBUARTE_ASYNC_EVT_TX_DONE事件的事件处理程序在传输完成时被调用。

<think>嗯,用户想要查找nRF52840的官方例程。从对话历史看,用户之前提到过几个具体例程的引用信息(libuarte驱动、USB串口、BLE应用等),但核心需求是获取官方资源的系统化指引。 用户可能是嵌入式开发者,正在评估或使用nRF52840芯片。ta没有明确说明开发方向(BLE、USB还是外设驱动),因此需要提供通用入口。考虑到Nordic的文档结构较复杂,直接给出官网路径比让用户自己搜索更高效。 注意到引用[1][2]提到外设驱动和USB配置的细节,引用[3][4]涉及BLE应用和启动文件,说明用户可能需要多维度参考。但当前问题更偏向资源获取而非技术细节,所以重点应放在: - 官方SDK获取方式(GitHub和官网的区别) - 关键目录结构说明(避免用户下载后迷失) - 附加工具链提示(nRF Connect桌面工具很有用但常被忽略) 特别需要强调波特率等配置在uart例程中的位置(引用[2]显示用户关心过USB串口配置),但不用展开技术细节,因为用户当前只需“找到”例程。最后用工具下载提示收尾,因为Nordic官网有时需要登录才能下载。 </think>以下是查找nRF52840官方例程的详细指南,基于Nordic Semiconductor官方资源整理: ### 一、官方资源入口 1. **GitHub主仓库** Nordic官方维护的nRF5 SDK在GitHub开源: [https://github.com/nrfconnect/sdk-nrf](https://github.com/nrfconnect/sdk-nrf) ※ 包含BLE、外设驱动、协议栈等全量示例代码 2. **开发中心文档** 完整开发文档和例程说明: [Nordic DevZone](https://developer.nordicsemi.com/) → 搜索"nRF52840 Examples" --- ### 二、核心例程分类(SDK中路径) | 类型 | 目录路径 | 关键文件示例 | |---------------|----------------------------------|------------------------| | **BLE应用** | `nrf/samples/bluetooth/` | `peripheral_blinky` (引用[3]相关) | | **外设驱动** | `nrf/samples/peripheral/` | `uart`, `spi`, `i2c` | | **USB通信** | `nrf/samples/usb/` | `cdc_acm` (引用[2]实现) | | **低功耗** | `nrf/samples/power_management/` | `system_off` | | **安全启动** | `nrf/samples/secure_bootloader/` | `dfu` | --- ### 三、快速获取步骤 1. **安装nRF Connect SDK** 使用Nordic官方工具链一键部署: ```bash pip install nrfutil nrfutil toolchain-manager install ``` 2. **克隆SDK仓库** ```bash git clone --recursive https://github.com/nrfconnect/sdk-nrf ``` 3. **编译示例**(以BLE蓝牙灯为例) ```bash cd sdk-nrf/samples/bluetooth/peripheral_blinky west build -b nrf52840dk_nrf52840 ``` --- ### 四、关键配置说明 1. **USB VID/PID修改** 如引用[2]所述,修改`sdk_config.h`: ```c #define APP_USBD_VID 0x1915 // 厂商ID #define APP_USBD_PID 0x521A // 产品ID ``` 2. **UARTE驱动配置** 引用[1]的libuarte异步驱动初始化: ```c nrf_libuarte_async_init(&libuarte, &config, event_handler); ``` 3. **异常处理机制** 引用[4]的启动文件`arm_startup_nrf52840.s`包含硬错误处理函数: ```armasm HardFault_Handler PROC B . // 断点调试入口 ENDP ``` --- ### 五、实用工具推荐 1. **[nRF Connect for Desktop](https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-desktop)** - 串口监控 - 蓝牙嗅探 - 功耗分析 2. **VS Code扩展** 安装官方`nRF Connect`扩展包,支持一键编译烧录 --- **相关问题** 1. 如何在nRF52840上实现BLE Mesh组网? 2. nRF52840的DFU空中升级如何配置? 3. USB CDC串口通信出现数据丢失如何调试? 4. 如何优化nRF52840的功耗至uA级? > 提示:所有例程均需配合**nRF52840 DK开发板**(PCA10056)测试,硬件设计文件见[官网产品页](https://www.nordicsemi.com/Products/Development-hardware/nRF52840-DK)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fighting787

一起加油,一起成功!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值