同时启用 UART1和 UART0后、无法在 UART0上进行发送(在 Putty 上未看到任何内容)。 不过、我们可以评论启用 UART 1、然后我们可以看到在 UART0上传输的内容(可以 在 Putty 上看到它)。 但是、如果两者都启用、我们就可以查看 UART1中传输的内容。 有什么建议吗?
谢谢
#define UART_MODE SMCLK_9600
字符型 wel[]="欢迎使用串行编程";
空 1MHz ()
{
如果 (CALBC1_1MHz==0xFF) //如果校准常数被擦除
{
同时 (1); //请勿加载,陷阱 CPU!!
}
DCOCTL = 0; //选择最低的 DCOx 和 MODx 设置
BCSCTL1=CALBC1_1MHZ; //设置 DCO
DCOCTL = CALDCO_1MHz;
}
空 initGPIO_UART0 ()
{
P3SEL = BIT4 | BIT5; //将 P3.4设置为 UART 0 TXD、将 P3.5设置为 UART 0 RXD
}
空 initGPIO_UART1 ()
{
P3SEL = BIT6 | BIT7; //将 P3.6设置为 UART 1 TXD、将 P3.7设置为 UART 1 RXD
}
空 INIT_UART0 ()
{
UCA0CTL1 |= UCSWRST; //将状态机复位
UCA0CTL0 = 0; //选择 UART 模式无奇偶校验8位异步
#if (uart_mode = SMCLK_9600)
UCA0CTL1 |= UCSSEL_2; //选择1MHz SCLK
//波特率9600设置
UCA0BR0 = 104; // 9600波特设置
UCA0BR1=0;
UCA0MCTL = 2;
__延迟_周期 (20000);
UCA0CTL1 &=~μ A UCSWRST; //将 UART 置于运行模式
UC0IE |= UCA0RXIE; //启用 USCI_A1 RX 中断
#Elif (UART_MODE =SMCLK_19200)
UCA1CTL1 |= UCSSEL_2; //选择1MHz SCLK
//波特率19200设置
UCA0BR0 = 52; //针对19200波特进行设置
UCA0BR1=0;
UCA0MCTL = 0;
__delay_cycles (20000);
UCA0CTL1 &=~μ A UCSWRST; //将 UART 置于运行模式
UC0IE |= UCA0RXIE; //启用 USCI_A1 RX 中断
#endif
}
空 INIT_UART1 ()
{
UCA1CTL1 |= UCSWRST; //将状态机复位
UCA1CTL0 = 0; //选择 UART 模式无奇偶校验8位异步
#if (uart_mode = SMCLK_9600)
UCA1CTL1 |= UCSSEL_2; //选择1MHz SCLK
//波特率9600设置
UCA1BR0 = 104; // 9600波特设置
UCA1BR1 = 0;
UCA1MCTL = 2;
__延迟_周期 (20000);
UCA1CTL1 &=~μ A UCSWRST; //将 UART 置于运行模式
UC1IE |= UCA1RXIE; //启用 USCI_A1 RX 中断
#Elif (UART_MODE =SMCLK_19200)
UCA1CTL1 |= UCSSEL_2; //选择1MHz SCLK
//波特率19200设置
UCA1BR0 = 52; //针对19200波特进行设置
UCA1BR1 = 0;
UCA1MCTL = 0;
__delay_cycles (20000);
UCA1CTL1 &=~μ A UCSWRST; //将 UART 置于运行模式
UC1IE |= UCA1RXIE; //启用 USCI_A1 RX 中断
#endif
}
/*!
*\Brief 发送字符到 UART
*
* @param c - chacater to be sent
*
*/
空 sendCharUART1 ( 字符型 c)
{
同时 (!(UC1IFG&UCA1TXIFG)); // USCI_A1 TX 缓冲器是否准备就绪?
UCA1TXBUF = c;
}
/*!
*\Brief 将给定的字节集发送到 UART0中
*
* @param buf–指向需要传输的缓冲区的指针
*@param len -缓冲区中需要传输的字节数
*
*/
空 translPktUART0 ( 字符型 *buf, 无符号 内部 长度)
{
无符号 内部 i =0;
同时 (i<len){
UCA0TXBUF = buf[i];
同时 (UCA0STAT&UCBUSY );
I++;
}
UCA0TXBUF = 0x0a;
同时 (UCA0STAT&UCBUSY );
UCA0TXBUF = 0x0d;
同时 (UCA0STAT&UCBUSY );
}
/*!
*\Brief 将给定的字节集发送到 UART1中
*
* @param buf–指向需要传输的缓冲区的指针
*@param len -缓冲区中需要传输的字节数
*
*/
空 translPktUART1 ( 字符型 *buf, 无符号 内部 长度)
{
无符号 内部 i =0;
同时 (i<len){
UCA1TXBUF = buf[i];
同时 (UCA1STAT&UCBUSY);
I++;
}
UCA1TXBUF = 0x0a;
同时 (UCA1STAT&UCBUSY);
UCA1TXBUF = 0x0d;
同时 (UCA1STAT&UCBUSY);
}
内部 主 ( 空 )
{
易失性 字符型 I = 0;
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
initClock45C() 1MHz; //初始化时钟
initGPIO_UART0 (); //初始化用于 UART0的 GPIO 端口
init_UART0 (); //初始化 UART0
//initGPIO_UART1 (); //初始化用于 UART1的 GPIO 端口
//init_UART1 (); //初始化 UART1
UC1IE = 0x01; //启用 RX 中断
translPktUART0 (wel、10);