6621E UART0 打印输出测试

wen sir · 342次点击 · 2023-05-03

 6621E 的串口0 特殊串口,输出有限制, 输出频率不能随意设置(如不能输出115200,9600,460800)。

 应用中建议只当作 打印功能使用。可选配置如下面所示

/*
 baud_rates[]={1000,2000,4000,5000,10000,20000,25000,50000,100000,500000,1000000}
    mode         smod_val       baud_rate
 UART_EX_MD_2     SMOD_1        1000000
 UART_EX_MD_2     SMOD_0        500000
 UART_EX_MD_1      x            1000~500000
 UART_EX_MD_3      x            1000~500000
*/

(1)使用UART0,需要包含头文件

#include "uart_ex.h"


(2)定义 UART配置结构体, 如果只用输出打印信息,只需要修改波特率,其它项保持不变。

uart_ex_cfg_t uart0_cfg =
{
    .baud_rate = 500000, // 500Kbps
    .mode = UART_EX_MD_3,
    .tb80_val = TB80_HIGH, //Tx Enable
    .rb80_val = RB80_HIGH, //Rx Enable
    .smod_val = SMOD_0, //uncare if .mode=Ex_Md_3
    .rx_cb = NULL, //Polling Mode
    .tx_cb = NULL, //Polling Mode
};


(3)初始化GPIO 及打开UART0

#define PIN_UART0_TX                    5
#define PIN_UART0_RX                    6
    // UART0
    pinmux_config(PIN_UART0_TX,  PINMUX_UART0_SDA_O_CFG);
    pinmux_config(PIN_UART0_RX,  PINMUX_UART0_SDA_I_CFG);
    pmu_pin_mode_set(BIT_MASK(PIN_UART0_TX), PMU_PIN_MODE_PP);
    pmu_pin_mode_set(BIT_MASK(PIN_UART0_RX), PMU_PIN_MODE_PU);

....初始化和Restore 处均使用下列语句打开UART0

 uart_ex_open(HS_UART0, &uart0_cfg);


(4) 修改retarget.c

#include "uart_ex.h"

修改输出函数

/*********************************************************************
 * MACROS
 */
#define RETARGET_UART  (HS_UART0)


void ser_write(const char *ptr, int len)
{
#ifdef CONFIG_SEGGER_RTT
    len = SEGGER_RTT_Write(0, ptr, len);
#else
    for (; len > 0; --len, ++ptr)
    {
        if (*ptr == '\n')
        uart_ex_send_block(RETARGET_UART, (const uint8_t *)"\r", 1);  //uart 0
        uart_ex_send_block(RETARGET_UART, (const uint8_t *)ptr, 1);  //uart 0

       // uart_send_block(RETARGET_UART, (const uint8_t *)"\r", 1);  //uart1
       // uart_send_block(RETARGET_UART, (const uint8_t *)ptr, 1);  //uart1

    }
#endif
}


(5) 定时打印测试输出

static void simple_timer_handler(co_timer_t *timer, void *param)
{
//    wdt_keepalive();
//    pmu_dump(printf);
static int t;
log_debug("\nrun..%d",t++);
}


(6)运行及测试输出Log

-串口接收工具,自定义波特率为 500K

-逻辑分析仪自动检测出串口波特率为500K, 和代码设置一致。

image.png

(7)附件参考代码及测试BIN (6621EVB)

6621E_Uart0_Test202305031041.rar
被收藏 0  ∙  1 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站