伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

nrf_serial庫的使用技巧

CHANBAEK ? 來源:EEMaker電子創客營 ? 作者:DK45王 ? 2023-10-24 14:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

nrf_serial 庫是nordic封裝的比較上層的串口抽象層??梢灾С侄鄠€串口,可以使用阻塞、中斷、DMA三種模式。接口API比較簡單,但是在使用之前需要先進行比較多的宏定義。

SDK_CONFIG使能配置

在sdk_config中使能如下配置

NRFX_UARTE_ENABLED
NRFX_UART_ENABLED
NRF_SERIAL_ENABLED

并把對應的c文件添加到工程中,h頭文件路徑包含進工程中

添加串口底層配置定義

#define UART_TX_PIN 5
#define UART_RX_PIN 6
NRF_SERIAL_DRV_UART_CONFIG_DEF(uart_drv_config,
                      UART_RX_PIN, UART_TX_PIN,
                      NRF_UART_PSEL_DISCONNECTED, NRF_UART_PSEL_DISCONNECTED,
                      NRF_UART_HWFC_DISABLED, NRF_UART_PARITY_EXCLUDED,
                      NRF_UART_BAUDRATE_115200,
                      UART_DEFAULT_CONFIG_IRQ_PRIORITY);

該配置主要是用來配置串口的引腳、波特率、中斷優先級等和硬件配置相關的東西。

添加FIFO和BUFFER定義

#define SERIAL_FIFO_TX_SIZE 128
#define SERIAL_FIFO_RX_SIZE 256
NRF_SERIAL_QUEUES_DEF(serial_queues, SERIAL_FIFO_TX_SIZE, SERIAL_FIFO_RX_SIZE);
#define SERIAL_BUFF_TX_SIZE 1
#define SERIAL_BUFF_RX_SIZE 1
NRF_SERIAL_BUFFERS_DEF(serial_buffs, SERIAL_BUFF_TX_SIZE, SERIAL_BUFF_RX_SIZE);

這兩個東西很容易讓人分不清,為什么既要定義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事件回調定義

static void uart_evt_handler_t(struct nrf_serial_s const * p_serial,nrf_serial_event_t event)
{
    if(event==NRF_SERIAL_EVENT_RX_DATA)
    {
    }
    else if(event==NRF_SERIAL_EVENT_FIFO_ERR)
    {
    }
    else if(event==NRF_SERIAL_EVENT_DRV_ERR)
    {
    }
}

前面的SERIAL_BUFF_RX_SIZE設置的是1,當接收到一個byte就會產生一個NRF_SERIAL_EVENT_RX_DATA事件。收到的數據nrf_serial自動的把數據存入到了queue中了。應用可以在接收事件中立馬調用nrf_serial_read函數去讀取數據,也可以放在app_scheduler中去

添加NRF_SERIAL定義

NRF_SERIAL_UART_DEF(serial_uarte, 0);
NRF_SERIAL_CONFIG_DEF(  serial_config, NRF_SERIAL_MODE_DMA,
                        &serial_queues, &serial_buffs, 
                        uart_evt_handler_t, NULL);

初始化nrf_serial

ret_code_t ret;
ret = nrf_serial_init(&serial_uarte, &uart_drv_config, &serial_config);
APP_ERROR_CHECK(ret);

當初始化以后就直接打開的接收功能,一旦有數據接收到就會產生事件。

發送數據接口函數

ret_code_t nrf_serial_write(nrf_serial_t const * p_serial,
                            void const * p_data,
                            size_t size,
                            size_t * p_written,
                            uint32_t timeout_ms);

接收數據接口函數

ret_code_t nrf_serial_read(nrf_serial_t const * p_serial,
                           void * p_data,
                           size_t size,
                           size_t * p_read,
                           uint32_t timeout_ms);

當使用DMA模式的時候,該函數需要在收到接收事件以后再調用,直接從queue取出接收到的數據。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 封裝
    +關注

    關注

    128

    文章

    9309

    瀏覽量

    148969
  • 中斷
    +關注

    關注

    5

    文章

    918

    瀏覽量

    43858
  • 串口
    +關注

    關注

    15

    文章

    1626

    瀏覽量

    83237
  • dma
    dma
    +關注

    關注

    3

    文章

    582

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    nRF24L01+ Altium Designer文件

    nRF24L01+ Altium Designer文件下載鏈接
    發表于 04-30 15:26

    請問EZ-Serial固件是否使用任何OSS(開源軟件)或軟件?

    EZ-Serial 固件是否使用任何 OSS(開源軟件)或軟件?
    發表于 07-02 08:14

    NORDIC藍牙芯片NRF54l15的dsp支持分享

    Nordic Semiconductor 的 nRF54L15 是支持 DSP(數字信號處理)的。 這主要得益于它所采用的核心處理器架構以及 Nordic 完善的 SDK 支持。以下是具體的分析
    發表于 12-17 16:03

    在很多單片機調試通過的 NRF24L01

    最近看論壇,有些人調試這個,很多的時候都不成功。所以共享一個自己使用的在很多MCU上調試通過的NRF24L01。這個是從mbed上移植過來的,相當的穩定。而且對于開發者來說使用起來也很簡單。先看
    發表于 09-21 14:33

    NRF24L01P原理圖庫_PCB封裝資源下載

    NRF24L01P原理圖庫,PCB封裝的資源下載PCB這個行業IPC標準化的NRF24L01P原理圖庫,PCB封裝資源,此資料供大家一起學習,探討制作封裝
    發表于 10-19 17:04

    STM32與NRF24L01是怎樣通過arduino進行通信的

    STM32與NRF24L01是怎樣通過arduino進行通信的?
    發表于 12-16 07:47

    如何將nRF24l01模塊與Arduino等微控制器平臺連接?

    使用 SPI 協議進行通信,因此可以輕松與任何微控制器連接。使用Arduino變得容易得多,因為隨時可用。標準nRF24L01 模塊的引腳排列如下所示該模塊的工作電壓為1.9V至3.6V(通常為3.3V
    發表于 03-01 14:52

    請問nRF52832能移植ARM的DSP嗎?

    nRF52832能移植ARM的DSP嗎?
    發表于 10-16 07:51

    Using the Serial Port on the M

    Using the Serial Port on the MAXQ610 Microcontroller Abstract: The MAXQ610 microcontroller
    發表于 08-13 12:05 ?1562次閱讀

    NRF905工作模式

    NRF905工作模式NRF905工作模式NRF905工作模式NRF905工作模式NRF905工作模式NR
    發表于 11-19 15:24 ?10次下載

    NRF24L01接收程序

    程序是NRF24L01接收程序 接收到字符顯示在OLED上面,包含文件非常簡單易懂適合入門學習
    發表于 06-14 15:29 ?5次下載

    Mixly arduino nrf2401+對講機制作

    ;SPI.h>#include “nRF24L01.h”#include “RF24.h”用NRF2401+搞了個對講機,搭建容易代碼簡單。主要用的的是 RF24Audio 語音。需要元件一個功放模塊,麥克風模塊 按鈕
    發表于 12-17 18:08 ?22次下載
    Mixly arduino <b class='flag-5'>nrf</b>2401+對講機制作

    NRF52840與NRF52832的性能區別

    藍牙版本的不斷更新,大部分客戶慢慢都向往著藍牙5.0。當然對于前不久NORDIC剛出的藍牙5.0 nrf52840,很多人都還不是很了解。NRF52840可以說是NRF52832的超強升級版,雖然
    的頭像 發表于 02-24 15:02 ?6300次閱讀

    NRF51822和NRF52832的主要區別

    對于NRF51822和NRF52832的選擇性相信大家也是非常困惑的,哪個性價比高?下面為大家講下NRF51822和NRF52832的一個區別,讓大家能夠更好的快速選型加快研發產品進度
    的頭像 發表于 02-20 15:24 ?2305次閱讀

    Nordic nRF51/nRF52開發流程說明

    Nordic nRF52系列包括nRF52832/nRF52840/nRF52810/nRF52811/
    的頭像 發表于 06-17 14:25 ?1810次閱讀
    Nordic <b class='flag-5'>nRF</b>51/<b class='flag-5'>nRF</b>52開發流程說明