This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F2410:当 UART 1和 UART 0都被使能时、无法在 UART0上发送

Guru**** 2390735 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1318028/msp430f2410-unable-to-transmit-on-uart0-when-both-uart-1-and-uart-0-are-enabled

器件型号:MSP430F2410

同时启用 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);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请尝试使用"P3SEL |= BIT6 | BIT7; "

    此致、

    现金豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢现金。