hulai123456 发表于 2022-7-13 13:48

HC32F460PETB的printf打印问题

本帖最后由 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);
}

hulai123456 发表于 2022-7-13 16:43

在打印发送函数如下:
uint16_t TEXT[] = {'O'};
printf("Data Received OK!\n");
USART_WriteData(CM_USART3, TEXT);

但是他只打印0

hulai123456 发表于 2022-7-14 08:43

该问题已经解决,经过测试发现,在把USART初始化后还是需要初始化printf,因此我参考例程定义以下的一个BSP_PRINTF_Preinit函数:

hulai123456 发表于 2022-7-14 08:45

然后在初始化USART函数中利用DDL_PrintfInit(CM_USART3, 115200U, BSP_PRINTF_Preinit);调用他

hulai123456 发表于 2022-7-14 08:46

然后这句printf("Data Received OK!\n");就能打印出来了

liszt99 发表于 2022-7-14 11:18

这个RTC例程里面就有用到printf,所以参考RTC例程就行了。

tpgf 发表于 2022-8-2 12:01

涉及到硬件层面吗

gwsan 发表于 2022-8-2 12:12

这是两种不同的输入途径

tfqi 发表于 2022-8-2 12:22

二者是两个不同的模块

nawu 发表于 2022-8-2 12:35

是不是接口驱动的问题呢

aoyi 发表于 2022-8-2 12:47

数据类型转换的问题?

zljiu 发表于 2022-8-2 12:58

使用里程可以成功打印吗

QQ3461816790 发表于 2022-11-18 09:47

问题解决了嘛 可以技术交流交流 QQ:3461816790
页: [1]
查看完整版本: HC32F460PETB的printf打印问题