✨申明:本文章仅发表在CSDN
网站,任何其他网见此内容均为盗链和爬取,请多多尊重和支持原创!
对于文中所提供的相关资源链接将作不定期更换。
相关篇《STM32F1基于STM32CubeMX配置硬件SPI驱动nRF24L01数据收发》
工程默认配置的是STM32F103VC单片机,其他型号的需要修改对应的启动文件startup_stm32f10x_hd.s
低容量的选择startup_stm32f10x_ld.s
,并在Keil设置里面修改对应的宏STM32F10X_HD
、STM32F10X_MD
。
✨测试该项目需要两块单片机才行,涉及到数据收发端。
接线定义:
SPI1控制引脚:
CLK--->PA5
MISO--->PA6
MOSI--->PA7
CSN-->PB7
CE -> PB6
IRQ -> PB8
----------------------
VCC CSN MOSI IRQ
GND CE SCK MISO
✨在发射端通过从单片机引出4个IO引脚作为中断(EXTI)按键,用于给接收端发送数据,如果接收端没有在线,或没有收到数据以及重发次数超了,发射端会有状态指示灯亮起,接收端收到数据,会通过串口将数据打印出来。本示例只演示单个字符数据发送。
PE5
引脚上的状态指示灯会闪烁3次,如果设备自检正常,指示灯会熄灭,如果自检不正常,指示灯一直常亮。/*nrf24l01发射端程序*/
/*开机或重启后,指示灯闪烁3次,代表工作支持,按下发射按键如果对方没有收到应答指示灯常量*/
/*配置的是SPI1接口
使用软件控制引脚信号:
CLK--->PA5
MISO--->PA6
MOSI--->PA7
CSN-->PA8
CE -> PA11
IRQ -> PA1 (发射端必须接)
PA4用于控制MAX7219
VCC CSN MOSI IRQ
GND CE SCK MISO
*/
#include "stm32f10x.h"
#include "USART1.h"
//#include "delay.h"
#include "PC13_LED.h"
#include "nrf24l01_spi1.h"
#include "KEY_Send.h"
#include "stdio.h"
void SWID_DISABLE(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* * @arg GPIO_Remap_SWJ_NoJTRST : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
* @arg GPIO_Remap_SWJ_JTAGDisable : JTAG-DP Disabled and SW-DP Enabled
* @arg GPIO_Remap_SWJ_Disable : Full SWJ Disabled (JTAG-DP + SW-DP)
*/
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
}
int main(void)
{
uint8_t nrf_send_add[TX_RX_ADR_WIDTH] = {0xad,0x3e,0x35,0x45,0xfe};
LED0_Config();
LED1_Config();
USART1_Config();
NRF24L01_Init();
NRF24L01_Check();
NRF_TX_Mode(nrf_send_add);
Four_KEY_config();
printf("Hello Send \r\n");
// NRF_Send_TX_Data(nrf_send_add,5); //开始让NRF发送数据
// delay_ms(1000);
while(1)
{
}
}
/*nrf24l01接收端程序*/
/*开机或重启后,指示灯闪烁3次,代表工作支持
使用软件控制引脚信号:
CLK--->PA5
MISO--->PA6
MOSI--->PA7
CSN-->PA8
CE -> PA11
IRQ -> PA1
----------------------
VCC CSN MOSI IRQ
GND CE SCK MISO
*/
#include "stm32f10x.h"
#include "USART1.h"
//#include "delay.h"
#include "PC13_LED.h"
#include "nrf24l01_spi1.h"
#include "stdio.h"
void SWID_DISABLE(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* * @arg GPIO_Remap_SWJ_NoJTRST : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
* @arg GPIO_Remap_SWJ_JTAGDisable : JTAG-DP Disabled and SW-DP Enabled
* @arg GPIO_Remap_SWJ_Disable : Full SWJ Disabled (JTAG-DP + SW-DP)
*/
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
}
int main(void)
{
uint8_t NRF_Stauts;
uint8_t nrf_recived_add[TX_RX_ADR_WIDTH] = {0xad,0x3e,0x35,0x45,0xfe};
uint8_t receivd_dat[TX_RX_PLOAD_WIDTH];
LED0_Config();
LED1_Config();
NRF24L01_Init();
NRF24L01_Check();
NRF_RX_Mode(nrf_recived_add,3);
USART1_Config();
printf("Hello receivd \r\n");
while(1)
{
if((NRF_IRQ_Status() == 0)) //nrf产生中断,且是数据接收函数中判断是否为接收中断
{
LED1ON;
NRF_RX_Data(receivd_dat, TX_RX_PLOAD_WIDTH);
if(receivd_dat[0] != 0x0) //NRF接收到数据,接收函数会清除中断
{
printf("received dat is %c \r\n",receivd_dat[0]);
receivd_dat[0]=0;
LED1OFF;
// LED1_FLASH();
}
else
{
NRF_Stauts = Get_NRF_STATUS();
/* 清除中断标志*/
SPI_NRF_WriteReg(STATUS,NRF_Stauts);
}
}
}
}
- ⚡使用须知,本代码功能已验证,不提供技术支持和问题解答!
CSDN
网站,任何其他网见此内容均为盗链和爬取,请多多尊重和支持原创!
链接: https://pan.baidu.com/e/1NH1U5fBpFrguR4830UCCwg
提取码: ucaj
CSDN
网站,任何其他网见此内容均为盗链和爬取,请多多尊重和支持原创!
链接: https://pan.baidu.com/e/1MZPwXKvGrvM3SY2BWkmXYg
提取码: bhua