nucleo-f411re学习记录-5,使用串口打印

张开发
2026/4/24 1:28:16 15 分钟阅读

分享文章

nucleo-f411re学习记录-5,使用串口打印
代码仓库-【传送门】在调试代码的时候没有输出log有时候出现bug很难找出原因有了log可以很好定位到异常之处。在数据手册上看到该芯片是支持三个串口即usart1、usart2与usart6。查看原理图发现串口1与串口6是空闲的IO是空闲的已经尝试过外接一个USB转TTL来进行打印log是可以的。而连接串口2的时候一直不行数据手册看只能用PA2与PA3。后面看是ST-Link那里也用到了应该是有所冲突于是直接尝试直接用这个USB线看看能不能输出log一试发现可行也没有用影响到下载。1新建uart.c与uart.h文件把uart.c加入外设组中。2串口初始化usart2挂载在APB1上IO需要进行复用配置。void UART_Debug_Init(uint32_t buad) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; //时钟开启 RCC_AHB1PeriphClockCmd(UARTx_DEBUG_GPIO_CLK, ENABLE); RCC_APB1PeriphClockCmd(UARTx_DEBUG_RCC_CLK, ENABLE); //串口1对应引脚复用映射 GPIO_PinAFConfig(UARTx_DEBUG_TX_GPIO_PORT, UARTx_DEBUG_TX_PIN_SOURCE, UARTx_DEBUG_TX_AF); GPIO_PinAFConfig(UARTx_DEBUG_RX_GPIO_PORT, UARTx_DEBUG_RX_PIN_SOURCE, UARTx_DEBUG_RX_AF); /* Reset GPIO init structure parameters values */ GPIO_InitStruct.GPIO_Pin UARTx_DEBUG_TX_PIN | UARTx_DEBUG_RX_PIN; GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd GPIO_PuPd_UP; GPIO_Init(UARTx_DEBUG_TX_GPIO_PORT, GPIO_InitStruct); /* USART_InitStruct members default value */ USART_InitStruct.USART_BaudRate buad; USART_InitStruct.USART_WordLength USART_WordLength_8b; USART_InitStruct.USART_StopBits USART_StopBits_1; USART_InitStruct.USART_Parity USART_Parity_No ; USART_InitStruct.USART_Mode USART_Mode_Rx | USART_Mode_Tx; USART_InitStruct.USART_HardwareFlowControl USART_HardwareFlowControl_None; USART_Init(UARTx_DEBUG, USART_InitStruct); //使能 USART_Cmd(UARTx_DEBUG, ENABLE); }3进行printf重定向到uart2输出int fputc(int ch, FILE *f) { USART_SendData(UARTx_DEBUG, (uint8_t)ch); while(USART_GetFlagStatus(UARTx_DEBUG, USART_FLAG_TXE) RESET); return ch; }

更多文章