標(biāo)題:
nrf905 stm32自帶spi接口控制 驅(qū)動(dòng)程序下載
[打印本頁(yè)]
作者:
劉長(zhǎng)江
時(shí)間:
2017-3-23 15:26
標(biāo)題:
nrf905 stm32自帶spi接口控制 驅(qū)動(dòng)程序下載
nrf905的stm32驅(qū)動(dòng)程序,stm32單片機(jī)自帶的spi接口控制的
0.png
(47.85 KB, 下載次數(shù): 89)
下載附件
2017-3-23 19:42 上傳
完整源碼下載:
32自帶spi接口控制.zip
(9.02 MB, 下載次數(shù): 45)
2017-3-23 15:26 上傳
點(diǎn)擊文件名下載附件
stm32的nrf905驅(qū)動(dòng)程序
下載積分: 黑幣 -5
發(fā)送程序部分預(yù)覽:
#include "NRF905.h"
#include "bsp_SPI_nrf.h"
#include "stm32f10x_spi.h"
void nrf_GPIO_Config(void)
{
//定義一個(gè)GPIO InitTypeDef類型的結(jié)構(gòu)體
GPIO_InitTypeDef GPIO_InitStructure;
//開啟GPIOB的外設(shè)時(shí)鐘
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
//設(shè)置引腳為通用推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//設(shè)置引腳速率為50MHz
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//調(diào)用庫(kù)函數(shù),初始化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
//設(shè)置引腳為上拉輸入
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)
{
/* 當(dāng) SPI發(fā)送緩沖器非空時(shí)等待 */
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
/* 通過 SPI2發(fā)送一字節(jié)數(shù)據(jù) */
SPI_I2S_SendData(SPI2, dat);
/* 當(dāng)SPI接收緩沖器為空時(shí)等待 */
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); //發(fā)送讀取指令
pp=SPI_NRF_RW(0x00);
csn(1);
en(0); //en??? ,dr??
ce(1); //重新進(jìn)入接收模式
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);
////---------寫數(shù)據(jù)
//csn(0);
SPI_NRF_RW(WTP);
SPI_NRF_RW(byte);
csn(1);
//---------發(fā)送
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); //進(jìn)入接收模式
delay_xms(1); //
// led(0); //
}
void IntoReceive_Sate(void)
{
en(0); //
ce(1); //進(jìn)入接收模式
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;
}
//進(jìn)入調(diào)試模式 觀察讀出的值pp是否等于寫入的配置數(shù)據(jù)
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**********************/
復(fù)制代碼
作者:
tyler880
時(shí)間:
2020-4-11 10:47
沒調(diào)試成功你也放出來???
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1