版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.2.2
ADC转换器1
ADC轮询方式1
ADC的数据类型和接口函数typedefstruct{ ADC_TypeDef*Instance;//ADC1/ADC2/ADC3 ADC_InitTypeDefInit;//初始化结构体变量 __IOuint32_tNbrOfCurrentConversionRank;//规则序列中ADC转换的总通道数 DMA_HandleTypeDef*DMA_Handle;//DMA方式使用 HAL_LockTypeDefLock; __IOuint32_tState; __IOuint32_tErrorCode;}ADC_HandleTypeDef;ADC处理结构ADC_HandleTypeDef结构体类型,包括7个成员变量ADC结构体ADC_InitTypeDef定义ADCADC类型定义设置规则序列通道以及采样周期的函数是:ADC_ChannelConfTypeDef结构体ADC调用实例配置好通道并且使能ADC后,接下来就是读取ADC值,查询方式读取,HAL库提供了专用函数:读取ADC值ADC--
南昌大学“卓越”辅导员培养工程建设接口函数:HAL_ADC_Init函数原型HAL_StatusTypeDefHAL_ADC_Init(ADC_HandleTypeDef*hadc) 功能描述按照结构体“ADC_InitTypeDef”中指定的参数,初始化ADC外设和通用组入口参数1hadc:ADC控制器句柄的地址返回值HAL状态值注意事项无1 初始化ADC外设和通用组函数:HAL_ADC_Init--
南昌大学“卓越”辅导员培养工程建设接口函数:HAL_ADC_GetValue函数原型uint32_tHAL_ADC_GetValue(ADC_HandleTypeDef*hadc) 功能描述获得ADC规则组转换结果入口参数1hadc:ADC控制器句柄的地址返回值无注意事项无2 获得ADC规则组转换结果:HAL_ADC_GetValue3 等待规则组转换完成HAL_ADC_PollForConversion接口函数:HAL_ADC_PollForConversion函数原型HAL_StatusTypeDefHAL_ADC_PollForConversion(ADC_HandleTypeDef*hadc,uint32_tTimeout) 功能描述等待规则组转换完成。入口参数1hadc:ADC控制器句柄的地址入口参数2Timeout:以毫秒为单位的超时时间值注意事项无3.2.3单通道ADC轮询方式AD转换序号设备/资源名称数量是否准备到位(√)1STM32F407核心板1
2可调电位器1
1、实验器材本任务所需的实验器材清单如表3-27所示。基础任务ADC小车电池电量检测(单通道轮询方式ADC采样)表3-27实验器材清单基础任务01任务目标掌握CubeMX软件配置ADCl单通道轮询方式采集数据功能的方法。02任务内容利用ADC1的通道6(对应引脚PA6)来测量一个外部模拟电压0~3.3v,并将转换结果通过串口发送到PC端,PC端通过串口调试助手查看结果。ADC小车电池电量检测(单通道轮询方式ADC采样)--
南昌大学“卓越”辅导员培养工程建设设计思路ADC开启PA口时钟和ADC1时钟,设置PA6为模拟输入;初始化ADC,设置ADC时钟分频系数,分辨率,模式,扫描方式,对齐方式等信息;开启AD转换器。配置通道,读取通道ADC值。设计思路--
南昌大学“卓越”辅导员培养工程建设硬件连接图ADC实验利用电位器中心抽头接PA6,另两端接3.3v和GND,接线示意图如图所示PA63.3v,GND可调电位器ADC时钟ADC实验配置ADC时钟频率ADC外设配置配置ADC1通道1ADC程序编写配置ADC1通道1生成MDK工程后,进行应用程序编写,打开main.c文件,按程序清单3-3,在指定的位置修改代码。/*USERCODEBEGINPV*/uint16_tadcx;floatADC_Value;/*USERCODEENDPV*//*Privatefunctionprototypes----------------------------------------------*/voidSystemClock_Config(void);/*USERCODEBEGINPFP*/ uint16_tGet_Adc(uint32_tch);//
Get_Adc()函数声明 uint16_tGet_Adc_Average(uint32_tch,uint8_ttimes);//
Get_Adc_Average()声明/*USERCODEENDPFP*/intmain(void){HAL_Init();SystemClock_Config();
/*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_ADC1_Init();MX_USART1_UART_Init();
/*USERCODEBEGIN2*/HAL_ADC_Start(&hadc1);
/*USERCODEEND2*/--
南昌大学“卓越”辅导员培养工程建设ADC
while(1){
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/ adcx=Get_Adc_Average(ADC_CHANNEL_6,10); printf("%d\r\n",adcx); ADC_Value=adcx*3.3/4096; printf("Themeasuredvoltagevalueis%.4fV\r\n",ADC_Value); HAL_Delay(1000);}
/*USERCODEEND3*/程序编写ADC程序编写/*USERCODEBEGIN4*/uint16_tGet_Adc(uint32_tch){//轮询方式读取通道号为ch的ADC转化值 ADC_ChannelConfTypeDefADC1_ChanConf; ADC1_ChanConf.Channel=ch; ADC1_ChanConf.Rank=1; ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_56CYCLES; HAL_ADC_ConfigChannel(&hadc1,&ADC1_ChanConf);//通道配置 HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,10);//轮询方式,超时等待10ms
return(uint16_t)HAL_ADC_GetValue(&hadc1);}uint16_tGet_Adc_Average(uint32_tch,uint8_ttimes){//求通道号为ch,采集次数为times次的平均值 uint32_ttemp_val=0; uint8_tt;
for(t=0;t<times;t++) { temp_val+=Get_Adc(ch); HAL_Delay(5); }
return(uint16_t)temp_val/times;}/*USERCODEEND4*/轮询方式读取ADC采样值多次采样,求平均值--
南昌大学“卓越”辅导员培养工程建设程序运行结果ADC3
ADC中断方式进阶任务101任务目标掌握CubeMX软件配置ADCl单通道中断方式采集数据功能的方法。02任务内容利用ADC1的通道6(对应引脚PA6)来测量一个外部模拟电压0~3.3v,并将转换结果通过串口发送到PC端,PC端通过串口调试助手查看结果。ADC小车电池电量检测(单通道中断方式ADC采样)--
南昌大学“卓越”辅导员培养工程建设设计思路ADCADC单次数据采样与电压换算[中断方式方式]1.设置ADC_IN6(PA6)为12位ADC,右对齐,启用中断。2.采用中断这两种方式,每隔1秒采样一次ADC的数据。3.将每次读取到的ADC采样值转换为对应电压值,发送到上位机。设计思路外设配置配置ADC1中断配置管脚配置外设配置USART1配置编写用户程序在main.c文件中添加如下代码:intmain(void){HAL_Init();SystemClock_Config();
/*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_ADC1_Init();MX_USART1_UART_Init();
/*USERCODEBEGIN2*/printf("adcforinterrupttest:\r\n");//发送提示信息
/*USERCODEEND2*/
/*Infiniteloop*/
/*USERCODEBEGINWHILE*/
while(1)
{
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/HAL_ADC_Start_IT(&hadc1);//启动一个非阻塞式的ADC转换并读取数据HAL_Delay(1000);
}
/*USERCODEEND3*/}ADC中断回调函数可在adc.c文件中/*USERCODEBEGIN1*/和/*USERCODEend1*/添加ADC的中断回调函数/*USERCODEBEGIN1*/voidHAL_ADC_ConvCpltCallback(ADC_HandleTypeDef*hadc){uint16_tADC0_Value,ADC0_Volt;
if(hadc->Instance==ADC1)
{HAL_ADC_Stop_IT(&hadc1);//关闭ADCADC0_Value=HAL_ADC_GetValue(&hadc1);//读取ADC转换结果ADC0_Volt=ADC0_Value*3300/4096;//将采样值换算成电压值
//向上位机发送ADC采样信息printf("\r\nADC0_Value=%d,ADC0_Volt=%dmV\r\n",ADC0_Value,ADC0_Volt);
}}/*USERCODEEND1*/编写用户程序ADC.h文件中添加头文件编写用户程序#ifndef__ADC_H__#define__ADC_H__#ifdef__cplusplusextern
"C"{#endif/*Includes------------------------------------------------------------------*/#include
"main.h"/*USERCODEBEGINIncludes*/#include
"usart.h"/*USERCODEENDIncludes*/编译程序,下载程序到核心板,电位器接线不变,打开串口调试助手,观察到如图所示界面。运行结果进阶任务2小车电池电量检测(定时器触发的单通道中断方式ADC采样)开一个定时器,每1s中断1次,在其中断回调函数中启动ADC,允许ADC中断,A/D转换完成后,在ADC的中断回调函数中打印采样结果。刚刚介绍的案例中,在主程序中使用了hal_delay(1000),函数,极大的消耗了MCU的宝贵时间,在实际项目中并不常用。可用小面的思路实现:配置TIM2外设设置TIM2每1s中断一次。在CubeMX中配置如图所示。配置ADC1外设ADC1的IN6配置。配置USART1外设USART1配置编写用户程序在main.c文件中添加如下代码:intmain(void){HAL_Init();SystemClock_Config();/*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_ADC1_Init();MX_USART1_UART_Init();MX_TIM2_Init();
/*USERCODEBEGIN2*/printf("Timer2TriggerADCtest:\r\n");HAL_TIM_Base_Start_IT(&htim2);HAL_ADC_Start_IT(&hadc1);/*USERCODEEND2*/
/*USERCODEBEGINWHILE*/
while(1)
{
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/
}
/*USERCODEEND3*/编写用户程序在main.c文件中添加如下代码:/*USERCODEBEGIN4*/voidHAL_ADC_ConvCpltCallback(ADC_HandleTypeDef*hadc){//ADC中断回调函数uint16_tADC0_Value,ADC0_Volt;
if(hadc->Instance==ADC1)
{ADC0_Value=HAL_ADC_GetValue(&hadc1);//读取ADC转换结果ADC0_Volt=ADC0_Value*3300/4096;//将采样值换算成电压值printf("\r\nADC0_Value=%d,ADC0_Volt=%dmV\r\n",ADC0_Value,ADC0_Volt);
//向上位机发送ADC采样信息
}HAL_ADC_Stop_IT(&hadc1);}voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){//TIM2每隔1s中断1次,回调函数中启动ADC。
if(htim->Instance==TIM2)
{HAL_ADC_Start_IT(&hadc1);
}}/*USERCODEEND4*/进阶任务3小车电池电量检测(定时器触发的单通道中断方式ADC采样)配置ADC的触发方式为定时器触发,A/D转换完成后,在ADC的中断回调函数中打印采样结果。刚刚介绍的案例中,在主程序中使用了hal_delay(1000),函数,极大的消耗了MCU的宝贵时间,在实际项目中并不常用。可用小面的思路实现:配置ADC1外设ADC1的IN6配置,请注意④和⑤处的配置。配置TIM2外设设置TIM2每1s产生一次更新事件。在CubeMX中配置如图所示,注意④。配置NVIC在Pinout&Configuration标签页左边SystemCore/NVIC中勾选ADC1/2/3全局中断,然后选择合适的中断优先级即可,如图所示,注意②。intmain(void){HAL_Init();/*Configurethesystemclock*/SystemClock_Config();
/*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_ADC1_Init();MX_TIM2_Init();MX_USART1_UART_Init();
/*USERCODEBEGIN2*/HAL_ADC_Start_IT(&hadc1);HAL_TIM_Base_Start(&htim2);
/*USERCODEEND2*//*USERCODEBEGINWHILE*/
while(1)
{
/*USERCO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026航空班主任面试题及答案
- 2026杰瑞面试题及答案
- 2026秋新教科版科学四年级上册教学课件:第二单元 第6课 胃和小肠里的消化 含多个微课视频
- 2026秋新教科版科学五年级上册教学课件:第一单元 第2课 怎样放得更大 有多个微课视频
- 江西省赣州市南康区2025-2026学年七年级下学期期末考试语文试题(含答案)
- 2025-2026学年北京市西城区初二(下)期末考试数学试卷(含答案)
- 人机协同下的证券服务效率提升
- 2026年甘肃省武威市凉州区高坝镇人民政府招聘专业化管理大学生村文书考试模拟试题及答案详解
- 2026年黑龙江省七台河市住房和城乡建设局人员招聘笔试备考题库及答案详解
- 人工智能算力优化策略研究
- cnas文件考试试题及答案
- DZ/T 0132-1994钻孔压水试验规程
- 幕墙安全管理制度
- 中医康复中的适宜技术选择试题及答案
- DB37T 1342-2021 平原水库工程设计规范
- 2024低温阀门深冷处理规范
- 广西燃气安全检查标准 DBJ T45-1472-2023(2023年7月1日实施)
- 外聘电工合同范本
- 临床肺泡出血综合征CT影像表现
- JTS-252-2015水运工程施工监理规范
- 肝囊肿学习课件
评论
0/150
提交评论