|
最近我在用MSP430G2744做一个项目,需要使用到串口通信,串口使用完后 需要进行低功耗处理,我将TX和RX脚(P3.5、p3.4)取消了串口功能,然后下次需要使用串口的时候 再将TX和RX配置为串口功能脚。
在没有开启定时器A时,这样使用很OK,但是启动定时器A后,使用串口收发数据 就出问题了,无法正常收发数据。
代码如下:
串口配置函数
void UartInit(void)
{
P3SEL |= BIT4 + BIT5;
UCA0CTL1 |= UCSSEL_1; // SMCLK
UCA0BR0 = 0x03; // 32768Hz 9600
UCA0BR1 = 0x00; // 32768Hz 9600
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
}
使用串口与外部设备通讯函数
void ReadCounter(uint8_t *Data)
{
uint16_t i = 600;
P4OUT |= BIT6;
P3SEL |= BIT4 + BIT5;
UCA0CTL1 |= UCSSEL_1; // SMCLK
UCA0BR0 = 0x03; // 32768Hz 9600
UCA0BR1 = 0x00; // 32768Hz 9600
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
UartRxflag = FALSE;
i = 100;
while(i--);
UartSend("R",1);
i = 30000;
while((UartRxflag == FALSE)&&(i--));
if(UartRxflag == TRUE)
{
Data[0] = 0xF0;
Data[0] |= (UartBuff[0]&0x0F);
Data[1] = UartBuff[1];
Data[2] = UartBuff[2];
}
else
{
Data[0] = 0xF0;
Data[1] = 0xF0;
Data[2] = 0xF0;
}
P4OUT &= ~BIT6;
UCA0CTL1 |= UCSWRST;
// P3SEL &= ~(BIT4 + BIT5); //就是这句代码 很奇怪,定时器A不工作是 这段代码 加上 能正常工作,定时器A公司 这段代码 加上 就串口就收不到数据
}
请各位大侠帮忙看下,到底是啥原因,也请分享下 使用了串口 后怎么样进度低功耗处理?
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|