打印
[技术问答]

HC32F460PETB的printf打印问题

[复制链接]
1653|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 hulai123456 于 2022-7-13 16:32 编辑

各位大佬,我已配置好USART,但是在调用函数的过程中,USART_ReadData()函数和USART_WriteData()都没问题,能正常接收和打印数据,但是如果调用printf函数就不行printf("DataReceivedOK!\n");打印不出来,请教一下是什么原因呢?
我看到在官方的例程中,他初始化了Printf函数DDL_PrintfInit(BSP_PRINTF_DEVICE,19200U,BSP_PRINTF_Preinit);在这个函数中其实也是配置USART,但是为啥一定要先调用这个初始化函数呢?

使用特权

评论回复
沙发
QQ3461816790| | 2022-7-13 13:55 | 只看该作者
型号弄错了?HC32F460PETB

使用特权

评论回复
板凳
hulai123456|  楼主 | 2022-7-13 14:12 | 只看该作者
QQ3461816790 发表于 2022-7-13 13:55
型号弄错了?HC32F460PETB

对,抱歉,字打快了,是HC32F460PETB

使用特权

评论回复
地板
hulai123456|  楼主 | 2022-7-13 16:41 | 只看该作者
其中uart初始化如下:
void Usart3_Init(void)
{
        LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_EFM | LL_PERIPH_SRAM);
        stc_usart_uart_init_t stcuartinit;
        stc_irq_signin_config_t stcIrqRegiCfg;
               
        USART_UART_StructInit(&stcuartinit);
       
        stcuartinit.u32ClockDiv = USART_CLK_DIV64;
        stcuartinit.u32Baudrate = 115200U;
        stcuartinit.u32OverSampleBit = USART_OVER_SAMPLE_8BIT;
       
        FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_USART3, ENABLE);
        Uart_Print_PortInit();
        USART_UART_Init(CM_USART3, &stcuartinit, NULL);
       
        USART_FuncCmd(CM_USART3, (USART_TX | USART_RX | USART_INT_RX), ENABLE);
       
        stcIrqRegiCfg.enIRQn = INT002_IRQn;
        stcIrqRegiCfg.pfnCallback = &Read_Data_IrqCallback;
        stcIrqRegiCfg.enIntSrc = INT_SRC_USART3_RI;
        INTC_IrqSignIn(&stcIrqRegiCfg);
       
        NVIC_SetPriority(stcIrqRegiCfg.enIRQn, DDL_IRQ_PRIO_DEFAULT);
        NVIC_ClearPendingIRQ(stcIrqRegiCfg.enIRQn);
        NVIC_EnableIRQ(stcIrqRegiCfg.enIRQn);       
        LL_PERIPH_WP(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_EFM | LL_PERIPH_SRAM);
       
}

void Uart_Print_PortInit(void)
{
        GPIO_SetFunc(USART3_RX_PORT, USART3_RX_PIN, USART3_RX_GPIO_FUNC);
        GPIO_SetFunc(USART3_TX_PORT, USART3_TX_PIN, USART3_TX_GPIO_FUNC);
}

使用特权

评论回复
5
hulai123456|  楼主 | 2022-7-13 16:43 | 只看该作者
在打印发送函数如下:
uint16_t TEXT[] = {'O'};
printf("Data Received OK!\n");
USART_WriteData(CM_USART3, TEXT[0]);

但是他只打印0

使用特权

评论回复
6
hulai123456|  楼主 | 2022-7-14 08:43 | 只看该作者
该问题已经解决,经过测试发现,在把USART初始化后还是需要初始化printf,因此我参考例程定义以下的一个BSP_PRINTF_Preinit函数:

使用特权

评论回复
7
hulai123456|  楼主 | 2022-7-14 08:45 | 只看该作者
然后在初始化USART函数中利用DDL_PrintfInit(CM_USART3, 115200U, BSP_PRINTF_Preinit);调用他

使用特权

评论回复
8
hulai123456|  楼主 | 2022-7-14 08:46 | 只看该作者
然后这句printf("Data Received OK!\n");就能打印出来了

使用特权

评论回复
9
liszt99| | 2022-7-14 11:18 | 只看该作者
这个RTC例程里面就有用到printf,所以参考RTC例程就行了。

使用特权

评论回复
10
tpgf| | 2022-8-2 12:01 | 只看该作者
涉及到硬件层面吗

使用特权

评论回复
11
gwsan| | 2022-8-2 12:12 | 只看该作者
这是两种不同的输入途径

使用特权

评论回复
12
tfqi| | 2022-8-2 12:22 | 只看该作者
二者是两个不同的模块

使用特权

评论回复
13
nawu| | 2022-8-2 12:35 | 只看该作者
是不是接口驱动的问题呢

使用特权

评论回复
14
aoyi| | 2022-8-2 12:47 | 只看该作者
数据类型转换的问题?

使用特权

评论回复
15
zljiu| | 2022-8-2 12:58 | 只看该作者
使用里程可以成功打印吗

使用特权

评论回复
16
QQ3461816790| | 2022-11-18 09:47 | 只看该作者
问题解决了嘛 可以技术交流交流 QQ:3461816790

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

41

帖子

3

粉丝