当前位置: 代码迷 >> 综合 >> STM32基础教程(CubeMX)—— 无线通讯模块(NRF24L01)
  详细解决方案

STM32基础教程(CubeMX)—— 无线通讯模块(NRF24L01)

热度:73   发布时间:2024-02-10 15:34:24.0

CubeMX的操作

SPI的设置
  1. 在"Pinout & Configuration"界面下,左侧选择下拉菜单"Connectivity",下拉菜单中选择"SPI",你会发现有好几个可以选择,具体使用哪个,需要参考原理图,这里由于NRF24L01插座使用的是SPI2,所以选择SPI2。
  2. 以SPI2为例,选择后中间窗口出现配置界面,在“Mode”界面下"Mode"选择"Full-Duplex Master"全双工主机。
  3. "Mode"窗口下方的"Configuration"窗口中,第二个"Clock Parameters"下拉菜单,第一个"Prescaler"预分频,选择 8;“Clock Polarity”是空闲时是什么电平,选择低电平;“Clock Phase”是什么沿进行检测,默认是上升沿检测。
NRF24L01其他管脚的配置
  1. PG7是NRF24L01的片选信号,低电平有效。因此将PG7设置为输出模式,默认高电平,推挽输出,上拉电阻。
  2. PG6是NRF24L01的CE信号。因此将PG7设置为输出模式,默认高电平,推挽输出。
  3. PG8是NRF24L01的INT输出信号。因此将PG8设置为输入模式,下拉电阻。
  4. 由于SD卡和Flash存储器也使用了SPI2,因此将SD卡的片选信号PD2设置为输出模式,默认高电平,推挽输出,上拉电阻。Flash存储器的PB12也这样设置。
工程的输出
  1. 在"Project Manager"界面下,除正常设置外,左侧选择"Code Generator"界面,找到"Generated files"菜单。
  2. 在"Generated files"菜单中勾选“Generate peripheral initalization as a pair of ‘.c/.h’ files per peripheral。因为NRF24L01的库函数是依赖于此选项生成的spi.h文件的,因此必须做出这个设置。

Keil5的操作

添加NRF24L01库文件
  1. 在用户文件夹上双击可以添加文件,将文件放到工程文件夹中,并添加到工程里。
  2. 菜单栏点击“闪存”、“配置闪存工具”,弹出的窗口中点击c/c++,在“Include Paths”中将你添加的文件所在的路径添加进去。这个操作只适用于这一个工程,而且你也可以参考其他的路径添加相对路径。
使用LCD库文件
  1. 在"main.c"文件中包含头文件"24l01.h"。
  2. 初始化NRF24L01,函数为NRF24L01_Init();
  3. 检测是否初始化成功,函数为NRF24L01_Check();,如果初始化成功就返回0,失败就返回1。这里可以写一个死循环,等到初始化成功的时候再进行接下来的程序。注意,这里不需要重复调用初始化函数,初始化其实是必定完成的,这里检测的是模块存不存在。

初始化并检测是否初始化成功的一个例程,注意,只适用于学长给的库:

NRF24L01_Init();

while(NRF24L01_Check())
{
LCD_ShowString(65,100,200,5,12,(uint8_t *)“NRF24L01 Init Error”);
}
LCD_ShowString(65,100,200,5,12,(uint8_t *)“NRF24L01 Init Ready”);

  1. 指定NRF24L01的模式,发送模式函数为NRF24L01_Tx_Mode();,接收模式函数为NRF24L01_Tx_Mode();
  2. 发送数据的函数为NRF24L01_TxPacket(发送的数组地址);,发送成功会返回一个特定的值;接收数据的函数为NRF24L01_RxPacket(存储数据的数组地址);,接收成功会返回一个特定的值。

使用学长给的库函数进行数据收发的时候,发送数据必须有人接收数据才会显示发送成功,接收数据必须有人发送数据才能显示接收成功。另外,发送地址和接受地址必须一致,一对一中主从机的这两个地址也必须一致,另外,地址可以任意改动。