430的串口程序,快把我逼疯了

2019-03-24 13:13发布

在使用msp430afe253调试一个串口程序,程序如下:

  DCOCTL = DCO0+DCO1;
  BCSCTL1 = RSEL2+RSEL1+RSEL0;              // 配置时钟,主时钟1MHz //
  BCSCTL2 = 0x00;;                          // 配置时钟,SMCLK为1MHz //
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1SEL = BIT3;                             // P1.3=TXD
  P2SEL = 0x00;
  ME1 |= UTXE0;                             // Enable USART0 TXD
  U0CTL |= CHAR;                            // 8-bit character
  U0TCTL |= SSEL1;                          // BRCLK= SMCLK
  U0BR0 = 0x68;                              
  U0BR1 = 0x00;                             
  U0MCTL = 0x10;                            // 波特率9600Hz
  U0CTL &= ~SWRST;                          // Initialize USART state machine
  IE1 |= UTXIE0;                            // Enable USART0 TX interrupt
  TXBUF0=0x3c;
  __bis_SR_register(GIE);                   // Enter all interrupts
   while(1);


#pragma vector=USART0TX_VECTOR
__interrupt void USART0TX(void)
{
    TXBUF0 = 0xaa;
}

我现在全速运行时无法进入中断,但是全速运行中stop一下就能很快进入中断了,但是在中断中无法发送出去信号,我用示波器检测捕捉不到信号。另外我关闭串口中断,在主程序中用查询方式发送串口数据,也无法发送出去。但是之前我在主程序中能发出去,后来忘了改了哪一块儿现在发不了了。请大神们帮帮忙吧。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
yangxf1217
1楼-- · 2019-03-24 20:09
发送应该是直接发就可以了吧,好像不需要中断的,
这句话TXBUF0 = 0xaa;执行以后才能进入发送中断大概,
你试试,记不太清了,好像是这样的
yangxf1217
2楼-- · 2019-03-25 00:46
 精彩回答 2  元偷偷看……
绵里针
3楼-- · 2019-03-25 01:00
我用示波器设置的触发检测,只要有电平变化就能检测到。而且我曾经试过循环发送,但是依然检测不到。而且发送中断确实是TXBUF0=0xaa执行完才进入发送中断,但是它是循环发送啊,只要执行完就进入中断,再次给buf数据发送,然后发送完再进入中断。还是检测不到。
ly971021598
4楼-- · 2019-03-25 02:41
我用的是MSP430F149的芯片,单片机的串口通讯有特定的引脚,如果你确定你的硬件没接错的话,你的代码比较少可以单步调试看看。
yangxf1217
5楼-- · 2019-03-25 03:54
 精彩回答 2  元偷偷看……
绵里针
6楼-- · 2019-03-25 06:08
我进行单步调试了,也是无法正常发送,只是给TXBUF数据时端口电平会置零,但是接下来就没有高电平了。还有个情况就是:进中断时运行时需暂停一下才能进入。

一周热门 更多>

相关问题

    相关文章