nrf905的stm32驅動程序,stm32單片機自帶的spi接口控制的
0.png (47.85 KB, 下載次數: 89)
下載附件
2017-3-23 19:42 上傳
完整源碼下載:
32自帶spi接口控制.zip
(9.02 MB, 下載次數: 45)
2017-3-23 15:26 上傳
點擊文件名下載附件
stm32的nrf905驅動程序 下載積分: 黑幣 -5
發送程序部分預覽:
- #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**********************/
復制代碼
|