中断方式串口通信:(CPU 利用率更高)
发送中断:数据发送完成后触发 (USART_SR 的 TC 标志)
接收中断:接收到数据时触发 (USART_SR 的 RXNE 标志)
中断方式实现接收不定长数据:
// 全局变量
uint8_t rx_buf[100];
uint8_t rx_len = 0;
// 接收中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance == USART1){
if(rx_len < 100){
rx_buf[rx_len++] = rx_data; // 保存数据
HAL_UART_Receive_IT(huart, &rx_data, 1); // 继续接收下一个字节
}
}
}
// 主函数
int main(){
USART1_Init();
HAL_UART_Receive_IT(&huart1, &rx_data, 1); // 开启接收中断
while(1){
if(rx_len > 0){ // 有数据接收
HAL_UART_Transmit(&huart1, rx_buf, rx_len, 1000); // 回显
rx_len = 0; // 清空缓冲区
}
}
}
DMA 方式串口通信:(适合大量数据传输)
配置 DMA 通道,实现无 CPU 参与的数据传输
发送:HAL_UART_Transmit_DMA()
接收:HAL_UART_Receive_DMA()
DMA + 中断实现高效通信:
接收完成后触发 DMA 中断,处理接收数据
串口总结:
串口是 STM32 最常用的通信方式,用于与 PC、传感器等设备交互
掌握阻塞、中断、DMA 三种通信方式,根据场景选择合适的方式
建议练习:串口发送字符串、接收用户命令并执行、与 ESP8266 通信实现 Wi-Fi 连接
467

被折叠的 条评论
为什么被折叠?



