我现在的整机是:使用的mcu是msp430f2132(以下简称2312),连接串口连接mcu为CC1310的透传模块(以下简称模块)。
主要问题是,进入休眠以后,整机的功耗异常,有100uA。
我测试以下几种情况:
1、断开2312的tx与模块的rx引脚,正常初始化2132的串口,整机进入休眠后,电流为2.4uA左右。
2、正常连接2312tx与模块的rx,但不初始化2132的串口,那么进入休眠以后,整机电流为2.4uA左右。
3、正常连接2312tx与模块的rx,正常初始化2132的串口,
a、进入休眠前,若拉高2132的tx 引脚,那么整机休眠电流为2mA;
b、进入休眠前,若拉低2132的tx引脚,那么整机休眠电流为100uA;
c、进入休眠前,不处理2132的tx引脚,那么整机休眠电流为2mA。
有什么方法,可以在正常初始化2132的串口后,在关闭2132的串口吗?
我初始化2132串口的代码是:
P3SEL |= 0x30; // P3.4,5 = USCI_A0 TXD/RXD
P3DIR |= BIT4;
P3DIR &= ~BIT5;
UCA0CTL1 |= UCSWRST;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0CTL0 = 0x00;
UCA0BR0 = 0x68; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS1+ UCBRS0;
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE;
IE2 &= ~UCA0TXIE;
Susan Yang:
您现在是进入的哪种低功耗模式?
您可以尝试将串口TX、RX引脚在进入低功耗模式前设置为普通IO口或者直接关闭串口时钟
另外您现在是用MSP430和CC1310串口通信?能具体说一下您的应用吗?谢谢
user5128215:
回复 Susan Yang:
我是购买的一个厂家的CC1310透传模块,我的应用是通过msp430f2312通过串口发送数据给CC1310模块,然后CC1310模块将数据发送给服务器端。
我在进入低功耗模式前,已经将tx口设置为了普通端口:P3SEL = 0;UCA0CTL1 |= UCSWRST;UCA0CTL1 &= ~UCSSEL_2;UCA0BR0 = 0;UCA0MCTL =0;UCA0CTL0 = 0x02;UCA0CTL1 &= ~UCSWRST; P3DIR |=BIT4;
//P3OUT &= ~BIT4; P3OUT |= BIT4;请问如何直接关闭串口时钟?
Susan Yang:
回复 user5128215:
您的SMCLK 的信号源是什么?您现在是进入的哪种低功耗模式?LPM2之后SMCLK时钟是OFF的
另外您为何要用MSP430给CC1310传数据呢,您可以尝试直接使用1310获取数据(毕竟是M3的内核)?
user5128215:
回复 Susan Yang:
我现在进入的LPM3_bits休眠。
CC1310的开发是基于操作系统的,我们这边没有软件的技术支持,而且CC1310的资料基本都是英文的,之前试过了,开发进度很慢 ,所以才选用的模块。
user5128215:
回复 Susan Yang:
请问如何能将串口TX、RX引脚在进入低功耗模式前设置为普通IO口?
灰小子:
回复 user5128215:
因为你的串口使用到了SMCLK,导致在进入低功耗模式的时候,无法关闭SMCLK,从而msp430没有真正进入低功耗模式
user5128215:
回复 灰小子:
请问,如何手动关闭SMCLK时钟呢?
user5128215:
回复 灰小子:
进入LPM3休眠,应该是关闭了SMCLK时钟了的,我现在的情况,只要不了解2132的通信与cc1310的rx,休眠电流只有2.4uA左右。
灰小子:
回复 user5128215:
一般情况,当需要在LPM3低功耗模式有串口通讯的需求时,可以把串口的时钟源配置为ACLK或dco
或者如果使用smclk作为时钟源,使用LPM0/lpm1低功耗模式,这两个低功耗模式不会关闭smclk
user4856044:
详细查看技术手册