测试环境:
1)485芯片用的是TI的sn65hvd11,单片机用是TI的msp430F2618.
2)用了一个rs232-rs485的转换器,和一个rs232-USB的数据线
问题:
请前辈帮看下代码,哪里有错误没?串口助手始终收不到数据。单步调试中,UCA1TXBUF实终有数据存在,且UCA1TXIFG无法置位。
我怀疑,是否我的时钟源,或者波特率配置有问题?
望前辈不吝赐教!谢谢
以下是代码:
/*****************************************************************************\
文件名:main.c
描述:MSP430 RS485示例程序
\*****************************************************************************/
#include <msp430x26x.h>
#define DRE_OUT P4DIR |=BIT0 //连接485芯片的DE,RE端口的IO设置为输出
#define DE P4OUT |=BIT0 //设置485芯片处于发送状态
#define RE P4OUT &=~BIT0 //设置485芯片处于接收状态
void Set_UART1(void);
/***********主函数************/
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; //关闭开门狗
BCSCTL3|=(XT2S_2+XCAP_2); //设置XT2为3--16MHZ范围
BCSCTL1&=~XT2OFF; //启动TX2
BCSCTL1|=DIVA_1; //LFXT1工作在低频模式,ACLK为2分频
do
{
IFG1 &=~OFIFG; //清除振荡器失效标志
for(i=0xFF; i>0;i--); //延时,待稳定
}
while ((IFG1&OFIFG)!=0); //若振荡器失效标志有效
/* Select SMCLK = XT2 - MCLK = XT2 */
BCSCTL2 |= SELM_2+SELS+DIVS_3; //MCLK为8MHz,SMCLK为1MHz
DRE_OUT;
DE;
Set_UART1();
while(1)
{
UCA1TXBUF =0xaa;
while(!(UC1IFG&UCA1TXIFG));//等待发送结束
UC1IFG &=~UCA1TXIFG;
}
}
/*****************************
函数名称:Set_UART1
功能:设置MCU的UART1对应的寄存器
参数:无
返回值:无
******************************/
void Set_UART1(void)
{
P3SEL |=0xC0; //将P3.6,P3.7选做UART1的通信端口
UCA1CTL1|=UCSWRST; //进入复位状态
//UC1IE &=~(UCA1TXIE | UCA1RXIE);
UCA1CTL0=0x00; //设置为USRT模式,无奇偶效验,8位1停,异步
UCA1CTL1|=UCSSEL_2;//选择的时钟源为SMLK,无分频
UCA1BR0=0x68;
UCA1BR1=0x00;
UCA1MCTL=0x40; //设置波特率为9600
UC1IFG &=~UCA1TXIFG; //清除中断标志
UCA1CTL1&=~UCSWRST; //启动UART1
UC1IE |= (UCA1TXIE | UCA1RXIE); //发送or接收中断使能
} |