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,但是为啥一定要先调用这个初始化函数呢? 型号弄错了?HC32F460PETB QQ3461816790 发表于 2022-7-13 13:55
型号弄错了?HC32F460PETB
对,抱歉,字打快了,是HC32F460PETB 其中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);
}
在打印发送函数如下:
uint16_t TEXT[] = {'O'};
printf("Data Received OK!\n");
USART_WriteData(CM_USART3, TEXT);
但是他只打印0
该问题已经解决,经过测试发现,在把USART初始化后还是需要初始化printf,因此我参考例程定义以下的一个BSP_PRINTF_Preinit函数:
然后在初始化USART函数中利用DDL_PrintfInit(CM_USART3, 115200U, BSP_PRINTF_Preinit);调用他
然后这句printf("Data Received OK!\n");就能打印出来了
这个RTC例程里面就有用到printf,所以参考RTC例程就行了。 涉及到硬件层面吗 这是两种不同的输入途径 二者是两个不同的模块
是不是接口驱动的问题呢
数据类型转换的问题?
使用里程可以成功打印吗
问题解决了嘛 可以技术交流交流 QQ:3461816790
页:
[1]