当前位置: 首页 > news >正文

串口+DMA:固件库踩坑日记

1.如何告知DMA相应通道连接的外设

USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);表明是USART1的RXNE事件唤起DMA1_Chanal5开启转运

2.DMA单次和多次模式的选择

单次模式和循环模式的选择:

单次模式优点:

  • 可以知道每次传输了多少
  • 设定最大传输长度不超过缓冲区无须担心越界问题
  • 无须担心覆盖问题

单次模式缺点:

  • 每次串口的IDLE中断都需要重新设置DMA的计数值(存储器地址自动恢复)

循环模式优点:

  • 无需每次传输完成再关闭DMA,重设 计数值
  • 配合半传输中断和传输完成中断+二级缓冲区,可以实现稳定的数据接收

循环模式缺点:

  • 传输速度过快,处理速度慢时,会出现先接收数据被覆盖

3.存储器到存储器模式/外设到存储器模式的区别

  1. M2M模式一旦启动DMA,不停地转运,无需额外触发条件,直到计数值为0,如果同时设置了循环模式,会出现跑不停的现象。
  2. 外设到存储器模式,需要触发条件,比如USART1_Rx对应DMA1_Chanal5,当RXNE被置位,触发DMA相应通道转运。

4.USART_ClearITPendingBit(x,USART_IT_IDLE)无法清除IDLE标志位

USART_ClearITPendingBit()函数只是手动清除SR寄存器,此前DMA转运过DR寄存器数值,但是顺序是反的!

所以清除IDLE标志位的方法只有:

        uint8_t clear;

        clear = USART1->SR; // 清除空闲中断

        clear = USART1->DR; // 清除空闲中断

http://www.dtcms.com/a/292983.html

相关文章:

  • 开发者的AI认知指南:用大模型重新理解人工智能(上)
  • Python排序算法全解析
  • Spring 核心知识点梳理 1
  • 【Lucene】架构
  • POSIX系统介绍
  • 【小白量化智能体】应用6:根据通达信指标等生成机器学习Python程序
  • A316-LS-MIC-V2:USB AI直播麦克风评估板技术解析
  • Linux——进程间通信,匿名管道,进程池
  • Spring AI 系列之二十 - Hugging Face 集成
  • 轩辕杯2025 Pwn baby_heap WP(house_of_apple2)
  • FFMPEG 解码流程 硬解码
  • 从零构建实时通信引擎:Freeswitch源码编译与深度优化指南
  • netty的编解码器,以及内置的编解码器
  • Linux系统权限全面解析:掌握你的数字王国钥匙
  • Python 链接各种中间件[Mysql\redis\mssql\tdengine]
  • 数据结构01:链表
  • FashionAI / 智尚衣橱 / TryFit / 智能时尚搭配平台
  • 面试150 N皇后Ⅱ
  • Docker环境搭建RabbitMq集群详解
  • 【CAN】2.帧格式
  • ReasonFlux:基于思维模板与分层强化学习的高效推理新范式
  • Python接口自动化实战 ( 第一阶段) - 封装接口请求类和异常处理
  • Ubuntu 虚拟机配置 与Windows互传文件
  • react19相关问题和解答
  • 【技术新闻】OpenAI发布GPT-5,AI编程助手迎来革命性突破
  • React集成百度【BMap Draw】教程(001):实现距离测量和面积测量
  • dubbo源码分析之请求调用异步化原理
  • Pandas核心数据结构详解
  • 第3章通用的服务可用性治理手段——3.2 重试
  • Kotlin 作用域函数 let 的实现原理