6122|22

180

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

求大家给一个msp430硬件spi操作nrf24l01的代码吧,自己写的老是发送失败 [复制链接]

 
代码是移植的正点原子的,但是前面的spi配置部分是自己写的,大神帮忙看看哪里配置不对,硬件spi跟软件模拟spi都试过了
  1. void SPI3_Init()
  2. {
  3. #if HW_SPI
  4.   P10SEL|=BIT1+BIT2+BIT3;    //设置P10.1~P10.3外设功能
  5.   P10SEL&=~(BIT0+BIT4+BIT5);
  6.   P10DIR|=BIT0+BIT1+BIT3+BIT4;     //设置CS,MOSI,CLK,CE,为输出方向
  7.   P10DIR&=~(BIT2+BIT5);             //设置MISO为输入方向
  8.   P10DS|=BIT0+BIT1+BIT3+BIT4;     
  9.   P10REN|=BIT2+BIT5;              //设置MISO上拉
  10.   P10OUT|=BIT1+BIT2+BIT5;
  11.   P10OUT&=~BIT0+BIT3;
  12.   UCB3CTL1|=UCSWRST;      
  13.   UCB3CTL0 =UCCKPH+UCMSB+UCMST+UCMODE_0+UCSYNC;    //3线SPI主机模式,时钟极性低,先发送MSB
  14.   UCB3CTL0&=~(UCCKPL);
  15.   UCB3CTL1|=UCSSEL_2;          ///选择SMCLK
  16.   UCB3BR0=5;                  //25M/5=5M <10M
  17.   UCB3BR1=0;
  18.   UCB3CTL1&=~UCSWRST;
  19.   UCB3IE &= ~(UCRXIE+UCTXIE);  //不开中断
  20. //  UCB3IFG&=~UCRXIFG;
  21. #elif !HW_SPI
  22.   P10DIR|=BIT0+BIT1+BIT3+BIT4;  
  23.   P10DIR&=~(BIT2+BIT5);
  24.   P10DS|=BIT0+BIT1+BIT3+BIT4;     
  25.   P10REN|=BIT2+BIT5;           
  26.   P10OUT|=BIT2+BIT5;
  27.   P10OUT&=~BIT3;
  28. #endif
  29. }

  30. //连接方式
  31.     //P10.0->CSN    P10.1->MOSI
  32.     //P10.2->MISO   P10.3->CLK
  33.     //P10.4->CE     P10.5->IRQ

  34. u8 SPI3_SendReceiveByte(u8 byte)
  35. {
  36.   u8 val;
  37. #if HW_SPI
  38.   while (!(UCB3IFG&UCTXIFG));   //等待TXBUF为空
  39.   UCB3TXBUF=byte;
  40.   while((UCB3STAT&UCBUSY)&&(!(UCB3IFG&UCRXIFG)));    //等待发送跟接收完成
  41.   val=UCB3RXBUF;
  42. #elif !HW_SPI
  43.   u8 i;
  44.   for(i=0;i<8;i++)
  45.   {
  46.     if(byte&0x80)
  47.       NRFMOSI_1;
  48.     else
  49.       NRFMOSI_0;
  50.     byte<<=1;
  51.     NRFCLK_1;
  52.     if(NRFMISO)
  53.       byte|=0x01;
  54.     NRFCLK_0;
  55.   }
  56.   val=byte;
  57. #endif
  58.   return val;
  59.   
  60. }
复制代码


最新回复

楼主看你最开始的程序和你现在成功之后的程序  发现你IO口都不一样了? 能不能发给完整的文件看看  详情 回复 发表于 2016-9-20 16:08
 
点赞 关注

回复
举报

180

帖子

3

TA的资源

一粒金砂(中级)

沙发
 
这个是nrf24l01的spi时序,应该就是空闲时钟极性低,数据第一个边沿捕获啊,哪里出问题了??

nrf.png (89.91 KB, 下载次数: 0)

nrf.png
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

板凳
 
新人总是没尊严啊。。。
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

4
 
最好用逻辑仪看看时序
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

5
 
强仔00001 发表于 2015-4-1 10:50
最好用逻辑仪看看时序

现在身边就是没有啊。。。以前读写SD卡,读取字库都没得问题
 
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

6
 
楼主我没用过430的spi我帮你找一段代码吧,你稍等
 
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

7
 
你是哪款430?
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

8
 
jianping-sun 发表于 2015-4-1 12:08
现在身边就是没有啊。。。以前读写SD卡,读取字库都没得问题

上TB买个吧,很便宜的,20到30块足够了
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

9
 

MSP430F5438A@25MHz
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

10
 
shannon2014 发表于 2015-4-1 14:51
楼主我没用过430的spi我帮你找一段代码吧,你稍等

谢帮忙。。
 
 
 

回复

1461

帖子

1

TA的资源

纯净的硅(中级)

11
 
额,我只有用g2553的,而且是最简单的 MSP430 NRF24L01.zip (107.89 KB, 下载次数: 65) ,你看看,能不能有点用吧
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

12
 
shihuntaotie 发表于 2015-4-1 17:56
额,我只有用g2553的,而且是最简单的,你看看,能不能有点用吧

嘿嘿嘿,谢啦,刚刚成功了,我用的5438A,硬件SPI跟软件模拟SPI都成功啦。。。
 
 
 

回复

192

帖子

0

TA的资源

一粒金砂(中级)

13
 
楼主这是我找的资料,恢复晚啦

NRF24L01无线模块 2.4G无线通信模块 24L01+升级版 送资料.rar

5.76 MB, 下载次数: 112

 
 
 

回复

1461

帖子

1

TA的资源

纯净的硅(中级)

14
 
jianping-sun 发表于 2015-4-1 18:37
嘿嘿嘿,谢啦,刚刚成功了,我用的5438A,硬件SPI跟软件模拟SPI都成功啦。。。

成功就好,恭喜了
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

15
 
准备用这个,来参考下
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
您好,看了你的帖子,请问你还有MSP430用SPI和nrf通信的程序吗,如果能帮助的话,非常感谢
 
 
 

回复

3

帖子

2

TA的资源

一粒金砂(中级)

17
 
jianping-sun 发表于 2015-4-1 18:37
嘿嘿嘿,谢啦,刚刚成功了,我用的5438A,硬件SPI跟软件模拟SPI都成功啦。。。

楼主,我现在也是出现和你类似的问题,我是用硬件SPI读写外挂Flash,总是失败,我的初始化和你的一样,但是总是不成功,你是修改了什么成功了?
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

18
 
jianping-sun 发表于 2015-4-1 18:37
嘿嘿嘿,谢啦,刚刚成功了,我用的5438A,硬件SPI跟软件模拟SPI都成功啦。。。

最近也在做这方面的工作,楼主可否给一份资料。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

19
 
楼主能贴下成功的代码嘛?感谢
 
 
 

回复

180

帖子

3

TA的资源

一粒金砂(中级)

20
 
cjm1234 发表于 2016-6-26 22:57
楼主能贴下成功的代码嘛?感谢
  1. #include "NRF24L01.h"

  2. //P9.0 -> CE
  3. //P9.4 -> CSN
  4. //P9.5 -> IRQ


  5. uint8_t TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //Send Addr
  6. uint8_t RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //Receive Addr

  7. void NRF_GPIO_Config()  
  8. {
  9.   P9SEL &= ~(BIT0 + BIT4);
  10.   P9DIR |= BIT0 + BIT4;
  11.   P9DIR &= ~BIT5;
  12.   P9DS |= BIT0 + BIT4;
  13. }

  14. uint8_t NRF_WriteReg(uint8_t reg,uint8_t val)
  15. {
  16.   uint8_t temp = 0;
  17.   NRF_CSN_0;
  18.   temp = SPI2_SendReceive_SingleByte(reg);
  19.   SPI2_SendReceive_SingleByte(val);
  20.   NRF_CSN_1;
  21.   return temp;
  22. }

  23. uint8_t NRF_ReadReg(uint8_t reg)
  24. {
  25.   uint8_t val = 0;
  26.   NRF_CSN_0;
  27.   SPI2_SendReceive_SingleByte(reg);
  28.   val=SPI2_SendReceive_SingleByte(0xFF);
  29.   NRF_CSN_1;
  30.   return val;
  31. }

  32. uint8_t NRF_ReadBuf(uint8_t reg,uint8_t *buff,uint8_t num)
  33. {
  34.   uint8_t i = 0,val = 0;
  35.   NRF_CSN_0;
  36.   val = SPI2_SendReceive_SingleByte(reg);
  37.   for(i = 0;i < num;i++)
  38.     buff[i] = SPI2_SendReceive_SingleByte(0xFF);
  39.   NRF_CSN_1;
  40.   return val;
  41. }

  42. uint8_t NRF_WriteBuf(uint8_t reg,uint8_t *buff,uint8_t num)
  43. {
  44.   uint8_t val = 0,i = 0;
  45.   NRF_CSN_0;
  46.   val = SPI2_SendReceive_SingleByte(reg);
  47.   for(i = 0;i < num;i++)
  48.     SPI2_SendReceive_SingleByte(buff[i]);
  49.   NRF_CSN_1;
  50.   return val;
  51. }

  52. void Set_Rx_Mode()
  53. {
  54.   NRF_CE_0;
  55.   NRF_WriteReg(WRITE_REG+CONFIG, 0x0F);
  56.   NRF_CE_1;
  57.   delay_ms(1);
  58. }
  59. void Set_Tx_Mode()
  60. {
  61.   NRF_CE_0;
  62.   NRF_WriteReg(WRITE_REG+CONFIG, 0x0E);
  63.   NRF_CE_1;
  64.   delay_ms(1);
  65. }

  66. uint8_t NRF_SendPacket(uint8_t *TxBuf)
  67. {
  68.   uint8_t val = 0;
  69.   NRF_CE_0;
  70.   NRF_WriteBuf(WR_TX_PLOAD,TxBuf,TX_PLOAD_WIDTH);
  71.   Set_Tx_Mode();
  72.   NRF_CE_1;
  73.   delay_ms(1);
  74. //  while(NRF_IRQ != 0);
  75.   val=NRF_ReadReg(STATUS);
  76.   NRF_WriteReg(WRITE_REG+STATUS,0xFF);
  77.   if(val&TX_OK)
  78.     return TX_OK;
  79.   if(val&MAX_TX)
  80.   {
  81.     NRF_WriteReg(WRITE_REG+STATUS,0xff);
  82.     NRF_WriteReg(FLUSH_TX,0xFF);
  83.     return MAX_TX;
  84.   }
  85.   return 0xFF;
  86. }

  87. uint8_t NRF_ReceivePacket(uint8_t *RxBuf)
  88. {
  89.   uint8_t val = 0;
  90.   NRF_CE_0;
  91.   Set_Rx_Mode();
  92.   NRF_CE_1;
  93.   delay_us(500);
  94.   while(NRF_IRQ != 0);
  95.   val=NRF_ReadReg(STATUS);
  96.   if(val&RX_OK)
  97.   {
  98.     NRF_ReadBuf(RD_RX_PLOAD,RxBuf,RX_PLOAD_WIDTH);
  99.     NRF_WriteReg(FLUSH_RX,0xff);
  100.     return 0;
  101.   }
  102.   return 0xff;
  103. }

  104. void NRF_Config()
  105. {
  106.   delay_us(1000);
  107.   NRF_GPIO_Config();
  108.   SPI2_Init();
  109.   delay_us(250);
  110.   NRF_CE_0;
  111.   NRF_CSN_1;
  112.   P9OUT &= ~BIT3;
  113.   NRF_WriteBuf(WRITE_REG + TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
  114.   NRF_WriteBuf(WRITE_REG + RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);
  115.   NRF_WriteReg(WRITE_REG + EN_AA,0x01);
  116.   NRF_WriteReg(WRITE_REG + EN_RXADDR,0x01);
  117.   NRF_WriteReg(WRITE_REG + RF_CH,0);
  118.   NRF_WriteReg(WRITE_REG + RX_PW_P0,RX_PLOAD_WIDTH);
  119.   NRF_WriteReg(WRITE_REG + RF_SETUP,0x07);
  120. }
复制代码

赞赏

1

查看全部赞赏

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表