日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C51- NRF24L01 无线串口模块

發(fā)布時間:2023/12/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C51- NRF24L01 无线串口模块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.硬件知識

1.1 nRF24L01的引腳功能

(IO方向是相對模塊而言的)


CE:Chip Enable,芯片使能,在發(fā)送和接收過程中都要將這個引腳拉高。
IRQ: 低電平觸發(fā),當狀態(tài)寄存器中 TX_DS、RX_DR 或 MAX_RT 為高時觸發(fā)中斷,當 MCU 給中斷源寫 1 時,中斷引腳被禁止。默認狀態(tài)下所有的中斷源是被禁止的。

1.2 通信條件

兩個NRF24L01,收發(fā)雙方需要滿足4個條件:
1.發(fā)射接收頻道相同(設(shè)置頻道寄存器RF_CH 0-125)
2.發(fā)射接收地址相同(設(shè)置TX_ADDR和RX_ADDR_P0相同 5個8位地址 )
3.發(fā)射接收數(shù)據(jù)寬度相同(n<=32)
4.發(fā)射接收速率相同(250K 1M 2M)

1.2.1 傳輸協(xié)議如下

2.代碼塊

/********************************************************************************************************* function:nRF24L01_TxPacket(unsigned char* rx_buf) Description:發(fā)送 tx_buf 中數(shù)據(jù),盡量配置一下TX_PLOAD_WIDTH,發(fā)送的長度,最高32字節(jié),設(shè)置太高沒必要后面都是0無效數(shù)據(jù) Input:unsigned char* rx_buf 要發(fā)送的數(shù)據(jù) Output:返回0x10 說明達到最發(fā)重發(fā)次數(shù),返回0x20說明發(fā)送成功,返回0xFF說明發(fā)送錯誤 Return: *********************************************************************************************************/ unsigned char NRF24L01_TxPacket(u8 *tx_buf) {u8 sta; EXTI->IMR&=~(EXTI_Line8);//關(guān)閉中斷NRF2401_CE_LOW; //只有在 CE=0 時才能對NRF24L01進行設(shè)置,否則易出現(xiàn)問題 SPI_Write_Buf(NRF24L01_WRITE_REG + RX_ADDR_P0,(uint8_t*)TX_ADDRESS,TX_ADR_WIDTH); //裝載接收端地址SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); //裝載數(shù)據(jù),以及發(fā)送數(shù)據(jù)的長度//SPI_RW_Reg(NRF24L01_WRITE_REG + CONFIG, 0x0e); //IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送NRF2401_CE_HIGH; //置高CE,激發(fā)數(shù)據(jù)發(fā)送Delay_us(10); //CE拉高后必須有一個10us以上的延時while(GPIO_ReadInputDataBit(NRF2401_IRQ_PORT,NRF2401_IRQ_PIN)); //發(fā)送完成IRQ會拉低,自動置高sta = SPI_Read(STATUS);SPI_RW_Reg(FLUSH_TX,0xff); //把TX_FIFO清空,就發(fā)一次SPI_RW_Reg(NRF24L01_WRITE_REG + STATUS, sta);if(sta&STATUS_MAX) //判斷是否達到最大重發(fā)次數(shù){SPI_RW_Reg(FLUSH_TX,0xff); //清除TX FIFO寄存器 EXTI->IMR|=EXTI_Line8;//打開中斷return STATUS_MAX; //返回0x10}if(sta&STATUS_TX) //判斷是否發(fā)送完成{EXTI->IMR|=EXTI_Line8;return STATUS_TX; //返回0x20 }EXTI->IMR|=EXTI_Line8;return 0xff; //發(fā)送失敗,返回0xFF }

總結(jié)

以上是生活随笔為你收集整理的C51- NRF24L01 无线串口模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。