编程做网站,wordpress 不显示边栏,唐河企业网站制作哪家好,小红书seo排名帝搜软件一、ADC介绍 ADC#xff0c;即模数转换器#xff0c;它可以将模拟信号转化为数字信号。在stm32种一般有3个ADC#xff0c;每个ADC有18个通道。 12位ADC是一种逐次逼近型模拟数字转换器#xff0c;它有多达18个通道#xff0c;可测量16个外部和两个内部信号源。各个通道的A…一、ADC介绍 ADC即模数转换器它可以将模拟信号转化为数字信号。在stm32种一般有3个ADC每个ADC有18个通道。 12位ADC是一种逐次逼近型模拟数字转换器它有多达18个通道可测量16个外部和两个内部信号源。各个通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或者右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 ADC的输入时钟不得超过14MHz它是由PCLK2(72M的APB2总线)经分频产生。
二、ADC主要特征
●12位分辨率
● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断
● 单次和连续转换模式
● 从通道0到通道n的自动扫描模式
● 自校准
● 带内嵌数据一致性的数据对齐
● 采样间隔可以按通道分别编程
● 规则转换和注入转换均有外部触发选项
● 间断模式
● 双重模式(带2个或以上ADC的器件)
● ADC转换时间 ─ STM32F103xx增强型产品时钟为56MHz时为1μs(时钟为72MHz为1.17μs) ─ STM32F101xx基本型产品时钟为28MHz时为1μs(时钟为36MHz为1.55μs) ─ STM32F102xxUSB型产品时钟为48MHz时为1.2μs ─ STM32F105xx和STM32F107xx产品时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
● ADC供电要求2.4V到3.6V
● ADC输入范围VREF- ≤ VIN ≤ VREF
● 规则通道转换期间有DMA请求产生
三、STM32F1 ADC结构框图
这里参照的是stm32中文手册中的图 在上图中可以看出在这3个ADC中每个都有16个外部通道0~15经GPIO端口到达注入通道或者规则通道规则通道和注入通道的不同就是在规则通道中ADC会按顺序依次扫描每个通道而注入通道有点像中断如果ADC正在扫描规则通道但是有个注入通道此时会优先扫描注入通道中的数据 注入通道是不按顺序来的。外部的 16 个通道在转换的时候可分为2组通道规则通道组和注入 通道组其中规则通道组最多有16路注入通道组最多有 4 路。
stm32中GPIO端口对应的ADC通道如下图 四、stm32ADC配置步骤
具体配置步骤如下 1使能端口时钟和ADC时钟设置引脚模式为模拟输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); GPIO_InitStructure.GPIO_ModeGPIO_Mode_AN; //模拟输入模式 2设置ADC的分频因子 RCC_ADCCLKConfig(RCC_PCLK2_Div6); 3初始化ADC参数包括ADC工作模式、规则序列等 void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); typedef struct { uint32_t ADC_Mode; // ADC 工作模式选择 FunctionalState ADC_ScanConvMode; /* ADC 扫描多通道或者单 次单通道模式选择 */ FunctionalState ADC_ContinuousConvMode; // ADC 单次转换或者连 续转换选择 uint32_t ADC_ExternalTrigConv; // ADC 转换触发信号选择 uint32_t ADC_DataAlign; // ADC 数据寄存器对齐格式 uint8_t ADC_NbrOfChannel; // ADC 采集通道数 } ADC_InitTypeDef; 4使能ADC并校准 void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); ADC_Cmd(ADC1, ENABLE);//开启AD转换器 执行复位校准的方法是 ADC_ResetCalibration(ADC1); 执行 ADC 校准的方法是 ADC_StartCalibration(ADC1); //开始指定 ADC1 的校准状态 while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束 while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束 5读取ADC转换值 设置规则序列通道以及采样周期的库函数是 void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t) ADC_Channel,uint8_t Rank, uint8_t ADC_SampleTime) ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 ); 设置好规则序列通道及采样周期接下来就要开启转换由于我们采 用的是软件触发库函数 void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); 开启转换之后就可以获取ADC 转换结果数据调用的库函数是 uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); 获取 AD 转换的状态信息的库函数是 FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); 例如我们要判断 ADC1 的转换是否结束方法是 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束