单片机学习小组
直播中

李娜

7年用户 1587经验值
私信 关注

用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?

想用NUC131单片机UART3作为打印口,但printf没有输出东西,UART10、UART1、UART2作为打印口printf都可以正常输出,请教一下大神们,我的配置是否有问题??

void SYS_Init(void)
{
    /* Enable Internal RC 22.1184MHz clock */
    CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
    /* Waiting for Internal RC clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
    /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));
    /* Enable external XTAL 12MHz clock */
    CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);
    /* Waiting for external XTAL clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);
    /* Set core clock as PLL_CLOCK from PLL */
    CLK_SetCoreClock(PLL_CLOCK);
               
    CLK_EnableModuleClock(UART3_MODULE);
    /* Select UART module clock source */
    CLK_SetModuleClock(UART3_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));
               
    CLK_EnableModuleClock(UART2_MODULE);
    /* Select UART module clock source */
    CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));               

    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
                // UART3
    SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA5_Msk | SYS_GPA_MFP_PA6_Msk);
    SYS->GPA_MFP |= SYS_GPA_MFP_PA5_UART3_RXD | SYS_GPA_MFP_PA6_UART3_TXD;
                // UART2
    SYS->GPD_MFP &= ~(SYS_GPD_MFP_PD14_Msk | SYS_GPD_MFP_PD15_Msk);
    SYS->GPD_MFP |= SYS_GPD_MFP_PD14_UART2_RXD | SYS_GPD_MFP_PD15_UART2_TXD;

}

void UART_Init()
{
   SYS_ResetModule(UART2_RST);
    UART_Open(UART2, 115200);
    SYS_ResetModule(UART3_RST);
    UART_Open(UART3, 115200);
}



回帖(2)

挽你何用

2023-10-21 16:10:43
er = 1 */    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));    /* Enable UART3 module clock */    CLK_EnableModuleClock(UART3_MODULE);    /* Set P1 multi-function pins for UART3 RXD and TXD */    SYS->P1_MFP &= ~(SYS_MFP_P12_Msk | SYS_MFP_P13_Msk);    SYS->P1_MFP |= SYS_MFP_P12_RXD3 | SYS_MFP_P13_TXD3;    /* Select UART3 multi-function pins */    SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);    SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART3_RXD | SYS_GPB_MFP_PB1_UART3_TXD;    /* Set UART3 defalut baud rate to 115200 */    UART_Open(UART3, 115200);}      int main(void){    /* Init System, UART3 */    SYS_Init();    /* Loop Test */    while(1){        /* Print "Hello World" to UART3 */        printf("Hello Worldn");    }    return 0; }
举报

stm328h

2023-10-28 10:30:43
你的代码和描述,你的配置看起来应该是正确的。但是,为了使printf能够通过UART3输出,你可能需要确保你的系统中有正确的重定向函数。printf函数通常会调用一个底层的字符输出函数,例如putchar或_write,需要确保这个函数能够将字符发送到UART3。
默认情况下,printf函数是配置为通过UART0发送字符的。但是,用户可以通过更改DEBUG PORT的定义和printf()传输端口的定义来使其符合系统架构​1​。因此,可能需要检查并可能修改你的retarget.c文件以确保printf函数使用UART3而不是其他UART端口。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分