本帖最后由 yufanjoy 于 2014-11-14 14:12 编辑
在调试CC430串口的时候遇到个问题:
用串口自收自发:收到什么就发什么,用的是中断处理的,具体程序如下:
void main( void )
{
Initucs(); //初始化系统时钟
WDTCTL = WDTPW + WDTHOLD;
SetVCore(2); //提升内核电压 PMM Core Voltage 2 (1.75V) Increase PMMCOREV level to 2 for proper radio operation
ResetRadioCore(); //复位cc430 里面的Radio
InitRadio(); //初始化CC430 的Radio 模块:主要是开启PMM的高能量消耗允许,配置CC430的Radio寄存器,设置发射功率等。
InitLeds(); //初始化按键和LED
InitUart(); //初始化串口
ReceiveOn(); //开启RF接收
_EINT(); //开启全局中断
while (1)
{
__no_operation();
}
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
主函数就是对串口初始化而已,并未有其他关于数组和指针的操作,程序的主要是要实现串口接收和发送,所以就简单写了下串口初始化和串口数据处理代码,用串口调试助手每隔80ms发送数据,程序在收到数据后就自动发到串口调试助手。
程序刚开始运行的半个多小时时间内,跑的很正常,可以自收自发,但是要是时间再跑长点,程序就进入?reset_vector段里面去了,调试log里面显示的溢出了,但是我没有涉及数组和指针的操作,怎么会溢出啊,百思不得其解啊,烦请各位大侠帮我参谋参谋啊!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
版主你好!完整的代码就少了一段 inituart()函数的代码,这个代码就是初始化寄存器而已,程序如下:
void InitUart()
{
P1SEL |= BIT5 + BIT6; // 选用P1.5 1.6的第二功能作为串口输入输出口 ,P1.5为 UCA0RXD P1.6为 UCA0TXD
P1DIR |= BIT6; //P1.6设为输出
P1DIR &=~BIT5; //P1.5设为输入
UCA0CTL0 = 0;//无校验 1停止位 8位数据 异步串行通信
UCA0CTL1 |= 0XC1;//SMCLK 时钟 、使能软件复位
UCA0BR0 = 0XEC; //波特率为 115200 26*1048576/115200
UCA0BR1 = 0;
UCA0MCTL |= UCBRS_3 + 0 ; // 设置波特率调整参数
UCA0CTL1 &= ~UCSWRST; // 恢复UCSWRST
UCA0IE |= UCRXIE; // 使能接收中断
}
程序只有这些代码了,其他的初始化代码都是空函数,没有写代码进去,整个程序的流程图是初始化串口 然后运行到while一直空循环等待串口自收自发,涉及到stack的只有串口接收和发送的数据寄存器了,按理说这2个8位的寄存器应该是收一个就发一个出去的,不会溢出啊,会不会是我收发的时间太短了呀?
一周热门 更多>