标题:
nrf905 stm32自带spi接口控制 驱动程序下载
[打印本页]
作者:
刘长江
时间:
2017-3-23 15:26
标题:
nrf905 stm32自带spi接口控制 驱动程序下载
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**********************/
复制代码
作者:
tyler880
时间:
2020-4-11 10:47
没调试成功你也放出来???
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1