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.

[参考译文] RTOS/MSP432P401R:无法以8MHz 运行 UART

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/609952/rtos-msp432p401r-cannot-run-uart-at-8-mhz

器件型号:MSP432P401R

工具/软件:TI-RTOS

您好!

我需要有关以下问题的帮助。

TI RTOS。 uartecho 示例  

/*创建一个数据处理关闭的 UART。 *
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600
uartParams.parityType = UART_PAR_NONE;
uartParams.stopbits = UART_STOP_ONE;
UART = UART_OPEN (Board_UART0、uartParams);

如果我将波特率更改为57600甚至1000000、它就可以工作。 我用 OSCi 检查它。

当我将波特率更改为>1MHz 时,它不起作用...  

如何以4、6、8 MHz 的频率在 TIRTOS 中运行 UART?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的时钟速度是多少? 我猜时钟必须至少是 UART 速率的16倍。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    24MHz

    当我将 UART 与 DMA 配合使用时、我解决了这个问题。
    如果设置错误,为什么 UART_open()不提供 null 作为返回值?
    在哪里可以看到 UART_write()的返回代码?

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因为设置可能不会出错、具体取决于其他设置、如时钟速度。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您是否更新了 MSP_EXP432P401R.c 中的 uartMSP432Budrates 表? 我的表如下所示(添加了1036800和 921600):

    /*
    波特率分频器是通过使用 MSP432波特率*
    计算
    器* software-dl.ti.com/.../index.html
    */
    const UARTMSP432_BudrateConfig uartMSP432Budrates []={确定的
    /*{波特率、输入时钟、预分频器、UCBRFx、UCBRSx、 过采样}*/
    {
    .outputBudrate = 115200、
    .inputClockFreq = 24000000、
    .prescalar = 13、
    hwRegUCBRFx = 0、
    hwRegUCBRSx = 37、
    过采样= 1.
    }、
    {1036800、24000000、1、7、32、 1}、
    {921600、12000000、13、0、0、 0}、
    {115200、12000000、6、8、32、 1}、
    {115200、6000000、3、4、2、 1}、
    {115200、3000000、1、10、0、 1}、
    {9600、24000000、156、4、0、 1}、
    {9600、12000000、78、2、0、 1}、
    {9600、6000000、39、1、0、 1}、
    {9600、3000000、19、8、85、 1}、
    {9600、32768、 3、0、146、0}
    }; 

    此外、如果波特率不是表的一部分、UART_OPEN 将返回 NULL。 因此、请确保添加以下代码。

    UART = UART_OPEN (Board_UART0、uartParams);
    
    if (UART == NULL){
    /* UART_open()失败*/
    while (1);
    } 

    希望这对您有所帮助。

     David

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

    是的、这很有用。。。

    非常感谢