打印
[开发工具]

【华大测评】二:串口实现printf输出

[复制链接]
1904|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 数码小叶 于 2020-7-12 21:49 编辑

习惯利用串口打印信息来辅助调试,所以,一般第一步是实现串口的printf功能。HC320F460搭载4个通用串行收发器模块( USART) 单元。查看板卡的原理图,已经有有一个串口连接到USB转串口模块上


可以直接使用这个串口来调试,连接到USART3上


打开一个串口例程,调用相关的初始化函数后,添加printf重定向函数
/*重定向c库函数printf到USART3*/
int fputc(int ch, FILE *f)
{
        /*发送一个字节数据USART3 */
        USART_SendData(USART_CH, (uint8_t) ch);
        
        /* 等待发送完毕 */
                                while (USART_GetStatus(USART_CH, UsartTxComplete) == Reset);
        
        return (ch);
}
然而最后编译的时候,居然报错了


提示在头文件里重复定义了。。。。打开报错提示的hc32f46x_utility.h,以及hc32f46x_utility.c文件

hc32f46x_utility.c里面有这么一个条件编译
#ifdef UART_DEBUG_PRINTF
实际工程里也确实定义了UART_DEBUG_PRINTF
从而也有了printf的重定向

int32_t fputc(int32_t ch, FILE *f)
{
    DebugOutput((uint8_t)ch);

    return (ch);
}
因此,开始自己重定向的时候,就编译报错了。
没想到,华大早已经解决好了printf函数,可以直接使用,略感意外。
重新理了理整个函数流程,想要使用printf函数,只需调用“Ddl_UartInit()”函数就可以了


stc_port_init_t stcPortInit;
MEM_ZERO_STRUCT(stcPortInit);
stcPortInit.enPinMode = Pin_Mode_Out;
stcPortInit.enExInt = Enable;
stcPortInit.enPullUp = Enable;
PORT_Init(LED0_PORT, LED0_PIN, &stcPortInit);
               
Ddl_UartInit();
        
printf("\r\nUSART3 Printf is OK!");
编译后利用串口烧录到板卡中


可以看到串口助手成功接收到信息,并且红色的LED开始闪烁







使用特权

评论回复
评论
martinhu 2020-7-13 09:01 回复TA
是的,F460已经在库里封装了该功能。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

2540

帖子

19

粉丝