|
STM32库文件:
stm32f10x_rcc.c
stm32f10x_gpio.c
stm32f10x_usart.c
stm32f10x_it.c //中断服务函数
misc.c //中断向量
stm32f10x_spi.c
其他函数SPI与nRF间的数据通信
SPI_NRF.c
基本结构:
通过ISP传输完成STM32与nRF24间的数据通信
SCK
| 为主机为从机提供的时钟信号
| MOSI (master out slave in)
| 为主机和从机间数据通信传输通道
| MISO
| 为主机和从机间数据通信传输通道
| CE
| 工作使能,使nRF24处于传输和接收状态
| CSN
| SPI功能片选使能,低电平有效
| IRQ
| 为nRF向MCU传输的中断信号
|
SPI配置
SPI_Direction
| SPI_Direction_2Lines_FullDuplex
SPI_Direction_2Lines_RxOnly
SPI_Direction_1Line_Rx
SPI_Direction_1Line_Tx
| 数据通信方式
| SPI_Mode
| SPI_Mode_Master
SPI_Mode_Slave
| 主从模式
| SPI_DataSize
| SPI_DataSize_8b
SPI_DataSize_16b
| 数据位数设定
| SPI_CPOL
| SPI_CPOL_Low
SPI_CPOL_High
| 数据采样点的设定
相对于低电平或高电平的第一个边沿或第二个边沿
| SPI_CPHA
| SPI_CPHA_1Edge
SPI_CPHA_2Edge
| SPI_NSS
| SPI_NSS_Soft
SPI_NSS_Hard
| NSS信号的产生
| SPI_BaudRatePrescaler
| SPI_BaudRatePrescaler_8 (2,4,8,16,32…..256)
| SCL信号由系统时钟分频产生
| SPI_FirstBit
| SPI_FirstBit_MSB
SPI_FirstBit_LSB
|
| SPI_CRCPolynomial
| CRCPR CRC polynomial register
The CRC polynomial (0007h) is the reset value of this register
| 16-bit寄存器设置
|
工作流程
SPI数据传输使用的函数
SPI与nRF间的数据通信函数
u8 SPI_NRF_RW(u8 dat);
用于向NRF读/写一字节数据(只能一次写入8-bit,这是nRF芯片决定的。SPI可以采用8-bit或16-bit完成数据传输) 该函数输入值为SPI写入的值,返回值为SPI读取到的值
只完成写入命令时,可以不管其返回值。而其返回值,为该寄存器的状态值,可用于判断该命令执行是否成功。
而对于nRF24芯片寄存器数据的读取,每8-bit的数据传输都要求master传输一个空命令后,nRF24才传输下一个数据。而函数返回值就为该数据值。
所谓的空命令,就是nRF24中的Define No Operation, might be usedto read status register 对该函数分析得 1. 无论是对nRF24的读取和写,都会有返回值。在写时,返回值为状态信息 2. 在数据读取时,每一字节的数据都是在一个输入命令后才能完成。 u8 SPI_NRF_ReadReg(u8 reg );
从nRF特定的寄存器读出8bit数据
u8 SPI_NRF_WriteReg(u8 reg,u8 dat);
向NRF特定的寄存器写入数据

命令+地址 组合成为8-bit数据,不同的命令有着不同的数据格式
将R_Registe命令设为 0x00 将W_Registe 设为 0x20
结合寄存器地址,register map TX_ADDR 0x10

地址为0x10 对TR_ADDR参数设定时,应输入名0011 000 (0x20+0x10)
u8 SPI_NRF_ReadBuf(u8 reg,u8 *pBuf,u8 bytes);

和SPI_NRF_WriteReg(u8 reg,u8 dat) 区别写入数据为连续的一串数据组数据,通过数据指针和数据大小来完成。
u8 SPI_NRF_WriteBuf(u8 reg ,u8 *pBuf,u8 bytes);

void NRF_TX_Mode(void);
void NRF_RX_Mode(void);

u8 NRF_Rx_Dat(u8 *rxbuf); 
u8 NRF_Tx_Dat(u8 *txbuf);

当其缓冲区的数据发送完后,产生一个IRQ信号。也就是一串数据发送完以后
u8 NRF_Check(void);
其他
传输配置,通信频率,收发地址,pipe 一致时才能进行通信
传输模式下,不开启外部中断
接收模式下,开启中断。这样就直接将中断服务用于接收模式
|
|