前言:
本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用
所用工具:
1、芯片: STM32F407ZET6/ STM32F103ZET6
2、STM32CubeMx软件
3、IDE: MDK-Keil软件
4、STM32F1xx/STM32F4xxHAL库
知识概括:
通过本篇博客您将学到:
ACD工作原理
STM32CubeMX创建ADC例程
HAL库定时器ADC函数库
《【STM32】系统时钟RCC详解(超详细,超全面)》
ADC配置
这个我们简单的讲解下,如果看懂上方原理讲解,看这几个配置也是很简单的
ADCs_Common_Settings ADC模式设置
Mode ADC_Mode_Independent
这里设置为独立模式
独立模式模式下,双ADC不能同步,每个ADC接口独立工作。所以如果不需要ADC同步或者只是用了一个ADC的时候,应该设成独立模式,多个ADC同时使用时会有其他模式,如双重ADC同步模式,两个ADC同时采集一个或多个通道,可以提高采样率
Data Alignment (数据对齐方式): 右对齐/左对齐
这个上方有讲解,数据的左右对齐
Scan Conversion Mode( 扫描模式 ) : DISABLE
如果只是用了一个通道的话,DISABLE就可以了(也只能DISABLE),如果使用了多个通道的话,会自动设置为ENABLE。 就是是否开启扫描模式
Continuous Conversion Mode(连续转换模式) ENABLE
设置为ENABLE,即连续转换。如果设置为DISABLE,则是单次转换。两者的区别在于连续转换直到所有的数据转换完成后才停止转换,而单次转换则只转换一次数据就停止,要再次触发转换才可以进行转换
Discontinuous Conversion Mode(间断模式) DISABLE
因为我们只用到了1个ADC,所以这个直接不使能即可
STM32】HAL库 STM32CubeMX教程四—UART串口通信详解
1 设置项目名称
2 设置存储路径
3 选择所用IDE
创建工程文件
然后点击GENERATE CODE 创建工程
配置下载工具
新建的工程所有配置都是默认的 我们需要自行选择下载方式,勾选上下载后复位运行
例程:
在main.c中加上
/* USER CODE BEGIN 0 */
uint16_t ADC_Value;
/* USER CODE END 0 */
在ADC初始化之后加上AD校准函数
MX_ADC1_Init();
HAL_ADCEx_Calibration_Start(&hadc1); //AD校准
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
while中加上:
HAL_ADC_Start(&hadc1); //启动ADC转换
HAL_ADC_PollForConversion(&hadc1, 50); //等待转换完成,50为最大等待时间,单位为ms
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
ADC_Value = HAL_ADC_GetValue(&hadc1); //获取AD值
printf("ADC1 Reading : %d rn",ADC_Value);
printf("PA3 True Voltage value : %.4f rn",ADC_Value*3.3f/4096);
printf("Z小旋测试rn");
}
HAL_Delay(1000);
就可以完成正常读取
中断读取:
如果使能了ADC转换结束中断,并且使能了定时器中断,可以这样写:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //定时器中断回调
{
HAL_ADC_Start_IT(&hadc1); //定时器中断里面开启ADC中断转换,1ms开启一次采集
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //ADC转换完成回调
{
HAL_ADC_Stop_IT(&hadc1); //关闭ADC
HAL_TIM_Base_Stop_IT(&htim3); //关闭定时器
AD_Value=HAL_ADC_GetValue(&hadc1); //获取ADC转换的值
printf("ADC1 Reading : %d rn",AD_Value);
printf("%.4f Vrn",(AD_Value*3.3/4096)); //串口打印电压信息
HAL_TIM_Base_Start_IT(&htim3); //开启定时器
}
函数讲解:
开启ADC 3种模式 ( 轮询模式 中断模式 DMA模式 )
• HAL_ADC_Start(&hadcx); //轮询模式开启ADC
• HAL_ADC_Start_IT(&hadcx); //中断轮询模式开启ADC
• HAL_ADC_Start_DMA(&hadcx); //DMA模式开启ADC
关闭ADC 3种模式 ( 轮询模式 中断模式 DMA模式 )
• HAL_ADC_Stop()
• HAL_ADC_Stop_IT()
• HAL_ADC_Stop_DMA()
ADC校准函数 :
• HAL_ADCEx_Calibration_Start(&hadcx);
F4系列不支持
读取ADC转换值
• HAL_ADC_GetValue()
等待转换结束函数
• HAL_ADC_PollForConversion(&hadc1, 50);
第一个参数为那个ADC,第二个参数为最大等待时间
ADC中断回调函数
• HAL_ADC_ConvCpltCallback()
转换完成后回调,DMA模式下DMA传输完成后调用
规则通道及看门狗配置
• HAL_ADC_ConfigChannel() 配置规则组通道
• HAL_ADC_AnalogWDGConfig()
上一篇:【STM32】HAL库 STM32CubeMX教程十---DAC
下一篇:STM32之LED配置
推荐阅读最新更新时间:2024-11-16 22:21
设计资源 培训 开发板 精华推荐
- LT1172HVIQ、-5.2/1.25A 负降压转换器的典型应用
- EVAL-ADRF6755SDZ,基于 ADRF6755 300 至 2310 MHz I/Q 调制器的评估板,具有集成小数 N PLL 和 VCO
- OP184FS-REEL7 单电源、3V 低噪声仪表放大器的典型应用
- 一种用于手电筒的 LED 通用 LED 驱动器
- RDR-802 - 基于InnoSwitch3-Pro和Weltrend WT6635P控制器的60W USB PD 3.0与3.3 V-21 V PPS电源
- Adafruit 16 通道 12 位 PWM/伺服屏蔽 - I2C 接口 | 1411
- EVAL-AD7679CBZ,用于 AD7679、18 位、571 Ksps PulSAR 模数转换器的评估板
- #第五届立创电子设计大赛#御坂妹妹护目镜视觉辅助装置
- TP4056电源管理
- SIP78L08AC 三端低电流正压稳压器典型应用