打印

msp430f149串口问题

[复制链接]
889|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
李小川希比|  楼主 | 2015-10-22 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一直被这个问题困扰,串口发送不了数据,拿到示波器上看,串口输出是正弦波,希望大家帮忙看看是程序有问题吗?
#include  <msp430f149.h>
unsigned char shuju;
#define DGUS_HEAD        0x5AA5
int LocalColorNum = 0;

    void TS_SendChar(unsigned Chr)
    {

      shuju = Chr;
      _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt

    }

    void SendByte(int cont)
    {
            //WaitForTxBufEmpty
            TS_SendChar((unsigned char)cont);
    }
    void SendWord(int cont)
    {

            SendByte(cont >> 8);
            SendByte(cont & 0x00FF);
    }
    void EndSend(void)
    {
            ;
    }


void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL = 0x30;                            // P3.4,5 = USART1 TXD/RXD
  U0CTL |= SWRST;
  ME1 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  U0CTL |= CHAR;
  U0TCTL |= SSEL1;                     //ACLK

  U0BR1 = 0x03;                             // 32k/9600 - 3.41
  U0BR0 = 0x00;                             //
  U0MCTL=0x4A;

  U0CTL &= ~SWRST;                            // Initialize USART state machine
  IE1 |= UTXIE0;                           // Enable USART0 RX interrupt

  _BIS_SR( LPM3_bits +GIE);                 // Enter LPM3 w/ interrupt
  while(1)
  {
           SendWord(DGUS_HEAD);
           SendWord(0x00FF);
           SendWord(0x0582);
           SendWord(LocalColorNum);
           EndSend();

  }
}

#pragma vector=USART0TX_VECTOR
__interrupt void usart0_tx (void)
{
// while (!(IFG1 & UTXIFG0));                // USART0 TX buffer ready?
  U0TXBUF = shuju;                    
  IFG1 &= ~UTXIFG0;                         // Clear inital flag on POR
}

相关帖子

沙发
bkn1860| | 2015-10-22 17:29 | 只看该作者
把配置好好检查一下  最好用原厂的例程跑一下   如果例程可以,那问题就出在你的设置上了   设置正确的话只要给发送寄存器赋值就会有变化的电平出来的  

使用特权

评论回复
板凳
309030106| | 2015-10-23 14:01 | 只看该作者
是自己画的板子还是学习板,有的学习板上要连接跳线帽的

使用特权

评论回复
地板
旧影子| | 2015-10-23 21:48 | 只看该作者
串口的例程,建议直接跑官方的例程。测试OK,修改即可。

使用特权

评论回复
5
Thor9| | 2015-10-23 22:52 | 只看该作者
串口的例程比较成熟的,下个官方提供的例程观察一下

使用特权

评论回复
6
Thefantasy| | 2015-10-24 13:12 | 只看该作者
看上去没什么问题呀。寄存器的配置再仔细看看。

使用特权

评论回复
7
低八度的声线| | 2015-10-24 14:29 | 只看该作者
给你个例程看看,看上去没什么问题的
只向电脑发送字符串
#include "msp430x14x.h"
#define uchar unsigned char
uchar DATA[]="hello world my name!";
void main()
{
  // Stop watchdog timer to prevent time out reset
        uchar i,j;
        WDTCTL = WDTPW + WDTHOLD;
        //使用外部高频晶体振荡器
        BCSCTL1&=~XT2OFF;
        do{
          IFG1&=~OFIFG;
          for(j=0XFF;j>0;j--);
        }while((IFG1&OFIFG));
        BCSCTL2|=SELM_2;  
        P3DIR|=BIT4+BIT7;
        P3SEL|=BIT4+BIT7;
        
        ME1 |= UTXE0 + URXE0;  // 使能USART0收发
        UCTL0 |= CHAR;     // 8-bit 数据,一位停止位
        UTCTL0 |= SSEL0;           // 选择时钟,UCLK = ACLK,32768
        UBR00 = 0x03;    // 32k/9600
        UBR10 = 0x00;   //
        UMCTL0 = 0x4a;            // Modulation
        UCTL0 &= ~SWRST;    // 初始化UART0状态机,一般要设置好串口之后才复位      
          for(i=0;i<=20;i++)
          {
            TXBUF0=DATA[i];
            while((UTCTL0&0X01)==0);//等待数据发送完毕         
          }
          while(1);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

84

帖子

2

粉丝