打印

msp147片子上电,串口异常发送数据0x00。

[复制链接]
1663|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mingyuekd|  楼主 | 2010-10-12 17:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题救急,msp147片子上电,串口异常发送一次数据0x00。
串口初始化是这样的
BCSCTL2 |= SELM1+SELM0;               // MCLK = LFXT1 (safe)   
  UTCTL0 = SSEL0;                       // UCLK = ACLK
  UBR00 = 0x00;                         // 7.3728Mhz/9600 - 768
  UBR10 = 0x03;                         // 7.3728Mhz/9600 - 768  
  UMCTL0 = 0x00;                        // no modulation
  ME1 |= URXE0;                         //// Enable USART0 TXD/RXD
  IE1 |= URXIE0;                        // Enable USART0 RX interrupt
  P3SEL |= 0x20;                        // P3.5 = USART0 RXD  
  P3DIR |= 0x10;                        // P3.4 output direction
此串口初始,收发一直都很正常。
但有个问题,我每次板子上电时候,总是发现串口TXBUF0向外扔了个数据0x00.后面收发都正常。程序比较大,有看门狗,中途会复位,每复位一次TXBUF0向外扔数据0x00。 这个数据对系统非常致命。有哪位朋友遇到过没。
非常感谢,解救。

相关帖子

沙发
虎虎生威| | 2010-10-12 19:20 | 只看该作者
好像论坛上有好多类似的问题。

使用特权

评论回复
板凳
riantsoul| | 2010-10-12 19:31 | 只看该作者
先用示波器测一下电平是否符合要求,是否硬件出了问题。

使用特权

评论回复
地板
Donald-Duck| | 2010-10-12 19:48 | 只看该作者
是不是波特率没设置好呢,串口只接收到0,很大程度上是由于波特率没设对。

使用特权

评论回复
5
dewlife| | 2010-10-12 20:01 | 只看该作者
其实波特率要想设好,好得花上一定的时间好好看看数据手册的,哪个寄存器没设置到就会不能正常通信。

使用特权

评论回复
6
bit6019| | 2010-10-14 22:47 | 只看该作者
还是先把数据手册好好看看吧

使用特权

评论回复
7
lvyunzeng| | 2010-10-15 09:59 | 只看该作者
// ===============================================================================================                                                 
// 文件名称:uart.c
// 芯片类型: MSP430F148                                                                                                                 
// 开发软件: IAR Embedded Workbench V3.2 , Windows XP                                                                                    
// 开发时间:2007年01月21日                                                               
// 程序功能:使用MSP430F148的 UART0 对应的P3.4--UTXD0;P3.5--URXD0;
//           实现与PC机进行串口通信,PC机发来的数据单片机原数送回。
// 编写人员:吕云曾                                                                       
// 联系方式:13845052176  lvyunzeng@163.com                                               
// ================================================================================================  
//========================================= 头文件 ================================================
#include  <msp430x14x.h>
//========================================== 宏定义 ===============================================

#define uchar unsigned char

//======================================== 函数声明 ================================================
void delayX10ms(int count);  //=== 延时 ===
void Send(uchar ch);         //=== 向串口发送数据子函数===  
void Uart_int();             //===UART初始化配置===
//=================================================================================================
//========================================== 主函数  ==============================================
//=================================================================================================
void main(void)
{  

   unsigned int iq0;
  WDTCTL  = WDTPW + WDTHOLD;   //=== Stop watchdog timer ===
  
//--- 使用XT2振荡器 ---
   BCSCTL1&=~XT2OFF;                   //=== 打开XT2振荡器 ===
   do
   {
   IFG1 &= ~OFIFG;                     //=== 清除振荡器失效标志 ===
   for (iq0 = 0xFF; iq0 > 0; iq0--);   //=== 延时,等待XT2起振 ===
  }
  while ((IFG1 & OFIFG) != 0);         //=== 判断XT2是否起振 ===

  BCSCTL2 =SELM_2+SELS;                //=== 选择MCLK、SMCLK为XT2 ===
  
  P3SEL   |= 0x30;            // Function select, P3.4,5 = USART0 TXD/RXD,  
  P4DIR  |= 0x01;             //===Set P4.0 to output direction===
  Uart_int();

while (1)
  {
   _BIS_SR(LPM3_bits + GIE);               // Enter LPM3 w/interrupt
  }

}

//=============================/;.=====================================================
//==================== 向串口发送数据子函数  =======================================
//==================================================================================
void Send(uchar ch)
{
  while (!(IFG1 & UTXIFG0));              // USART0 TX buffer ready?
  TXBUF0 = ch;                            // char to TXBUF0
}
//==================================================================================
//========================= UART初始化配置 =========================================
//==================================================================================
void Uart_int()
{
  ME1     |= UTXE0 + URXE0;               // Enable USART0 TXD/RXD, ref.Page 17
  UCTL0   |= CHAR;                        // 8-bit character
  UTCTL0  |= SSEL0;                       // UCLK = SMCLK
  UBR00    = 0x03;                        // Baudrate registor, UART0= 32k/9600 - 3.41
  UBR10    = 0x00;                        // UART1 OFF
  UMCTL0   = 0x4A;                        // Modulation:01001010  '1'->3/8=.375
  UCTL0   &= ~SWRST;                      // Initialize USART state machine
  IE1     |= URXIE0;                      // Enable USART0 RX interrupt, ref.Page 16
  
}            


//==================================================================================
//=========================子函数delayX10ms=========================================
//==================================================================================
void delayX10ms(int count)   //===延迟===
{
unsigned int i,j,k;
for (i=0; i<count; i++)
  for(j=0; j<10; j++)
    for(k=0; k<120; k++);
}

//==================================================================================
//=====================  UART0 RX 中断服务子程序  ==================================
//==================================================================================
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
  _BIC_SR_IRQ(LPM3_bits);                 // Clear LPM3 bits from 0(SR)
  Send(RXBUF0);                           // Send RXBUF0
  P4OUT ^= 0x01;                          //===P4.0取反输出
}

使用特权

评论回复
8
lvyunzeng| | 2010-10-15 09:59 | 只看该作者
测试通过的程序段,自己看看吧!

使用特权

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

本版积分规则

58

主题

151

帖子

0

粉丝