nrf_serial的使用

nrf_serial 库是nordic封装的比较上层的串口抽象层。可以支持多个串口,可以使用阻塞、中断、DMA三种模式。接口API比较简单,但是在使用之前需要先进行比较多的宏定义。

在SDK_CONFIG使能配置

在sdk_config中使能如下配置

并把对应的c文件添加到工程中,h头文件路径包含进工程中

添加串口底层配置定义

该配置主要是用来配置串口的引脚、波特率、中断优先级等和硬件配置相关的东西。

添加FIFO和BUFFER定义

这两个东西很容易让人分不清,为什么既要定义queue又要定义一个buffer,是不是有点重复?

这里的BUFFER实际上就是传递给了底层,在DMA模式下当收到数据就直接把数据搬到了BUFFER里面。BUFFER定义的大小可以决定当收到几个byte以后会产生一个DMA中断,通知到上层就是一个NRF_SERIAL_EVENT_RX_DATA事件。所以为了让每接收一个byte会通知到上层来,通常就把SERIAL_BUFF_RX_SIZE设置为1了。

每一次DMA中断nrf_serial就会自动从BUFFER中取出接收到的数据,取出来的数据又会被写入到QUEUE中。应用读取接收到的数据实际上也就是从queue中提取出来了。

添加serial事件回调定义

前面的SERIAL_BUFF_RX_SIZE设置的是1,当接收到一个byte就会产生一个NRF_SERIAL_EVENT_RX_DATA事件。收到的数据nrf_serial自动的把数据存入到了queue中了。应用可以在接收事件中立马调用nrf_serial_read函数去读取数据,也可以放在app_scheduler中去

添加NRF_SERIAL定义

初始化nrf_serial

当初始化以后就直接打开的接收功能,一旦有数据接收到就会产生事件。

发送数据接口函数

接收数据接口函数

当使用DMA模式的时候,该函数需要在收到接收事件以后再调用,直接从queue取出接收到的数据。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注