msp430f149串口问题

2019-07-25 15:07发布

最近一直被这个问题困扰,串口发送不了数据,拿到示波器上看,串口输出是正弦波,希望大家帮忙看看是程序有问题吗?
  1. #include  <msp430f149.h>
  2. unsigned char shuju;
  3. #define DGUS_HEAD        0x5AA5
  4. int LocalColorNum = 0;

  5.     void TS_SendChar(unsigned Chr)
  6.     {

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

  9.     }

  10.     void SendByte(int cont)
  11.     {
  12.             //WaitForTxBufEmpty
  13.             TS_SendChar((unsigned char)cont);
  14.     }
  15.     void SendWord(int cont)
  16.     {

  17.             SendByte(cont >> 8);
  18.             SendByte(cont & 0x00FF);
  19.     }
  20.     void EndSend(void)
  21.     {
  22.             ;
  23.     }


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

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

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

  37.   _BIS_SR( LPM3_bits +GIE);                 // Enter LPM3 w/ interrupt
  38.   while(1)
  39.   {
  40.            SendWord(DGUS_HEAD);
  41.            SendWord(0x00FF);
  42.            SendWord(0x0582);
  43.            SendWord(LocalColorNum);
  44.            EndSend();

  45.   }
  46. }

  47. #pragma vector=USART0TX_VECTOR
  48. __interrupt void usart0_tx (void)
  49. {
  50. // while (!(IFG1 & UTXIFG0));                // USART0 TX buffer ready?
  51.   U0TXBUF = shuju;                    
  52.   IFG1 &= ~UTXIFG0;                         // Clear inital flag on POR
  53. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
bkn1860
1楼-- · 2019-07-25 17:50
把配置好好检查一下  最好用原厂的例程跑一下   如果例程可以,那问题就出在你的设置上了   设置正确的话只要给发送寄存器赋值就会有变化的电平出来的  
309030106
2楼-- · 2019-07-25 20:32
是自己画的板子还是学习板,有的学习板上要连接跳线帽的
旧影子
3楼-- · 2019-07-26 02:17
串口的例程,建议直接跑官方的例程。测试OK,修改即可。
Thor9
4楼-- · 2019-07-26 07:34
串口的例程比较成熟的,下个官方提供的例程观察一下
Thefantasy
5楼-- · 2019-07-26 10:42
 精彩回答 2  元偷偷看……
低八度的声线
6楼-- · 2019-07-26 10:58
给你个例程看看,看上去没什么问题的
  1. 只向电脑发送字符串
  2. #include "msp430x14x.h"
  3. #define uchar unsigned char
  4. uchar DATA[]="hello world my name!";
  5. void main()
  6. {
  7.   // Stop watchdog timer to prevent time out reset
  8.         uchar i,j;
  9.         WDTCTL = WDTPW + WDTHOLD;
  10.         //使用外部高频晶体振荡器
  11.         BCSCTL1&=~XT2OFF;
  12.         do{
  13.           IFG1&=~OFIFG;
  14.           for(j=0XFF;j>0;j--);
  15.         }while((IFG1&OFIFG));
  16.         BCSCTL2|=SELM_2;  
  17.         P3DIR|=BIT4+BIT7;
  18.         P3SEL|=BIT4+BIT7;
  19.         
  20.         ME1 |= UTXE0 + URXE0;  // 使能USART0收发
  21.         UCTL0 |= CHAR;     // 8-bit 数据,一位停止位
  22.         UTCTL0 |= SSEL0;           // 选择时钟,UCLK = ACLK,32768
  23.         UBR00 = 0x03;    // 32k/9600
  24.         UBR10 = 0x00;   //
  25.         UMCTL0 = 0x4a;            // Modulation
  26.         UCTL0 &= ~SWRST;    // 初始化UART0状态机,一般要设置好串口之后才复位      
  27.           for(i=0;i<=20;i++)
  28.           {
  29.             TXBUF0=DATA[i];
  30.             while((UTCTL0&0X01)==0);//等待数据发送完毕         
  31.           }
  32.           while(1);
  33. }
复制代码

一周热门 更多>