娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

如何通過STM32驅動nRF24L01發送數據

發布者:AngelicJourney最新更新時間:2024-05-11 來源: elecfans關鍵字:STM32  驅動nRF24L01  發送數據 手機看文章 掃描二維碼
隨時隨地手機看文章

最近在一個項目中用到了nRF24L01這個無線2.4G收發芯片,項目中有主機和分機,默認都是使用數據通道0,主機通過nRF24L01發送數據后,對應地址的分機在收到數據后會返回一個確認數據包給主機(注意:這個確認數據包并不是nRF24L01自動應答時的數據包,而是自定義的一個數據包,說明了就是雙方都能進行收發),在經過長時間的摸索之后,終于將接收和發送都調通了,基本的SPI驅動我使用的是正點原子的教程,我是使用的中斷法來處理相應的收發工作。


我的軟件硬件環境大致如下:

服務端:STM32F103VET6+u/COS-III

從機端:STM32F103RBT6+u/COS-III

庫函數是使用的3.5版本的。

在這里我只是列出主機部分的代碼,從機上的都是差不多的。

下面是nRF24L01的驅動部分

頭文件部分(24l01.h):

#ifndef__24L01_H

#define__24L01_H

#include“config.h”

#ifnRF24L01_EN》0u

#include“sys_temp.h”

/*---------------------------------------------------------------------------------------------

NRF24L01寄存器操作命令及寄存器地址

-----------------------------------------------------------------------------------------------*/

#defineSPI_READ_REG0x00//讀配置寄存器,低5位為寄存器地址

#defineSPI_WRITE_REG0x20//寫配置寄存器,低5位為寄存器地址

#defineRD_RX_PLOAD0x61//讀RX有效數據,1~32字節

#defineWR_TX_PLOAD0xA0//寫TX有效數據,1~32字節

#defineFLUSH_TX0xE1//清除TXFIFO寄存器。發射模式下用

#defineFLUSH_RX0xE2//清除RXFIFO寄存器。接收模式下用

#defineREUSE_TX_PL0xE3//重新使用上一包數據,CE為高,數據包被不斷發送。

#defineNOP0xFF//空操作,可以用來讀狀態寄存器

#defineCONFIG0x00//配置寄存器地址;bit0:1接收模式,0發射模式;bit1:電選擇;bit2:CRC模式;bit3:CRC使能;

//bit4:中斷MAX_RT(達到最大重發次數中斷)使能;bit5:中斷TX_DS使能;bit6:中斷RX_DR使能

#defineEN_AA0x01//使能自動應答功能bit0~5,對應通道0~5

#defineEN_RXADDR0x02//接收地址允許,bit0~5,對應通道0~5

#defineSETUP_AW0x03//設置地址寬度(所有數據通道):bit1,0:00,3字節;01,4字節;02,5字節;

#defineSETUP_RETR0x04//建立自動重發;bit3:0,自動重發計數器;bit7:4,自動重發延時250*x+86us

#defineRF_CH0x05//RF通道,bit6:0,工作通道頻率;

#defineRF_SETUP0x06//RF寄存器;bit3:傳輸速率(0:1Mbps,1:2Mbps);bit2:1,發射功率;bit0:低噪聲放大器增益

#defineSTATUS0x07//狀態寄存器;bit0:TXFIFO滿標志;bit3:1,接收數據通道號(最大:6);bit4,自動重發完成中斷

//bit5:數據發送完成中斷;bit6:接收數據完成中斷;

#defineMAX_TX0x10//達到最大發送次數中斷,即自動重發完成中斷

#defineTX_OK0x20//TX發送完成中斷,即數據發送完成中斷

#defineRX_OK0x40//接收到數據中斷,即數據接收完成中斷

#defineOBSERVE_TX0x08//發送檢測寄存器,bit7:4,數據包丟失計數器;bit3:0,重發計數器

#defineCD0x09//載波檢測寄存器,bit0,載波檢測;

#defineRX_ADDR_P00x0A//數據通道0接收地址,最大長度5個字節,低字節在前

#defineRX_ADDR_P10x0B//數據通道1接收地址,最大長度5個字節,低字節在前

#defineRX_ADDR_P20x0C//數據通道2接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P30x0D//數據通道3接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P40x0E//數據通道4接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;

#defineRX_ADDR_P50x0F//數據通道5接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;

#defineTX_ADDR0x10//發送地址(低字節在前),ShockBurstTM模式下,RX_ADDR_P0與此地址相等

#defineRX_PW_P00x11//接收數據通道0有效數據寬度(1~32字節),設置為0則非法

#defineRX_PW_P10x12//接收數據通道1有效數據寬度(1~32字節),設置為0則非法

#defineRX_PW_P20x13//接收數據通道2有效數據寬度(1~32字節),設置為0則非法

#defineRX_PW_P30x14//接收數據通道3有效數據寬度(1~32字節),設置為0則非法

#defineRX_PW_P40x15//接收數據通道4有效數據寬度(1~32字節),設置為0則非法

#defineRX_PW_P50x16//接收數據通道5有效數據寬度(1~32字節),設置為0則非法

#defineFIFO_STATUS0x17//FIFO狀態寄存器;bit0,RXFIFO寄存器空標志;bit1,RXFIFO滿標志;bit2,3,保留

//bit4,TXFIFO空標志;bit5,TXFIFO滿標志;bit6,1,循環發送上一數據包.0,不循環;

/*---------------------------------------------------------------------------------------------

24L01的用到的單片機引腳

-----------------------------------------------------------------------------------------------*/

#defineNRF24L01_SPI_Periph_CLKRCC_APB2Periph_GPIOB//無線2.4G模塊用到的引腳的外設時鐘源

#define NRF24L01_SPI_GPIO_SRC GPIOB


關鍵字:STM32  驅動nRF24L01  發送數據 引用地址:如何通過STM32驅動nRF24L01發送數據

上一篇:STM32單片機的USART接收數據問題解決方案
下一篇:STM32單片機ADC的模擬看門狗的測試

推薦閱讀最新更新時間:2025-05-25 20:46

串行口通信上位機發送0~65536間的數據,數碼管上顯示
一. 硬件設計 二. 軟件設計 1. 程序功能 以16進制發送一個0-65536之間的任一數,當單片機收到后在數碼管上動態顯示出來,波特率自定. 2. 程序源碼 #include reg52.h #define uchar unsigned char #define uint unsigned int #define BUF_LEN 2 sbit dula = P2 ^ 6; sbit wela = P2 ^ 7; uint inbuf , dData; uchar flag, count; uchar wan, qian, bai, shi, ge; //數碼管編碼表 uc
[單片機]
串行口通信上位機<font color='red'>發送</font>0~65536間的<font color='red'>數據</font>,數碼管上顯示
STM32: gcc下printf重定向
1. 創建工程 用cubemx創建一個工程makefile工程。記得開串口。 2. 重定向 在main.c對printf重定向,增加如下代碼: #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int
[單片機]
基于stm32的多功能時鐘5——LCD12864庫函數的建立
在上一章中,小編實現了多功能時鐘的測距功能。在這一章中,小編本來打算介紹人機交互界面的設計。但是,后來還是想了一下,先將LCD庫函數建立起來,因為真正的技術重點在這里。至于UI的設計,咱們將在下一章介紹。但至于UI設計的美觀程度,我只能盡力而為,畢竟咱們的LCD12864液晶分別率只有128*64,而且是單色的,先天不足。 1.模塊介紹 LCD12864液晶顯示屏 液晶顯示器種類很多,本人目前用過LCD1602、LCD12864、Nokia5110等,還有些比如TFT彩屏,OLED都沒有用過。而此塊LCD12864是一款基于ST7567的128*64的1.7英寸的圖形點陣式液晶。而LCD12864液晶有的可以
[單片機]
STM32一文通(4) RCC時鐘控制理論
我們使用庫函數編程時, STM32默認調用了SetSysClockTo72()函數;已經配置了內部72MHz時鐘,所以一般不需要配置時鐘 一. STM32時鐘樹 由本靈魂畫師繪制的簡圖 進一步闡述什么是 時鐘樹 下面介紹主時鐘樹 二. HSE時鐘 (外部高速時鐘) HSE時鐘無源晶振接線方法 三.HSI時鐘 (內部高速時鐘) 四. 鎖相環時鐘PLLCLK (內外部時鐘匯集后得到的時鐘) 我們看這幅圖,理解鎖相環時鐘 五. 系統時鐘 SYSCLK (不管是何種時鐘供給方式, 最終內部要用它做時鐘) 六. HCLK時鐘(AHB高速總線時鐘) 七.PCLK1時鐘(APB1低速總線時鐘
[單片機]
ubuntu環境搭建stm32開發環境
ubuntu環境下stm32開發環境搭建過程記錄. 1. 安裝JDK sudo apt-get install openjdk-6-jre-headless 2. 安裝eclipse 先從網址:下載安裝包eclipse-cpp-mars-R-linux-gtk-x86_64.tar.gz. 以下命令安裝 sudo tar xf eclipse-cpp-mars-R-linux-gtk-x86_64.tar.gz -C /opt/ 啟動eclipse后安裝gnuarmeclipse插件 cd /opt/eclipse ./eclipse Help → Install New Software… → Add…
[單片機]
ubuntu環境搭建<font color='red'>stm32</font>開發環境
STM32 啟動步驟和升級方式以及代碼跳轉的實現
#!/bin/sh #首先把BOOT0/Boot1 設置為 1 0, 即使用 STM32的ISP升級模式 #按下板子的reset, 硬復位進入 SYS ISP 模式(BOOTLOADER) #sudo stm32flash -w F407ZG_New.bin -v -g 0x0 /dev/ttyUSB0 sudo stm32flash -w F407ZG_Old.bin -v -g 0x0 /dev/ttyUSB0 #燒寫以及驗證完畢后, 自動加載 Flash的程序運行。 #把把BOOT0/Boot1 設置為 0 0, 即使用 STM32的flash模式,即用戶程序模式。 #reset按鍵, 硬復位后自動啟動新燒入的程
[單片機]
STM32芯片連接電腦出現的問題與解決方法
當我們使用STM32芯片進行開發時,往往需要將其連接到電腦以進行編程、調試等操作。然而,這個過程中可能會遇到一些讓人頭疼的問題,比如無法正常連接、連接不穩定等。 這些問題不僅影響了我們的開發效率,還可能讓我們卡在關鍵的調試階段。那么,遇到這些問題時,我們應該如何解決呢? 1.問題:無法識別芯片。 解決方法:檢查芯片是否正確連接,USB線是否完好無損。嘗試更換USB線或更換端口。同時,確保芯片的供電正常,供電電壓應在3.3V左右。 2.問題:連接不穩定,經常出現斷開現象。 解決方法:這可能是由于USB線質量不好或者端口供電不足導致的。嘗試更換高質量的USB線或使用供電充足的端口。另外,檢查芯片的配置文件是否正確。 3.問題:無法
[單片機]
利用Simulink自動生成STM32串口代碼
功能:利用Simulink自動生成STM32串口代碼,在Keil中編譯后直接下載到主芯片,實現串口通訊的功能。 在STM32CubeMX里配置引腳功能和時鐘等參數; 在Simulink里拖入相關模塊; 打開STM32MatTarget的安裝路徑,默認安裝路徑為C:MATLABSTM32-MATSTM32,找到STM32demos(注:這里面為官方demos,網上很多資料都是這些內容),找到Test,選擇里面的USART,隨便找到一個例子打開,將里面的S函數RcvUsartBuff復制到新建的工程中 在NB2Send端口輸入要傳輸的字符個數,Data2Send為傳輸的數據的地址,buff為要傳輸的數據,打開S函數如下所示
[單片機]
利用Simulink自動生成<font color='red'>STM32</font>串口代碼
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 文水县| 湟中县| 金平| 察隅县| 高碑店市| 绥阳县| 眉山市| 阳东县| 宜都市| 新田县| 长垣县| 和顺县| 榕江县| 新营市| 外汇| 尚志市| 金门县| 汝城县| 夏邑县| 清丰县| 蛟河市| 宜君县| 炎陵县| 浦江县| 玉山县| 崇仁县| 石嘴山市| 永城市| 突泉县| 通道| 汉川市| 赤峰市| 京山县| 河池市| 禹城市| 财经| 蚌埠市| 苍山县| 锦州市| 谷城县| 防城港市|