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.

[参考译文] MSP432P401R:需要有关 MSP432调试 UART 的帮助

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/677396/msp432p401r-need-help-debugging-uart-w-msp432

器件型号:MSP432P401R

我正在尝试与一个小型 ESP8266芯片进行 WiFi 通信、该芯片设置为以9600波特通过串行方式接收信息。 我过去曾让该 UART 正常工作、但自从移植到新项目后、我遇到了问题、无法将正确的数据流式传输到 ESP8266、以便发送其请求。 我已经对 ESP 进行了广泛的调试、认为它不会导致问题的发生。

我觉得 MSP432上的 UART 时钟设置有误、但我无法分辨为什么? 我使用了12MHz SMCLK 的 TI 计算器来确定 UART 的参数:

const eUSCI_UART_Config uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
78、 // BRDIV = 72
2、 // UCxBRF = 2
0、 // UCxBRS = 0
EUSCI_A_UART_NO_奇 偶校验、 //无奇偶校验
EUSCI_A_UART_LSB_FIRST、 // MSB 优先
EUSCI_A_UART_One_stop_bit、 //一个停止位
EUSCI_A_UART_MODE、 // UART 模式
EUSCI_A_UART_oversampling_BAUDRATE_generation //过采样
}; 

然后我初始化时钟系统。 我认为这是我的问题所在、但我很难确定此代码有什么问题:

MAP_CS_setExternalClockSourceFrequency (32768、4800000);
MAP_CS_startHFXT (false);
MAP_CS_initClockSignal (CS_MCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
MAP_CS_initClockSignal (CS_HSMCLK、CS_DCOCLK_SELECT、CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_CLOCK _DIVIDER_1);用于 UART 的//SMCLK -时钟分频器4 = 12MHz
MAP_CS_initClockSignal (CS_ACLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY);//DCO 时钟内部-需要? 

我第一次尝试使用 CS_HFXTCLK_SELECT 、SMCLK 分频器为4、但这不起作用。 然后、我决定尝试使用 DCO 作为 SMCLK 的源、并将其设置为12MHz。 这也不起作用。

最后、我启用 UART 的方法如下:

MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、
GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);

/*配置 UART 模块*/
UART_initModule (EUSCI_A2_base、uartConfig);

/*启用 UART 模块*/
UART_enableModule (USCI_A2_base); 

有人能帮我找出问题所在吗? 我已经为此付出了一段时间的努力、似乎无法弄清代码的错误。 谢谢!

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

    使用 SDK 时、系统时钟的设置应由系统文件管理、您无需在代码中设置时钟分频器。 在当前设置中、如果在 UART TX 引脚上放置一个示波器探针并发送0x55数据模式、那么高电平和低电平的位时间将显示为。 这将告诉我们波特率是否正确。

    接下来检查 UART 寄存器、查看所有寄存器位配置是否符合预期、并根据 TRM 检查相应的值。