打印
[应用相关]

用串口助手调试时一直无信号

[复制链接]
1032|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shashaa|  楼主 | 2018-10-14 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "PIN_DEF.H"

#define  FLL_FACTOR     749                                          // FLL_FACTOR: DCO倍频系数   
char  event, RXBuffer[2]                                           ;

//***************************************************************************//
//                                                                           //
//  USB接收中断服务程序                                                      //
//                                                                           //
//***************************************************************************//
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
  switch(__even_in_range(UCA1IV,4))
  {
  case 0:break                                                     ; // Vector 0 - no interrupt
  case 2:                                                            // Vector 2 - RXIFG
      RXBuffer[0]      = UCA1RXBUF                                 ;
      event           |= 0x01                                      ;
      break                                                        ;
  case 4:break                                                     ;  // Vector 4 - TXIFG
  default: break                                                   ;  
  }  
}

//***************************************************************************//
//                                                                           //
//  RS232/485接收中断服务程序                                                //
//                                                                           //
//***************************************************************************//
#pragma vector=USCI_A3_VECTOR
__interrupt void USCI_A3_ISR(void)
{
  switch(__even_in_range(UCA3IV,4))
  {
  case 0:break                                                     ; // Vector 0 - no interrupt
  case 2:                                                            // Vector 2 - RXIFG
      RXBuffer[0]      = UCA3RXBUF                                 ;
      event           |= 0x01                                      ;
      break                                                        ;
  case 4:break                                                     ;  // Vector 4 - TXIFG
  default: break                                                   ;  
  }  
}

//***************************************************************************//
//                                                                           //
//                 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1)                  //
//                                                                           //
//***************************************************************************//
void Init_CLK(void)
{
  WDTCTL     = WDTPW + WDTHOLD                            ; // 关看门狗
  P7SEL     |= 0x03                                       ; // 端口选择外部低频晶振XT1
  UCSCTL6   &=~XT1OFF                                     ; // 使能外部晶振
  UCSCTL6   |= XCAP_3                                     ; // 设置内部负载电容
  UCSCTL3   |= SELREF_2                                   ; // DCOref = REFO
  UCSCTL4   |= SELA_0                                     ; // ACLK   = XT1  
  __bis_SR_register(SCG0)                                 ; // 关闭FLL控制回路
  UCSCTL0    = 0x0000                                     ; // 设置DCOx, MODx
  UCSCTL1    = DCORSEL_7                                  ; // 设置DCO振荡范围
  UCSCTL2    = FLLD__1 + FLL_FACTOR                       ; // Fdco = ( FLL_FACTOR + 1)×FLLRef = (649 + 1) * 32768 = 21.2992MHz
  __bic_SR_register(SCG0)                                 ; // 打开FLL控制回路                                                            
  __delay_cycles(1024000)                                 ;
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志                                                            
    SFRIFG1 &= ~OFIFG                                     ;
  }while(SFRIFG1&OFIFG)                                   ; // 检测振荡器错误标志
}
//***************************************************************************//
//                                                                           //
//  Init_Port(void): 设置IO端口                                              //
//                                                                           //
//***************************************************************************//
void Init_Port(void)
{
  P5DIR  |= POWER                                                  ; // 主电源
  MAIN_POWER_ON                                                    ;
  P7DIR  |= LED_PWR                                                ; // 发光二极管电源
  P7OUT  &=~LED_PWR                                                ;
  INTERNAL_PULL_UP                                                 ; // 使能键盘端口内部上拉电阻
  ROW_IN_COL_OUT                                                   ; // 设置行输入,列输出0
}

//***************************************************************************//
//                                                                           //
//  Init_UART(void): 初始化USB端口                                           //
//                                                                           //
//***************************************************************************//
void Init_UART(void)
{
  USB_PORT_SEL   |= TXD_U + RXD_U                                  ; // 选择引脚功能
  USB_PORT_DIR   |= TXD_U                                          ; // 选择引脚功能
  UCA1CTL1        = UCSWRST                                        ; // 状态机复位
  UCA1CTL1       |= UCSSEL_1                                       ; // CLK = ACLK
  UCA1BR0         = 0x03                                           ; // 32kHz/9600=3.41
  UCA1BR1         = 0x00                                           ;
  UCA1MCTL        = UCBRS_3 + UCBRF_0                              ; // UCBRSx=3, UCBRFx=0
  UCA1CTL1       &= ~UCSWRST                                       ; // 启动状态机
  UCA1IE         |= UCRXIE                                         ; // 允许接收中断
}


//***************************************************************************//
//                                                                           //
//  Init_RSUART(void): 初始化RS232/485端口                                   //
//                                                                           //
//***************************************************************************//
void Init_RSUART(void)
{
  RS_PORT_SEL    |= TXD + RXD                                      ; // 选择引脚功能
  RS_PORT_DIR    |= TXD                                            ; // 选择引脚功能
  UCA3CTL1        = UCSWRST                                        ; // 状态机复位
  UCA3CTL1       |= UCSSEL_1                                       ; // CLK = ACLK
  UCA3BR0         = 0x03                                           ; // 32kHz/9600=3.41
  UCA3BR1         = 0x00                                           ;
  UCA3MCTL        = UCBRS_3 + UCBRF_0                              ; // UCBRSx=3, UCBRFx=0
  UCA3CTL1       &= ~UCSWRST                                       ; // 启动状态机
  UCA3IE         |= UCRXIE                                         ; // 允许接收中断
  RS485_IN                                                         ;
}

//***************************************************************************//
//                                                                           //
//  UTX_PROC(void): USB端口发送程序                                          //
//                                                                           //
//***************************************************************************//
void UTX_PROC(char *tx_buf)
{
  unsigned char i,length                                           ;
  length = strlen(tx_buf)                                          ;
  for(i=0;i<length;i++)
  {
    UCA1TXBUF = *tx_buf++                                          ;
//    __delay_cycles(5000)                                           ;
    while (!(UCA1IFG&UCTXIFG))                                     ;
  }
}

//***************************************************************************//
//                                                                           //
//  RS232TX_PROC(void): RS232端口发送程序                                    //
//                                                                           //
//***************************************************************************//
void RS232TX_PROC(char *tx_buf)
{
  unsigned char i,length                                           ;
  length = strlen(tx_buf)                                          ;
  for(i=0;i<length;i++)
  {
    UCA3TXBUF = *tx_buf++                                          ;
    while (!(UCA3IFG&UCTXIFG))                                     ;
  }
}

//***************************************************************************//
//                                                                           //
//  RS485TX_PROC(void): RS485端口发送程序                                    //
//                                                                           //
//***************************************************************************//
void RS485TX_PROC(char *tx_buf)
{
  unsigned char i,length                                           ;
  length = strlen(tx_buf)                                          ;
  RS485_OUT                                                        ;
  for(i=0;i<length;i++)
  {
    UCA3TXBUF = *tx_buf++                                          ;
    while (!(UCA3IFG&UCTXIFG))                                     ;
  }
  __delay_cycles(100000)                                           ;
  RS485_IN                                                         ;
}


void main( void )
{
  WDTCTL = WDTPW + WDTHOLD                                         ;
  Init_CLK()                                                       ;
  Init_Port()                                                      ;
  Init_RSUART()                                                    ;
  _EINT()                                                          ;
  for(;;)
  {
    if(event)
    {
      event   = 0x00                                               ;
      RS232TX_PROC(RXBuffer)                                       ;
    }
    if((P6IN&0x0F)!=0x0F)                                            // 检测按键按下
    {
      RS232TX_PROC("This is BW-DK5438")                            ;
      __delay_cycles(5000000)                                      ;
    }   
  }
}
沙发
qiangweii| | 2018-10-14 21:13 | 只看该作者
用示波器或者逻辑分析仪看过吗?有波形吗

使用特权

评论回复
板凳
litengg| | 2018-10-14 21:14 | 只看该作者
串口还带声音的?是不是软件的提示音,还是硬件的声音?

使用特权

评论回复
地板
androidbus| | 2018-10-14 21:16 | 只看该作者
会不会是硬件的问题呢.......怎样检测呢?

使用特权

评论回复
5
feiqi1| | 2018-10-14 21:17 | 只看该作者
会不会是驱动的问题呢?

使用特权

评论回复
6
xia00| | 2018-10-14 21:19 | 只看该作者
你在开头看看测试一下是否能发出数据呢?

使用特权

评论回复
7
hfdy01| | 2018-10-14 21:20 | 只看该作者
用示波器看看是否有电平变化的

使用特权

评论回复
8
CallReceiver| | 2018-10-14 21:24 | 只看该作者
硬件问题。检查一下电路看看!

使用特权

评论回复
9
boy1990| | 2018-10-14 21:25 | 只看该作者
调试先测试单字节。

使用特权

评论回复
10
sourceInsight| | 2018-10-14 21:27 | 只看该作者
单片机的接收电路和程序都没有问题?

使用特权

评论回复
11
bbapple| | 2018-10-14 21:30 | 只看该作者

用万用表等测量串口线

使用特权

评论回复
12
handleMessage| | 2018-10-14 21:32 | 只看该作者
最好查看一下单片机接收那一路是否有虚焊或有短路情况

使用特权

评论回复
13
zhouhuanの| | 2018-10-14 21:33 | 只看该作者
用串口调试助手对单片机进行调试。

使用特权

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

本版积分规则

142

主题

1494

帖子

6

粉丝