IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32F407 HAL库 ADC笔记 -> 正文阅读

[嵌入式]STM32F407 HAL库 ADC笔记

STM32F407 ADC简介

  • stm32f407系列有312位精度逐次趋近型ADC,每个ADC具有多达 19 个复用通道,可测量来自 16 个外部 源、两个内部源和 V B A T V_{BAT} VBAT? 通道的信号。

  • 采样模式:单次、连续、扫描、不连续采样

  • 数据存储:左对齐或右对齐16位数据寄存器

  • ADC 输入范围: V R E F ? V_{REF-} VREF?? <= V I N V_{IN} VIN? <= V R E F + V_{REF+} VREF+?

    • 正模拟参考电压输入 V R E F ? V_{REF-} VREF??
    • 负模拟参考电压输入 V R E F + V_{REF+} VREF+?
  • ADC时钟ADCCLK:由APB2分频而来

  • 支持独立/双重/三重ADC模式

ADC框图

请添加图片描述

ADC电压输入范围

请添加图片描述

请添加图片描述
(开发板通过跳线帽将VREF+与VDDA相连)
(从原理图上得: V D D V_{DD} VDD? = 3.3V)请添加图片描述

ADC通道

每个ADC有2个通道组:规则通道组及注入通道组

规则通道组最多 16 个转换,必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序

注入通道组最多 4 个转换

  • 注入通道的转换可以打断规则通道的转换(相当于中断), 在注入通道被转换完成之后,规则通道才得以继续转换

请添加图片描述

  • 触发注入

    要使用触发注入,必须将 ADC_CR1 寄存器中的 JAUTO 位清零。

    1. 通过外部触发或将 ADC_CR2 寄存器中的 SWSTART 位置 1 来启动规则通道组转换。
    2. 如果在规则通道组转换期间出现外部注入触发或者 JSWSTART 位置 1,则当前的转换会复位,并且注入通道序列会切换为单次扫描模式。
    3. 然后,规则通道组的规则转换会从上次中断的规则转换处恢复。 如果在注入转换期间出现规则事件,注入转换不会中断,但在注入序列结束时会执行规 则序列。

    注意: 使用触发注入时,必须确保触发事件之间的间隔长于注入序列。例如,如果序列长度为 30 个 ADC 时钟周期(即,采样时间为 3 个时钟周期的两次转换),则触发事件的最小间隔不能小于 31 个 ADC 时钟周期。

    自动注入

    ? 如果将 JAUTO 位置 1,则注入组中的通道会在规则组通道之后自动转换。这可用于转换最多由 20 个转换构成的序列,这些转换在 ADC_SQRx 和 ADC_JSQR 寄存器中编程。 在此模式下,必须禁止注入通道上的外部触发。 如果 CONT 位和 JAUTO 位均已置 1,则在转换规则通道之后会继续转换注入通道。

    注意: 不能同时使用自动注入和不连续采样模式

采样时间和转换时间

  • 总转换时间 = 采样时间 + 转换时间
  • 最小采样时间:3个周期
  • 转换时间 = 12周期
    • 例如:12位ADC,ADCCLK = 36MHz;则转换时间 t = 1 36 ? 1 0 6 ? 12 t =\frac{1}{36*10^6}*12 t=36?1061??12

采样模式

单次转换模式

ADC仅执行一次转换

连续转换模式

ADC 结束一个转换后立即启动一个新的转换

扫描模式

此模式用于扫描一组模拟通道。

为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一 个通道

不连续采样

该模式可用于转换含有 n (n <= 8) 个转换的短序列,该短序列是在 ADC_SQRx 寄存器中选择的转换序列的一部分。可通过写入 ADC_CR1 寄存器中的 DISCNUM[2:0] 位来指定 n 的值。

出现外部触发时,将启动在 ADC_SQRx 寄存器中选择的接下来 n 个转换,直到序列中的所有转换均完成为止。

示例: n = 3,要转换的通道 = 0、1、2、3、6、7、9、10

? 第 1 次触发:转换序列 0、1、2

? 第 2 次触发:转换序列 3、6、7

? 第 3 次触发:转换序列 9、10 并生成 EOC 事件

? 第 4 次触发:转换序列 0、1、2

数据管理

使用DMA

在使能DMA模式后,每完成规则通道组中的一个通道的转换后,都会生成一个DMA请求。

进入实战

一、单通道 阻塞(轮询)模式

  • 不建议用阻塞模式进行多通道采集 通道序列可能出现问题(可打开不连续模式解决)

cubemx配置

请添加图片描述
请添加图片描述

添加代码

//main.c

/* USER CODE BEGIN PV */
float ADC_Value = 0;
/* USER CODE END PV */

while(1){
    /* USER CODE BEGIN 3 */
	ADC_Value  = get_adc_value_zuse(); //读取数据
	HAL_Delay(0);   //延时1ms
}
/* USER CODE END 3 */

/* USER CODE BEGIN 4 */
float get_adc_value_zuse(void){
	HAL_ADC_Start(&hadc1);  //开启ADC(阻塞模式)
	HAL_ADC_PollForConversion(&hadc1,50);   //查看规则通道组是否完成转换
	if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)){  //查看ADC状态是否为EOC
		return (float)HAL_ADC_GetValue(&hadc1)/4096.0*3.3;  //读取并处理数据
	}
	else return 0;
}
/* USER CODE END 4 */

运行效果

在开发板上用杜邦线将PB0与输出3.3V的I/O口相连

使用ST-Link调试,查看ADC_Value的值
在这里插入图片描述

二、多通道 ADC模式

多通道必须使用扫描模式

cubemx配置

在这里插入图片描述

请添加图片描述在这里插入图片描述

添加代码

main.c
/* USER CODE BEGIN PV */
uint16_t adc_value[40];
float ad_voltage[40];  
/* USER CODE END PV */

 /* USER CODE BEGIN 2 */
 HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc_value,40);  //开启ADC(DMA模式)
 /* USER CODE END 2 */
 
 /* USER CODE BEGIN 3 */
 uint16_t i;
 for(i = 0;i<40;i++){
 ad_voltage[i] = (float)adc_value[i]/4096.0*3.3;  //转换为实际电压
 HAL_Delay(0);
 /* USER CODE END 3 */

运行效果

使用ST-Link调试,查看ad_voltage数组的值
在这里插入图片描述

后记

感谢大家的阅读 如有不当或错误之处,欢迎指出

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:46:05  更:2021-08-12 16:47:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:36:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码