4855|9

9795

帖子

24

TA的资源

版主

楼主
 

【TI首届低功耗设计大赛】第一个外设程序MSP430FR5969 CC1101 [复制链接]

本帖最后由 littleshrimp 于 2014-12-22 13:21 编辑

最近太忙了,焊好的PCB一直没调,本来都打算放弃了,考虑到某某原因,还是挤出点时间调了第一个外设MSP430FR5969 + CC1101程序。

拓扑结构使用自己画的MSP430FR5969开发板连接一个CC1101做发射端,MSP430FR5969 LaunchPad连接一个CC1101模块做接收端,通过LaunchPad虚拟串口将数据发送到PC,使用串口助手显示。
发射端CC1101引脚定义如下:
/*
cc1101引脚连接
VCC             VCC
CSN             P3.0
SI              P3.2
GPIO0           P3.4
GND             P3.6

GND             GND
SCLK            P3.1
SO              P3.3
GPIO2           P3.5
GND             P3.7
*/
考虑到端口的复用性,MSP430FR5969使用软SPI与CC1101通信。
发送端定义一个字符串常量
  1. #define SPI0_DIR        P1DIR
  2. #define SPI0_OUT        P1OUT
  3. #define SPI0_REN        P1REN
  4. #define SPI0_IN         P1IN
  5. #define SPI0_IE         P1IE
  6. #define SPI0_IES        P1IES
  7. #define SPI0_IFG        P1IFG

  8. #define SPI1_DIR        P3DIR
  9. #define SPI1_OUT        P3OUT
  10. #define SPI1_REN        P3REN
  11. #define SPI1_IN         P3IN
  12. #define SPI1_IE         P3IE
  13. #define SPI1_IES        P3IES
  14. #define SPI1_IFG        P3IFG

  15. #define CSN             BIT0//P1.0
  16. #define SI              BIT2//P1.2
  17. #define GPIO0           BIT4//P1.4

  18. #define SCLK            BIT1//P1.1
  19. #define SO              BIT3//P1.3
  20. #define GPIO2           BIT5//P1.5



  21. #define SPI_SCLK_LOW()          SPI1_DIR |= SCLK;\
  22.                                 SPI1_OUT &=~SCLK;
  23. #define SPI_SCLK_HIGH()         SPI1_DIR |= SCLK;\
  24.                                 SPI1_OUT |= SCLK;

  25. #define SPI_SDO_LOW()           SPI1_DIR |= SI;\
  26.                                 SPI1_OUT &=~SI;
  27. #define SPI_SDO_HIGH()          SPI1_DIR |= SI;\
  28.                                 SPI1_OUT |= SI;

  29. #define SPI_SDI()               (SPI1_IN & SO)
  30.                           
  31. #define SPI_SDI_INIT()          SPI1_DIR &= ~ BIT1;\
  32.                                 SPI1_OUT |= BIT1;\
  33.                                 SPI1_REN |= BIT1;
  34.                           
  35. #define SPI_CSN_LOW()           SPI1_DIR |= CSN;\
  36.                                 SPI1_OUT &=~CSN;
  37. #define SPI_CSN_HIGH()          SPI1_DIR |= CSN;\
  38.                                 SPI1_OUT |= CSN;
复制代码

  1. const uint8_t str[] = "www.eeworld.com.cn\r\n";
复制代码
通过send_packet函数将数据写入CC1101并发送,CC1101第0个字节是整个包的长度。
  1. void send_packet(uint8_t *buf,uint8_t len)
  2. {
  3.     buffer[0] = len;
  4.     memcpy(&buffer[1],buf,len);
  5.     CC1101_SendPacket(buffer);
  6. }
复制代码
在循环中每间隔1秒发一包数据
  1. int main( void )
  2. {
  3.     // Stop watchdog timer to prevent time out reset
  4.     WDTCTL = WDTPW + WDTHOLD;

  5.     PM5CTL0 &= ~LOCKLPM5;
  6.    
  7.     CC1101_Init();                                                              //始始化cc1101
  8.     CC1101_SetRx();                                                             //配置cc1101进入接收模式
  9.     while(1)
  10.     {
  11.           send_packet((uint8_t *)str,sizeof(str)/sizeof(str[0]));
  12.           LED_TOG();
  13.           delay_s(1);
  14.       }
  15. }
复制代码

接收端的LaunchPad因为引出的引脚不全,不能和发射端使用一样的配置。

  1. #define SPI1_DIR        P1DIR
  2. #define SPI1_OUT        P1OUT
  3. #define SPI1_REN        P1REN
  4. #define SPI1_IN         P1IN
  5. #define SPI1_IE         P1IE
  6. #define SPI1_IES        P1IES
  7. #define SPI1_IFG        P1IFG

  8. #define CSN             BIT3//P1.3
  9. #define SI              BIT4//P1.4
  10. #define GPIO0           

  11. #define SCLK            BIT5//P1.5
  12. #define SO              BIT7//P1.7
  13. #define GPIO2           



  14. #define SPI_SCLK_LOW()          SPI1_DIR |= SCLK;\
  15.                                 SPI1_OUT &=~SCLK;
  16. #define SPI_SCLK_HIGH()         SPI1_DIR |= SCLK;\
  17.                                 SPI1_OUT |= SCLK;

  18. #define SPI_SDO_LOW()           SPI1_DIR |= SI;\
  19.                                 SPI1_OUT &=~SI;
  20. #define SPI_SDO_HIGH()          SPI1_DIR |= SI;\
  21.                                 SPI1_OUT |= SI;

  22. #define SPI_SDI()               (SPI1_IN & SO)
  23.                           
  24. #define SPI_SDI_INIT()          SPI1_DIR &= ~ BIT1;\
  25.                                 SPI1_OUT |= BIT1;\
  26.                                 SPI1_REN |= BIT1;
  27.                           
  28. #define SPI_CSN_LOW()           SPI1_DIR |= CSN;\
  29.                                 SPI1_OUT &=~CSN;
  30. #define SPI_CSN_HIGH()          SPI1_DIR |= CSN;\
  31.                                 SPI1_OUT |= CSN;
复制代码
接收端主循环中暂时使用轮循的方式查收数据,收到数据后通过uart_tx_string函数将数据发送到PC。
  1. int main( void )
  2. {
  3.     // Stop watchdog timer to prevent time out reset
  4.     WDTCTL = WDTPW + WDTHOLD;

  5.     PM5CTL0 &= ~LOCKLPM5;
  6.     uart_init();
  7.     CC1101_Init();                                                              //始始化cc1101
  8.     CC1101_SetRx();                                                             //配置cc1101进入接收模式
  9.     while(1)
  10.     {
  11.         if(CC1101_ReceivePacket(buffer) != 0)                           //读取数据包
  12.         {
  13.           uart_tx_string((const char *)&buffer[1]);
  14.           CC1101_SetRx();                                               //进入接收模式
  15.         
  16.         }
  17.           LED_TOG();
  18.       }
  19. }
复制代码
实验的截屏如下:
最顶层的窗口是发射模块的电流情况,谷底有高有低是因为LED_TOG函数交替点亮熄灭LED的结果。因为使用1K限流电阻,LED的耗流是非常低的。
下边是连接好的实物图:
因为没做低功耗处理,模块在发射时的电流约30.86mA,空闲时的电流约1.99mA,空闲点亮LED的电流约3.40LED自身的电流消耗是3.40 – 1.99 = 2.41mA

最新回复

测试过LORA的模块吗?  详情 回复 发表于 2017-2-19 23:07
 
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复
举报

9795

帖子

24

TA的资源

版主

来自 2楼
 
yingonly2015 发表于 2016-3-29 11:23
楼主 能加我个QQ吗 新手求程序啊  我QQ121617767

30.msp430fr5969 cc1101 tx.rar (19.37 KB, 下载次数: 47)
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复

9795

帖子

24

TA的资源

版主

来自 3楼
 

30.msp430fr5969 cc1101 tx.rar (19.37 KB, 下载次数: 18)
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

4
 
求程序
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主 能加我个QQ吗 新手求程序啊  我QQ121617767
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢楼主  能加个QQ最好了 作为新手 有问题请教  谢谢 121617767
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

7
 
学习了,最近做小型化的设备刚接触MSP430,感觉低功耗的设计很不错。
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

8
 
楼主,程序的引脚配置是不是错的

点评

时间有点久了,应该是我实测过的 也许注释是错的 但是代码不会错  详情 回复 发表于 2016-12-17 15:50
 
 
 

回复

9795

帖子

24

TA的资源

版主

9
 
qepdcri 发表于 2016-12-17 14:57
楼主,程序的引脚配置是不是错的

时间有点久了,应该是我实测过的
也许注释是错的
但是代码不会错
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复

18

帖子

0

TA的资源

一粒金砂(初级)

10
 
测试过LORA的模块吗?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表