打印

关于5310单片机中的UART口配置问题

[复制链接]
3188|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shenmulzb1985|  楼主 | 2012-8-10 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做关于MSP430F5310单片机的一个小项目,看了下TI官方提供的例程跟先关pdf资料,看完后还是一知半解的,希望哪位高手或者已经熟练用过该款单片机的高手给解答下的 啊,谢谢!
晶振都为内部默认的DCO1MHz,
例程1:
ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz

  P3SEL = BIT3+BIT4;                        // P3.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 6;                              // 1MHz 9600 (see User's Guide)
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16;   // Modln UCBRSx=0, UCBRFx=0,
                                            // over sampling
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt

例程2:
ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
P3SEL |= BIT3+BIT4;                       // P3.3,4 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 9;                              // 1MHz 115200 (see User's Guide)
  UCA0BR1 = 0;                              // 1MHz 115200
  UCA0MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt

该处两个例程,一个为波特率9600,例程2为115200,我都实际的试验过了,也是如此,但是就是对比其的相关寄存器设置时,尤其是例程1 ,看的不太明白的,另外,资料上显示:

这相关的寄存器设置看不明白的,希望高手给解答以下的啊

0810.jpg (94.17 KB )

0810.jpg

相关帖子

沙发
peter_zheng| | 2012-8-11 10:56 | 只看该作者
你可以在应用手册里,在uart波特率这块有个表,不同的频率对应着不同的参数。

使用特权

评论回复
板凳
shenmulzb1985|  楼主 | 2012-9-4 13:47 | 只看该作者
各位大虾有莫有用过5系列的单片机的啊,这个波特率的设置问题的还是的请教各位了啊

使用特权

评论回复
地板
GG_GG| | 2012-9-4 17:05 | 只看该作者
修改例程就可以了

使用特权

评论回复
5
figo20042005| | 2012-9-4 21:01 | 只看该作者
仔细推敲下,算一下吧

使用特权

评论回复
6
vivilzb1985| | 2012-9-5 09:30 | 只看该作者
楼主那主频为1MHz的,波特率为9600,两种配置防止都是可以的,只是最终的数据误差率不一样而已的,可以看下我下边给的两个关于9600配置的参数资料

使用特权

评论回复
7
vivilzb1985| | 2012-9-5 09:36 | 只看该作者
楼主比较下这两种设置9600波特率的就知道了啊

9600_1.jpg (56.52 KB )

9600_1.jpg

9600_2.jpg (34.76 KB )

9600_2.jpg

使用特权

评论回复
8
wjzx111056| | 2012-9-5 20:10 | 只看该作者
我用的单片机是MSP430F149,给你传个我们测试串口的程序吧!这是测试通过了的,你可以参考参考!有不对的地方还望各位不吝赐教!多交流吧!
#include <msp430x14x.h>

#include "newdefine.h"

void SendString(const char* ARRAY);

void SendChar(char ch);

void SendString0(const char* ARRAY);

void SendChar0(char ch);

const char banner0[]="i'm uart0.";

const char banner1[]="i'm uart1.";

void Delay(unsigned int t);

void speedout(char d);

int main( void )

{
  // Stop watchdog timer to prevent time out reset

   WDTCTL = WDTPW + WDTHOLD;

    WDTCTL = WDT_ADLY_250;                 // Set Watchdog Timer interval to ~30ms

    IE1 |= WDTIE;                       // Enable WDT interrupt

    P1DIR=0;

    P1DIR|=M_CTRL_c+T_SELT_c;

    P1OUT|=M_CTRL_c;
   
    P1OUT|=T_SELT_c;

  P3DIR=0;

  P3SEL|=TXD0+RXD0+TXD1+RXD1;

  
  //P4
    P4DIR=0xff;
   
    P4DIR|=RS485_Power_Ctrl;

    P4OUT=0x00;

    P4OUT|=RS485_Power_Ctrl;
   
    P5DIR=0x00;

    P5DIR|=GSM_Power_Ctrl+BIT2+BIT3;

    P5OUT|=GSM_Power_Ctrl;
         P5OUT|=BIT2;
         P5OUT|=BIT3;
    P6DIR=0x00;

    P6DIR|=BUZZER_Ctrl;

    P6OUT=0x00;
   
      Delay(100);
   //UART0_SET
    UCTL0&=~SWRST;               //reset uart   

    UCTL0=0x10;                  //Idle line multiprocessor Protocol, 8 data bits, 1 stop bit

偶校验

    UBR00=0x0d;                  //rate=4800bps

    UBR10=0x00;  

    UMCTL0=0x6b;

    UTCTL0=0x10;                 //时钟源:ACLK

    URCTL0=0x00;

    ME1|=(URXE0+UTXE0);          //enable USART transmit

    IE1|=URXIE0+UTXIE0;

    P3SEL|=0x30;                  //Pin P3.4 and Pin 3.5 used by USART module   
   
     SendString0("\r\n");

     SendString0(banner0);

     SendChar0('\n');

     
      //UART1_SET     
    U1CTL&=~SWRST;               //reset uart

    U1CTL=0x10;                  //Idle line multiprocessor Protocol, 8 data bits, 1 stop bit

    U1BR0=0x0d;                  //rate=2400bps

    U1BR1=0x00;  

    U1MCTL=0x6b;

    U1TCTL=0x10;                 //时钟源:ACLK

    U1RCTL=0x00;   
       
    ME2|=(URXE1+UTXE1);          //enable USART transmit

    IE2|=URXIE1+UTXIE1;

    P3SEL|=0xC0;                  //Pin P3.6 and Pin 3.7 used by USART module
   
    SendString("\r\n");

     SendString(banner1);

     SendChar('\n');

     speedout(2);

     LPM1;

}

void Delay(unsigned int t)

{

    while (t--);

}




void SendString(const char* ARRAY)

{

int i=0;

   while (ARRAY[i])          // transmit " String" via RS232

   {  

      SendChar(ARRAY[i]);

                i++;

                           }

}
   


void SendChar(char ch)

{

      while ((U1IFG&UTXIFG1)==0);// wait till TX buf empty  
          
      TXBUF1=ch;                 // transmit ch
          
}

void SendString0(const char* ARRAY)

{

int i=0;

   while (ARRAY[i])          // transmit " String" via RS232

   {  

      SendChar0(ARRAY[i]);

      i++;

   }

}
   


void SendChar0(char ch)

{

      while ((U0IFG&UTXIFG0)==0);// wait till TX buf empty
          
      TXBUF0=ch;                 // transmit ch

}

void speedout(char d)

{

  char i;

  for (i=0;i<d;i++)

  {
     
       P6OUT|=BUZZER_Ctrl;

       Delay(5000);
      Delay(5000);
       P6OUT&=~BUZZER_Ctrl;

       Delay(5000);
Delay(1000);
  }
  
}

使用特权

评论回复
9
wjzx111056| | 2012-9-5 20:12 | 只看该作者
另外给你传个MSP430单片机串口波特率技术的一个小工具,很方便的!不然每次修改波特率都要很麻烦地去计算!

430波特率计算器.rar

251.77 KB

使用特权

评论回复
10
springspring| | 2012-9-7 12:25 | 只看该作者
波特率计算不准确,数据发送经常会出错啊

使用特权

评论回复
11
shenmulzb1985|  楼主 | 2012-9-11 13:25 | 只看该作者
楼上的各位,我结贴了啊,欢迎各位继续跟进啊

使用特权

评论回复
12
窩窩頭| | 2013-4-27 15:13 | 只看该作者
哪有官网demo code下载啊   求帮忙   我找不到

使用特权

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

本版积分规则

0

主题

440

帖子

1

粉丝