本帖最后由 数码小叶 于 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里面有这么一个条件编译
实际工程里也确实定义了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开始闪烁
|
是的,F460已经在库里封装了该功能。