| 术语 | 含义 |
|---|---|
| 单工 | A→B 单向 |
| 半双工 | A↔B 双向但不能同时 |
| 全双工 | A↔B 可同时收发 |
| 串行 | 数据一位一位发送 |
| 并行 | 数据一次多位发送 |
| 同步 | 带时钟线 |
| 异步 | 无时钟线,靠波特率约定 |
USART = 通用同步异步收发器,常用异步模式即「串口」。
串口帧格式:
[起始位 0] [数据位 D0..D7] [校验位 P] [停止位 1]
| 参数 | 常用值 |
|---|---|
| 波特率 | 9600 / 115200 / 921600 |
| 数据位 | 8 |
| 校验位 | None |
| 停止位 | 1 |
| 流控 | None |

F407 有 6 个 USART + 2 个 UART,USART 支持同步/异步,UART 仅异步。
USART1/2/3 在 APB2(84 MHz),USART4/5/6 + UART7/8 在 APB1(42 MHz × 2 = 84 MHz,但分频后是 42 MHz)。
USART1 TX → PA9,RX → PA10(开发板已经通过 CH340 转 USB 接出)。
HAL_UART_Init(&huart1) 配置 115200-8-N-1;HAL_UART_Transmit(&huart1, buf, len, timeout);HAL_UART_Receive_IT(&huart1, buf, 1); + 回调。// 阻塞发送
HAL_UART_Transmit(&huart1, (uint8_t *)"Hello\n", 6, 100);
// 中断接收
HAL_UART_Receive_IT(&huart1, &rx_byte, 1);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART1) {
HAL_UART_Transmit_IT(&huart1, &rx_byte, 1); // 回环
HAL_UART_Receive_IT(&huart1, &rx_byte, 1); // 重启接收
}
}


让 printf("...") 直接发到串口:
int fputc(int ch, FILE *f) {
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 10);
return ch;
}
MDK 勾选 Use MicroLIB。
sprintf + HAL_UART_Transmit 自己拼。XCOM 串口助手打开 COMx 115200 → 看到「Hello World」并支持键入字符回环。
