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

adc和dma的使用原理和过程

ADC(Analog-Digital Converter)模拟-数字转换器;

积分、逐次逼近、并行\串行比较

使用过程:

首先我们开启时钟CLOCK,START给予一个脉冲信号,让ADC开始转换。我们可能有多路的输入,这时候可以根据,地址所存译码器,选择对应通道,输入电压A,然后SAR给DAC数据,DAC根据SAR的数据输出对应的电压B,比较器比较B和A的大小关系。然后SAR采用二分法的方法输出数据给DAC,使得DAC输出的电压B,不断和A的缩小差距近似相等。当近似相等时候,SAR将数据传递给8位锁存器,并将EOC置0,标志着转换完成,我们就可以根据8位地址锁存器的数据,DAC参考电压,与255~0的对应关系进行转换就可以得到数据,这里电压我以3.3举例(具体以实际为准)。 

采样时间的计算

STM32 ADC的总转换时间为:TCONV = 采样时间 + 12.5个ADC周期

配置

1.时钟使能(ADC, GPIO, ADC预分频ADCCLK)

2.配置GPIO为ADC采样输入 

3.选择通道(配置多路开关)

4.配置ADC结构体(采样模式, 时钟分频, 采样时间,单次还是连续)

5.配置校准器(复位校准和开始校准)

6.软件触发开启ADC采样

7.设置合适的采样时间

8.进行数据采样

9.进行数据转换(采样值/2^(ADC位数)*参考电压)

相关HAL库函数

HAL_ADCEx_Calibration_Start(&hadc1,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED);

注:该函数一定要使用在采样之前或者之后

HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion(&hadc,100);

 HAL_ADC_Stop(&hadc1);

DMA(直接存储器访问)

将数据通过独立的DMA通道绕开CPU进行传输

特点:

双向的AHB主端口,GPDMA:两个端口

可以实现从外设/内存到外设/内存的数据传输

并发

GPDMA有16个通道

GPDMA的通道分配

给专用的通道使用专用的FIFO单元

FIFO的大小决定了通道能够有效处理最大DMA突发大小(突发长度与数据宽度的乘积)

端口0分配给与外设之间的传输,因为在这个端口和APB外设之间有一条直接的硬件数据路径,位于AHB矩阵之外;

端口1分配给内存之间的传输,用户可以自由选择用于访问源位置和目标位置的端口。

DMA传输模式

普通or循环  前者搬运了设定长度的数据后会产生一个中断,DMA此时停止工作,需要关断DMA使能后再重新配置才能使用;后者产生中断标志后再接收到数据会覆盖之前的数据

相关HAL库函数

HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart,\ uint8_t *pData, uint16_t Size)

__HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)

HAL_UART_DMAStop(&huart1);


http://www.kler.cn/a/518766.html

相关文章:

  • vim的多文件操作
  • 国产编辑器EverEdit - 大纲视图
  • Arcgis国产化替代:Bigemap Pro正式发布
  • docker 安装 mysql 详解
  • Redis高阶5-布隆过滤器
  • 具身智能与大模型融合创新技术实训研讨会成功举办
  • L9305驱动组件接口TESSY测试
  • OpenFGA
  • 小识JVM堆内存管理的优化机制TLAB
  • 基于模糊PID的孵化箱温度控制系统(论文+源码)
  • vue3 vue2区别
  • C#常考随笔1:const和readonly有什么区别?
  • [笔记] 极狐GitLab实例 : 手动备份步骤总结
  • Windows11离线安装wsl2(适用于 Linux 的 Windows 子系统)和Ubuntu
  • Android Toast 系统切换多语言显示
  • 当AI风暴来袭:中美科技商业版图的迥异走向
  • MyBatis 写法
  • 力扣算法题——1089.复写零【系统讲解】
  • 回归测试中的自动化与手动测试平衡
  • 大数运算之C语言实现
  • STM32项目分享:智能语音分类垃圾桶
  • 基于Flask的微博话题舆情分析可视化系统的设计与实现
  • Java Swing 基础组件详解 [论文投稿-第四届智能系统、通信与计算机网络]
  • 数据结构与算法之堆: LeetCode 208. 实现 Trie (前缀树) (Ts版)
  • Java面试题2025-Mysql
  • Pandas与Numpy的数据分析进阶题