收发一体,硬件SPI
单片机源程序如下:
- /******************** (C) COPYRIGHT 2014青风电子********************************
- * 文件名 :main.c
- * 描述 :I2C 读写(AT24C02)测试。
- *
- * 实验平台:QF-STM8开发板
- * 库版本 :ST3.0.0
- *
- * 作者 :青风
- *
- **********************************************************************************/
- /***头文件调用****/
- #include <stdio.h>
- #include "stm8s.h"
- #include "stm8s_clk.h"
- #include "string.h"
- #include "stm8s_spi.h"
- #include "stm8s_gpio.h"
- #include "stm8s_clk.h"
- #include "rf24l01.h"
- #include "uart.h"
- #include "led.h"
- extern volatile unsigned char touch_flag;
- uchar rece_buf[32];
- //接收串口数据
- int recive(void)
- {
- uint i=0;uchar j=0;
- if(((UART1->SR)&(1<<5)))//串口状态寄存器读数据寄存器非空判断是否接收数据
- {
- rece_buf[++j]=UART1->DR;//把接收的数据放入DR寄存器中
- UART1->SR=(0<<5);
- while(i<500) //设置接收长度
- {
- if(((UART1->SR)&(1<<5)))//再判断一次
- {
- rece_buf[++j]=UART1->DR;
- i=0;
- }
- i++;//循环接收
- }
- rece_buf[0] =j;
- return 0;
- }
- else
- {
- return 1;
- }
- }
- int main(void)
- {
-
- uchar i=0;uint t=0;
- SPI_RF_Init();//初始化无线nrf24l01底层驱动
- USART_Configuration();//初始化串口底层驱动
- while(NRF24L01_Check()); //自发送自接收检查是否无线设备完好
- NRF24L01_RT_Mode();//设置模式
-
- while(1)//循环判断
- {
- if(SPI_RF_IRQ()==0) //通过nrf的中断管脚判断是否是接收无线数据
- {
- if(NRF24L01_RxPacket(rece_buf)==0)
- {
- if((rece_buf[0])<32)
- {
- for(i=0;i<rece_buf[0];i++)
- UART_send_byte(rece_buf[i+1]);
- }
- }
- }
- if(recive()==0) //发送无线数据
- {
- SPI_RF_CE_LOW();
- NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);
- SPI_RF_CE_HIGH();
- NRF24L01_TxPacket(rece_buf);
- SPI_RF_CE_LOW();
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
实验四十一:无线串口透传.zip
(1.15 MB, 下载次数: 10)
|