找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3207|回复: 1
打印 上一主题 下一主题
收起左侧

nrf905 stm32自带spi接口控制 驱动程序下载

[复制链接]
跳转到指定楼层
楼主
nrf905的stm32驱动程序,stm32单片机自带的spi接口控制的

完整源码下载:
32自带spi接口控制.zip (9.02 MB, 下载次数: 45)



发送程序部分预览:
  1. #include "NRF905.h"
  2. #include "bsp_SPI_nrf.h"
  3. #include "stm32f10x_spi.h"

  4. void nrf_GPIO_Config(void)
  5. {
  6.         //定义一个GPIO InitTypeDef类型的结构体
  7.         GPIO_InitTypeDef GPIO_InitStructure;
  8.         //开启GPIOB的外设时钟
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  10.        
  11. //---------------nrf905 IO output-------------------------       
  12.         //选择要控制GPIO的引脚
  13.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_10; //en,pwr,ce,led
  14.         //设置引脚为通用推挽输出
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
  16.         //设置引脚速率为50MHz
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  18.         //调用库函数,初始化GPIOB9
  19.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  20.         GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_10);
  21.                
  22. //---------------nrf905 IO input-------------------------
  23.                 //选择要控制GPIO的引脚
  24.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7; //am, dr ,cd       
  25.         //设置引脚为上拉输入
  26.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                  
  27.         GPIO_Init(GPIOB,&GPIO_InitStructure);       
  28. }

  29. //****nrf905???????********//
  30. u8 code_config[10]=
  31. { 0x4c, //????430mhz
  32.         0x0c, //????10db,?????,???????
  33.         0x44, //???????4??
  34.         0x01, 0x01,//???????????1??
  35.         0xb2, 0xb2, 0xb2,0xb2,//接收地址
  36.         0x58  //?????,16m??,crc??,8?crc??
  37. };   

  38. void delay_xms(u16 xms)                //??xms??
  39. {          
  40.   u16 i=0;     
  41.         while(xms--)   
  42.         {
  43.     i=12000;   
  44.                 while(i--);     
  45.         }
  46. }

  47. u8 SPI_NRF_RW(u8 dat)
  48. {         
  49.    /* 当 SPI发送缓冲器非空时等待 */
  50.   while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  51.   
  52.    /* 通过 SPI2发送一字节数据 */
  53.   SPI_I2S_SendData(SPI2, dat);

  54.    /* 当SPI接收缓冲器为空时等待 */
  55.   while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);

  56.   /* Return the byte read from the SPI bus */
  57.   return SPI_I2S_ReceiveData(SPI2);
  58. }

  59. void init_nrf905(void)
  60. {        u8 i;
  61.         nrf_GPIO_Config();
  62.         ce(0);
  63.         en(0);
  64.        
  65.         delay_xms(2);
  66.         csn(0);//delay_xms(1);
  67.         SPI_NRF_RW(WC);
  68.         for (i=0;i<10;i++)
  69.         {        SPI_NRF_RW(code_config[i]);
  70.         }
  71.         csn(1);
  72. }


  73. u8 read_nrf905(void)
  74. { u8 pp;
  75.         ce(0);
  76.   en(0);
  77.         delay_xms(1);                                        //nRF905?????,??????,???????
  78.         csn(0);
  79.         SPI_NRF_RW(RRP);                //发送读取指令
  80.         pp=SPI_NRF_RW(0x00);       
  81.         csn(1);       
  82.         en(0);                                                        //en???  ,dr??
  83.         ce(1);                                                        //重新进入接收模式
  84.         delay_xms(1);                                        //nRF905?????,??????,???????
  85.         return pp;
  86. }

  87. void send(u8 byte,u16 adre)  
  88. {        ce(0);
  89.         en(0);
  90.         led(1);                                                                                                               
  91.         delay_xms(1);
  92. //----------写地址
  93.         csn(0);//delay_xms(1);
  94.         SPI_NRF_RW(WTA);           
  95.         SPI_NRF_RW(adre);       
  96.         SPI_NRF_RW(adre);
  97.         SPI_NRF_RW(adre);               
  98.         SPI_NRF_RW(adre);
  99. //        csn(1);
  100. ////---------写数据       
  101. //csn(0);
  102.         SPI_NRF_RW(WTP);                               
  103.         SPI_NRF_RW(byte);
  104. csn(1);
  105. //---------发送       
  106.         ce(1);                                       
  107.         en(1);                                                                                                        //
  108.         while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8));  //dr
  109. //        delay_xms(10);                                                                //
  110.         ce(0);
  111.   en(0);                                                                                                        //
  112.         delay_xms(1);
  113. csn(0);
  114.         SPI_NRF_RW(WTP);                        //
  115.         SPI_NRF_RW(0xaa);                  //
  116. csn(1);

  117.   en(0);                                                                                                        //
  118.         ce(1);                                                                                                        //进入接收模式
  119.         delay_xms(1);                                                                                //
  120. //        led(0);                                                                                                        //
  121. }

  122. void IntoReceive_Sate(void)
  123. {
  124.         en(0);                                                                                                        //
  125.         ce(1);                                                                                                        //进入接收模式
  126.         delay_xms(1);                                                                                //
  127.         led(0);               
  128. }

  129. int receive_scan(void)
  130. {
  131.         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==1)
  132.         {
  133.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1)
  134.                         {
  135.                                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==1)
  136.                                         {
  137.                                                 return 1;
  138.                                         }
  139.                                         else
  140.                                                 return 0;
  141.                         }
  142.                         else
  143.                                 return 0;
  144.         }
  145.         else
  146.                 return 0;

  147. }


  148. //进入调试模式 观察读出的值pp是否等于写入的配置数据
  149. void test(void)
  150. {
  151.         u16 pp,i,a;
  152.        
  153.         ce(0);
  154.   en(0);               
  155.         delay_xms(1);                                        //nRF905?????,??????,???????
  156.                
  157.                
  158.         csn(0);
  159.         SPI_NRF_RW(RTA);
  160.         pp=SPI_NRF_RW(0x00);
  161.         a=pp;
  162.         csn(1);
  163.        
  164.         csn(0);
  165.         SPI_NRF_RW(RTP);
  166.         i=SPI_NRF_RW(0xa1);
  167.         a=i;
  168.         csn(1);
  169.                                                
  170. }

  171. /*********************************************END OF FILE**********************/
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:675991 发表于 2020-4-11 10:47 | 只看该作者
没调试成功你也放出来???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表