STM32中2.4G无线通信例程
按照如下方式在电路板上安排的管脚
8 7
6 5
4 3
2 1
各管脚如下定义:
8.IRQ 7.MISO
6.MOSI 5.SCK
4.CSN 3.CE
2.VCC 1.GND
具体说明:
3.CE 芯片的模式控制线。在 CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态(参照NRF24L01 的状态机)。
4.CSN 为芯片的片选线 CSN 为低电平芯片工作
5.SCK 为芯片控制的时钟线(SPI时钟)
6.MOSI 为芯片控制数据线(Master output slave input) 主输出 从输入
7.MISO 芯片控制数据线 (Master input slave output) master 硕士 主人 船长 slave 从属奴隶 主输入 从输出
8.IRQ 中断信号引脚。中断时变为低电平,即NRF24L01内部发生中断时IRQ 引脚从高电平变为低电平。引脚会在以下三种情况变低:Tx FIFO 发完并且收到ACK(使能ACK情况下)、Rx FIFO 收到数据、达到最大重发次数。
中断:
nRF24L01 的中断引脚(IRQ)为低电平触发,当状态寄存器中TX_DS(数据发送完成中断位)、RX_DR(接收数据中断位) 或MAX_RT(达到最多次重发中断位)为高时触发中断。当MCU 给中断源写‘1’时,中断引脚被禁止。可屏蔽中断可以被IRQ 中断屏蔽。通过设置可屏蔽中断位为高,则中断响应被禁止。默认状态下所有的中断源是被禁止的。
在写寄存器之前一定要进入待机模式或掉电模式
单片机源程序如下:
- /* 下载程序后,首先要按下按键K_UP或者K_DOWN,按键K_UP是接收,K_DOWN是发送,两块开发板
- 只能一个作为发送一个作为接收,否则两个都为接收或者发送将进入死循环。接收的时候
- 指示灯闪烁 24L01的最大SPI时钟为10Mhz因此在设定SPI时钟的时候要低于10M*/
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "button.h"
- #include "lcd_driver.h"
- #include "gui.h"
- #include "nrf24l01.h"
- void lcd_display() //LCD初始化显示
- {
- TFT_ClearScreen(BLACK);
- GUI_Show12ASCII(10,10,"PRECHIN",GREEN,BLACK);
- GUI_Show12ASCII(10,30,"123456",GREEN,BLACK);
- GUI_Show12ASCII(10,50,"NRF24L01 Test!",GREEN,BLACK);
- GUI_Show12ASCII(10,70,"2015-11-13",GREEN,BLACK);
- GUI_Show12ASCII(10,90,"K_UP:RX_Mode K_DOWN:TX_Mode",GREEN,BLACK);
-
- }
- void data_pros() //数据处理函数
- {
- u8 key;
- static u8 mode=2; //模式选择
- u8 rx_buf[33]="123456 ";
- static u16 t=0;
- while(1) //等待按键按下进行选择发送还是接收
- {
- key=keyscan(0);
- if(key==K_UP_PRESS) //接收模式
- {
- mode=0;
- GUI_Show12ASCII(10,140,"RX_Mode",RED,BLACK);
- GUI_Show12ASCII(10,160,"Received Data:",RED,BLACK);
- GUI_Show12ASCII(120,160," ",RED,BLACK);
- break;
- }
- if(key==K_DOWN_PRESS) //发送模式
- {
- mode=1;
- GUI_Show12ASCII(10,140,"TX_Mode",RED,BLACK);
- GUI_Show12ASCII(10,160,"Send Data: ",RED,BLACK);
- GUI_Show12ASCII(120,160," ",RED,BLACK);
- break;
- }
- }
-
- if(mode==0) //接收模式
- {
- NRF24L01_RX_Mode();
- while(1)
- {
- if(NRF24L01_RxPacket(rx_buf)==0) //接收到数据显示
- {
- rx_buf[32]='\0';
- GUI_Show12ASCII(120,160,rx_buf,RED,BLACK);
- break;
- }
- else
- {
- delay_ms(1);
- }
- t++;
- if(t==1000)
- {
- t=0;
- led1=~led1; //一秒钟改变一次状态
- }
- }
- }
- if(mode==1) //发送模式
- {
-
- NRF24L01_TX_Mode();
- while(1)
- {
- if(NRF24L01_TxPacket(rx_buf)==TX_OK)
- {
- GUI_Show12ASCII(120,160,rx_buf,RED,BLACK);
- break;
- }
- else
- {
- GUI_Show12ASCII(120,160,"Send Data Failed ",RED,BLACK);
-
- }
- }
- }
- }
- int main(void)
- {
- u8 i=0;
- delay_init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- uart_init(9600);
- TFT_Init();
- led_init();
- button_init();
- NRF24L01_Init();
- lcd_display();
- while(NRF24L01_Check()) //检测NRF24L01是否存在
- {
- GUI_Show12ASCII(140,50,"Error ",RED,BLACK);
- }
- GUI_Show12ASCII(140,50,"Success",RED,BLACK);
- while(1)
- {
- data_pros();
- i++;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
2.4G无线通信应用.7z
(4.16 MB, 下载次数: 318)
|