nrf905的stm32驱动程序,stm32单片机自带的spi接口控制的
完整源码下载:
32自带spi接口控制.zip
(9.02 MB, 下载次数: 45)
发送程序部分预览:
- #include "NRF905.h"
- #include "bsp_SPI_nrf.h"
- #include "stm32f10x_spi.h"
- void nrf_GPIO_Config(void)
- {
- //定义一个GPIO InitTypeDef类型的结构体
- GPIO_InitTypeDef GPIO_InitStructure;
- //开启GPIOB的外设时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
-
- //---------------nrf905 IO output-------------------------
- //选择要控制GPIO的引脚
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_10; //en,pwr,ce,led
- //设置引脚为通用推挽输出
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- //设置引脚速率为50MHz
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- //调用库函数,初始化GPIOB9
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_10);
-
- //---------------nrf905 IO input-------------------------
- //选择要控制GPIO的引脚
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7; //am, dr ,cd
- //设置引脚为上拉输入
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- }
- //****nrf905???????********//
- u8 code_config[10]=
- { 0x4c, //????430mhz
- 0x0c, //????10db,?????,???????
- 0x44, //???????4??
- 0x01, 0x01,//???????????1??
- 0xb2, 0xb2, 0xb2,0xb2,//接收地址
- 0x58 //?????,16m??,crc??,8?crc??
- };
- void delay_xms(u16 xms) //??xms??
- {
- u16 i=0;
- while(xms--)
- {
- i=12000;
- while(i--);
- }
- }
- u8 SPI_NRF_RW(u8 dat)
- {
- /* 当 SPI发送缓冲器非空时等待 */
- while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
-
- /* 通过 SPI2发送一字节数据 */
- SPI_I2S_SendData(SPI2, dat);
- /* 当SPI接收缓冲器为空时等待 */
- while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
- /* Return the byte read from the SPI bus */
- return SPI_I2S_ReceiveData(SPI2);
- }
- void init_nrf905(void)
- { u8 i;
- nrf_GPIO_Config();
- ce(0);
- en(0);
-
- delay_xms(2);
- csn(0);//delay_xms(1);
- SPI_NRF_RW(WC);
- for (i=0;i<10;i++)
- { SPI_NRF_RW(code_config[i]);
- }
- csn(1);
- }
- u8 read_nrf905(void)
- { u8 pp;
- ce(0);
- en(0);
- delay_xms(1); //nRF905?????,??????,???????
- csn(0);
- SPI_NRF_RW(RRP); //发送读取指令
- pp=SPI_NRF_RW(0x00);
- csn(1);
- en(0); //en??? ,dr??
- ce(1); //重新进入接收模式
- delay_xms(1); //nRF905?????,??????,???????
- return pp;
- }
- void send(u8 byte,u16 adre)
- { ce(0);
- en(0);
- led(1);
- delay_xms(1);
- //----------写地址
- csn(0);//delay_xms(1);
- SPI_NRF_RW(WTA);
- SPI_NRF_RW(adre);
- SPI_NRF_RW(adre);
- SPI_NRF_RW(adre);
- SPI_NRF_RW(adre);
- // csn(1);
- ////---------写数据
- //csn(0);
- SPI_NRF_RW(WTP);
- SPI_NRF_RW(byte);
- csn(1);
- //---------发送
- ce(1);
- en(1); //
- while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)); //dr
- // delay_xms(10); //
- ce(0);
- en(0); //
- delay_xms(1);
- csn(0);
- SPI_NRF_RW(WTP); //
- SPI_NRF_RW(0xaa); //
- csn(1);
- en(0); //
- ce(1); //进入接收模式
- delay_xms(1); //
- // led(0); //
- }
- void IntoReceive_Sate(void)
- {
- en(0); //
- ce(1); //进入接收模式
- delay_xms(1); //
- led(0);
- }
- int receive_scan(void)
- {
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==1)
- {
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)
- {
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==1)
- {
- return 1;
- }
- else
- return 0;
- }
- else
- return 0;
- }
- else
- return 0;
- }
- //进入调试模式 观察读出的值pp是否等于写入的配置数据
- void test(void)
- {
- u16 pp,i,a;
-
- ce(0);
- en(0);
- delay_xms(1); //nRF905?????,??????,???????
-
-
- csn(0);
- SPI_NRF_RW(RTA);
- pp=SPI_NRF_RW(0x00);
- a=pp;
- csn(1);
-
- csn(0);
- SPI_NRF_RW(RTP);
- i=SPI_NRF_RW(0xa1);
- a=i;
- csn(1);
-
- }
- /*********************************************END OF FILE**********************/
复制代码
|