cortex-m3 的 uart 编程(Microsemi SmartFusion 2)

问题描述 投票:0回答:1

我正在 cortex-m3 上编写基本的 uart echo, 但我对腻子越来越胡言乱语

cortex-m3 使用 100 MHz 时钟频率

波特率57600

乱码输出的原因可能是什么,uart波特率是否与cortex-m3时钟频率成某种倍数或有某种关系,或者Amba总线频率与波特率有某种关系

程序如下-->

#include "drivers/mss_uart/mss_uart.h"


mss_uart_instance_t * const gp_my_uart = &g_mss_uart0;

/*==============================================================================
 * main function.
 */
int main()
{
    size_t rx_size;
    uint8_t rx_buff[1];

    /* Turn off the watchdog */
    SYSREG->WDOG_CR = 0;

    /*--------------------------------------------------------------------------
     * Initialize and configure UART.
     */
    MSS_UART_init(gp_my_uart,
                  MSS_UART_57600_BAUD,
                  MSS_UART_DATA_8_BITS | MSS_UART_NO_PARITY | MSS_UART_ONE_STOP_BIT);

    /*--------------------------------------------------------------------------
     * Send greeting message over the UART.
     */
    MSS_UART_polled_tx_string(gp_my_uart,(const uint8_t*)"\n\r\n\r**********************************************************************\n\r");
    MSS_UART_polled_tx_string(gp_my_uart,(const uint8_t*)"******************** SmartFusion2 MMUART Example *********************\n\r");
    MSS_UART_polled_tx_string(gp_my_uart,(const uint8_t*)"**********************************************************************\n\r");
    MSS_UART_polled_tx_string(gp_my_uart,(const uint8_t*)"Characters typed will be echoed back.\n\r");

    /*--------------------------------------------------------------------------
     * Echo back any characters received.
     */
    for (;;)
    {
        rx_size = MSS_UART_get_rx(gp_my_uart, rx_buff, sizeof(rx_buff));
        if( rx_size > 0 )
        {
            MSS_UART_polled_tx(gp_my_uart, rx_buff, sizeof(rx_buff));
        }
    }
}
arm uart cortex-m baud-rate
1个回答
0
投票

已经过去很长一段时间了,但是,您出现垃圾数据的原因可能是您的 APB 时钟频率。在 polled uart 示例的 README.txt 中,它说:

示例项目是针对使用 83 Mhz 的 SmartFusion2 Mss APB 时钟频率的设计而构建的。尝试在不同的设计上执行此示例项目将导致 MMUART0 使用不正确的波特率,或者如果未启用和连接 MMUART0,则无输出。

解决方案是:将“drivers_config/sys_config/sys_config_mss_clocks.h”文件替换为您的 libero 导出的固件。或者您可以手动更改它。

© www.soinside.com 2019 - 2024. All rights reserved.