• 芯片型号:stm32f103rct6;SPI接口ADC;

  • 代码功能描述:有xyz3路数据,每路1个双通道adc采集,从x路依次数据并用串口发送出去,14字节,2250000bps;

  • 方案1:按照顺序执行,依次采集各路数据,然后uart发送。这样也行,但是我不喜欢,这样会影响数据更新的速率,就拿x路来说,要等yz路,串口发送都完成了,x路才开始下一次数据采集。我的目的是尽量提高各路数据更新的速率。方案1不满足。

  • 方案2:考虑用DMA发送,释放CPU。

  • DMA有normal和circular两种模式。
    circular用法:(STM32CubeMX配置串口DMA省略)

  • 在main函数中该初始化的都初始化完毕之后,紧接着一句:
    HAL_UART_Transmit_DMA(&huart1, (uint8_t*)Tx_frame, LENGTH_FRAME);

  • 就调用这个函数一次就可以了,DMA一直开启,一帧数据发送完毕之后里面发送下一帧,中间没有停顿。这样确实是快了,也释放了CPU,各路的数据采集因为缺少了等待串口发送的时间,所以就间接提高的了数据更新速率。但有个致命缺陷:数据采集和数据发送各玩各的,就是他俩时序对不上,数据采集到一半,一个完整帧数据只更新了一部分,就被DMA挪走了,这样就把新旧数据一块发送出去了,circular模式的DMA才不管数据有没有完整更新,只管发
    normal用法:

  • 为了解决circular带来的问题,采用normal模式,就是每发一次就开启一次DMA,这样就可以等一帧数据更新完毕之后,再开启DMA发送,同样不会占用CPU,在DMA发送数据的时间里CPU可以开启下一轮的数据采集。

  • 再HAL库配置好normal模式后,在数据采集的代码后面,比如采集数据代码是这样执行的:

CSX=0;
采集X_ADC_通道1;
采集X_ADC_通道2;
CSX=1;
CSY=0;
采集Y_ADC_通道1;
采集Y_ADC_通道2;
CSY=1;
CSZ=0;
采集Z_ADC_通道1;
采集Z_ADC_通道2;
CSZ=1;
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)Tx_frame, LENGTH_FRAME);
  • 这样数据采集和数据发送几乎是并行执行的,可以大大提高各路数据更新的速率。

STM32的UART使用DMA操作不要入的坑

巧用STM32串口DMA的normal和circular模式,达到并行执行效果相关推荐

  1. STM32串口+DMA使用1

    STM32串口+DMA使用 STM32有5个串口资源(USART1,USART2,USART3及UART4,UART5).其中3个USART(通用同步/异步收/发器universalsynchrono ...

  2. STM32 串口DMA接收 Openmv / K210 整数、小数字符串数据 (基于HAL库)

    目录 前言 一.工程配置 二.串口DMA部分代码 1.源文件UART_DMA.c 2.头文件UART_DMA.h 3.stm32f1xx_it.c的修改 4.串口收发DMA测试 三.字符串数字提取代码 ...

  3. STM32 串口DMA收发(二)

    STM32 串口DMA收发数据 一.STM32 DMA简介与功能说明 1.STM32F4 DMA简介 DMA(Direct memory access),即直接存储器访问.用于在外设与存储器之间以及存 ...

  4. STM32串口DMA接收双缓冲

    STM32高端MCU(F4.F7等)才支持DMA双缓冲,低端MCU(F1)不支持DMA双缓冲,不过有替代方案可实现类型效果. 一.MCU支持DMA双缓冲的情形 不再赘述,参见博客 STM32 串口DM ...

  5. dma接收双缓存 stm32_容易被大多数人忽视的STM32串口DMA问题

    讨论三个问题: 1.什么叫串口DMA 请求: 2.串口简要复习: 3.串口DMA发送流程. 第一 什么叫串口DMA 请求(战舰STM32开发板) 说这个问题之前先简单回顾DMA的基本特性.先导出原子哥 ...

  6. FPGA 串口中断_一个严谨的STM32串口DMA发送amp;接收(1.5Mbps波特率)机制

    昨天分享的<嵌入式大杂烩读者福利:第一期>大家有去抽奖吗,没抽的可参与抽奖,碰碰运气.我最喜欢抽奖了,还记得前几个月疫情严重时期连抽中了3包口罩,真刺激,哈哈.之后多多安排抽奖,敬请期待. ...

  7. 一个严谨的STM32串口DMA发送接收(1.5Mbps波特率)机制

    文章目录 1 前言 2 串口有必要使用DMA吗 3 实现方式 4 STM32串口使用DMA 5 串口DMA接收 5.1 基本流程 5.2 相关配置 5.3 接收处理 5.3 .1 接收数据大小 5.3 ...

  8. STM32使用DMA在Normal模式下二次传输

    当STM32的DMA配置为Normal(即单次)模式时,在DMA第一次传输完成后,要启动第二次DMA传输,需先关闭该DMA通道,重新设置DMA传输数据个数,再开启DMA通道. 原理和定时器关闭自动重载 ...

  9. 【32单片机学习】(6)STM32串口+DMA收发不定长数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1.DMA介绍 2.串口接收数据 3.实验现象 1.实验电路图 2.串口收发不定长数据视频演示 3.OLED 显示接收数据 ...

最新文章

  1. 一周内被程序员疯转5.6W次,最终被大厂封杀!
  2. VS 2010 Beta2中WPF与Silverlight的关键区别?
  3. hihocoder 1320 压缩字符串(字符串+dp)
  4. js点击获取连接的内容
  5. 八篇 NeurIPS 2019 最新图神经网络相关论文
  6. mapreduce任务出错最大尝试次数
  7. C语言rewind()函数(设置文件位置为给定流 stream 的文件的开头)(回到文件开头重读)
  8. 使用HTML5开发手机离线应用
  9. 小白爬虫第一弹之抓取妹子图【更新版】
  10. leetcode----------Excel Sheet Column Number
  11. vue element table 修饰
  12. python numpy安装windows_windows下安装python的numpy,scipy,sklearn
  13. php 多附件上传插件下载,大文件、多文件分片上传插件
  14. 第10章 十字消除(《C和C++游戏趣味编程》配套教学视频)
  15. matlab 2018 adams,关于ADAMS与MATLAB联合仿真的一点经验
  16. 2022-2028年中国公私合作(PPP)模式深度分析及发展战略研究报告
  17. Java 微服务实践
  18. oracle使用text类型,oracle数据库中text类型用什么类型表示
  19. Air202掉坑日记(2)——连接阿里云成功后自动掉线(AT版本)
  20. 全面了解风控指标体系

热门文章

  1. Learning Shape Representations for Clothing Variations in Person Re-Identification
  2. http://nianjian.xiaze.com/tags.php?/%E6%BD%BC%E5%85%B3%E5%B9%B4%E9%89%B4/1/13595315666/
  3. C++实现骰子涂色算法
  4. 计算机的常见故障处理实验报告,实训13 微机常见故障处理实训报告.doc
  5. html标签em和i的区别,HTML中strong与b,em与i标签的区别和使用建议
  6. stc89c51单片机音乐盒系统设计_基于单片机数字音乐盒的设计与实现(附PCB,电路图,程序)...
  7. wing101 缩进不管用_与lg wing一起使用最有用的双屏手机
  8. rjs 中的一些记下 免的忘 了
  9. Salesforce系列(六):Salesforce Apex基础SOQL查询和数据添加!
  10. 华硕电脑一开机就等待按F1然后自动进入BIOS界面如何解决