进行工程文件重新编写时,发现printf函数不能正常输出了,各种查找,最后问题定位在初始化函数的顺序上。如下方式初始化是,printf可以正常输出:
uart0_init(DEBUG_UART_BAUDRATE);
uart1_init(OOK_UART_PARITY);
但是,一旦颠倒顺序:
uart1_init(OOK_UART_PARITY);
uart0_init(DEBUG_UART_BAUDRATE);
printf就不能正常输出了。
初始化函数为:
- /*
- * @brief Initialize uart0
- * @param None
- * @retval None
- */
- void uart0_init(uint32_t Baudrate)
- {
- gpio_configure_group(PINS_UART0_PIO, PINS_UART0, PINS_UART0_FLAGS);
- const usart_serial_options_t uart_serial_options =
- {
- .baudrate = Baudrate,
- .charlength = UART_SERIAL_CHAR_LENGTH,
- .paritytype = DEBUG_UART_PARITY,
- .stopbits = UART_SERIAL_STOP_BIT
- };
- /* Configure console UART */
- sysclk_enable_peripheral_clock(DEBUG_UART_ID);
- stdio_serial_init(DEBUG_UART, &uart_serial_options);// set as printf output
- uart_enable_interrupt(DEBUG_UART, US_IER_RXRDY);
- uart_enable(DEBUG_UART);
- NVIC_DisableIRQ(DEBUG_UART_IRQn);
- NVIC_ClearPendingIRQ(DEBUG_UART_IRQn);
- NVIC_SetPriority(DEBUG_UART_IRQn, 0);
- NVIC_EnableIRQ(DEBUG_UART_IRQn);
- }
两个函数一样,只是引脚定义进行了修改。后面找相关技术人员咨询,发现问题出在
stdio_serial_init(DEBUG_UART, &uart_serial_options);
这个是标准输出初始化函数,就是重定向printf的位置,两个初始化函数中都有这句话,谁在后面就会把之前的覆盖掉,当然时谁在后面printf以谁为输出标准了。
注意:这句话是串口初始化函数,不能注释掉,只能把printf输出端口的初始化语句放最后!
你好这个库函数哪里找到的 用的asf吗? 可否留个联系方式
是ASF里面的,我的邮箱 maydolly@163.com 有问题可以交流一下。