Day21-22:串口中断与 DMA 应用

中断方式串口通信:(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 连接

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值