uart3的引脚配置比较特殊,先要配置
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
配置为数字外设,什么是数字外设,根据文档里描述
也就是配置了数字外设,引脚的输出输入由使用的外设决定,不需要我们配置是输入还是输出了。
在文档中GPIO章节有一张表,
也就是remap为disable时,PB0, PB1作为SPI1_MISO和SPI1_MOSI引脚使用。remap为enable时,作为UART3_RX和UART3_TX引脚使用。其他引脚同理,disable作为数字功能1使用,enable作为数字功能2使用。
所以init应该是这样的
void MF_UART3_Init(void)
{
FL_GPIO_InitTypeDef GPIO_InitStruct;
FL_UART_InitTypeDef UART3_InitStruct;
//UART3_RX
GPIO_InitStruct.pin = FL_GPIO_PIN_0;
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_ENABLE;
GPIO_InitStruct.remapPin = FL_ENABLE;
GPIO_InitStruct.analogSwitch = FL_DISABLE;
(void)FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
//UART3_TX
GPIO_InitStruct.pin = FL_GPIO_PIN_1;
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
GPIO_InitStruct.remapPin = FL_ENABLE;
GPIO_InitStruct.analogSwitch = FL_DISABLE;
(void)FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
UART3_InitStruct.clockSrc = FL_CMU_UART0_CLK_SOURCE_APBCLK;
UART3_InitStruct.baudRate = 115200;
UART3_InitStruct.transferDirection = FL_UART_DIRECTION_TX_RX;
UART3_InitStruct.dataWidth = FL_UART_DATA_WIDTH_8B;
UART3_InitStruct.stopBits = FL_UART_STOP_BIT_WIDTH_1B;
UART3_InitStruct.parity = FL_UART_PARITY_NONE;
(void)FL_UART_Init(UART3, &UART3_InitStruct);
}
void MF_UART3_Interrupt_Init(void)
{
FL_UART_ClearFlag_RXBuffFull(UART3);
FL_UART_EnableIT_RXBuffFull(UART3);
// FL_UART_ClearFlag_TXShiftBuffEmpty(UART3);
// FL_UART_EnableIT_TXShiftBuffEmpty(UART3);
}
至于串口接收中断可以参考之前的章节: