STM32-adc设定



STM32ADC设定ADC模块的设定,IO 设定。STM32一共包括三个ADC模块。ADC1包括17ADCchannel。可以将模拟的电压量转换为数字量。

  1. 初始化IOADC1模块的时钟使能。

代码:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1,ENABLE );    //使能ADC1通道时钟

  1. 设置ADC的分频因子。ADC的工作频率不能大于14Mhz

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

  1. 设置要使用的IO管脚的功能。将其设置为模拟输入模式。

    代码:    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AIN;         //模拟输入引脚

      GPIO_Init(GPIOA,&GPIO_InitStructure); 

  2. ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值。

  3. 设置ADC1的工作模式以及各种属性。

代码:、

  ADC_InitStructure.ADC_Mode =ADC_Mode_Independent; //ADC工作模式:ADC1ADC2工作在独立模式

  ADC_InitStructure.ADC_ScanConvMode= DISABLE;    //模数转换工作在单通道模式

  ADC_InitStructure.ADC_ContinuousConvMode= DISABLE; //模数转换工作在单次转换模式

  ADC_InitStructure.ADC_ExternalTrigConv= ADC_ExternalTrigConv_None;    //转换由软件而不是外部触发启动

  ADC_InitStructure.ADC_DataAlign= ADC_DataAlign_Right; //ADC数据右对齐

  ADC_InitStructure.ADC_NbrOfChannel= 1;     //顺序进行规则转换的ADC通道的数目

  ADC_Init(ADC1,&ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器 

  1. 使能ADC1.

ADC_Cmd(ADC1, ENABLE);     //使能指定的ADC1

  1. ADC_ResetCalibration(ADC1);  //使能复位校准

  2. while(ADC_GetResetCalibrationStatus(ADC1));  //等待复位校准结束

  3. ADC_StartCalibration(ADC1);   //开启AD校准

  4. while(ADC_GetCalibrationStatus(ADC1));    //等待校准结束

  5. 做完这一步,初始化工作就相当于完成了。接下来就是如果你需要读取哪个通道的数据,就设定相应的ADC,通道以及速率,然后就可以进行采样处理了。具体的处理函数如下:

    1. {

    2.      //设置指定ADC的规则组通道,一个序列,采样时间

    3.       ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5);   //ADC1,ADC通道,采样时间为239.5周期                          

    4.   

    5.       ADC_SoftwareStartConvCmd(ADC1, ENABLE);      //使能指定的ADC1的软件转换启动功能     

    6.        

    7.       while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

    8.  

    9.       return ADC_GetConversionValue(ADC1);   //返回最近一次ADC1规则组的转换结果

    10. }

  6. returnADC_GetConversionValue(ADC1);中的变量ADC1实际上是一个结构体指针,其中ADC1->DR,代表了一个寄存器的值,ADC1将获取的值放入到此寄存器中。

  7. ADC转换的数据并不是一个准确的值,所以需要多次采样作平均,得到的结果才是可信赖的。

STM32微控制器系列中的ADC(Analog-to-Digital Converter,模数转换器)支持多通道数据采集,它允许同时或交替测量多个模拟信号。以下是基本的工作原理和算法: 1. **初始化设置**: - 配置ADC模块:首先,你需要通过GPIO配置相应的输入通道,然后启用ADC,选择合适的扫描模式(连续、单次等),并设置分辨率(12位或14位)。 ```c ADC_HandleTypeDef hadc; hadc.Instance = ADCx; // 替换x为你使用的ADC实例 HAL_ADC_Init(&hadc); ``` 2. **通道配置**: - 定义每个通道,包括其偏移量和增益。如果你的传感器需要校准,这一步很重要。 ```c ADC_ChannelConfTypeDef sConfig; sConfig.Channel = ADC_CHANNEL_0; // 改为你所需的通道 sConfig.Rank = ADC_RANK都没用; // 如果不需要特定排序 sConfig.Offset = ...; // 校准偏移值 sConfig.OffsetType = ADC_OFFSET_NONE; HAL_ADC_ConfigChannel(&hadc, &sConfig); ``` 3. **开启转换**: - 启动ADC转换,可以选择多个通道一起转换,然后处理结果。 ```c ADC箔ValueTypeDef *pResult; HAL_ADC_Start(&hadc, &hadc.Init.ScanConvMode); // 扫描模式 pResult = HAL_ADC_GetConversionValues(&hadc); // 获取最近一次转换的结果 ``` 4. **数据处理**: - 处理获取的多通道数据,比如计算平均值、峰值检测等。 ```c float sum = 0; for (uint8_t i = 0; i < NUM_CHANNELS; ++i) { sum += pResult[i]; } float average = sum / NUM_CHANNELS; ``` 5. **定期采集**: - 循环进行上述步骤,如果需要实时数据,可以设定定时器每隔一段时间触发ADC转换。 6. **错误处理**: - 添加适当的错误检查,例如是否完成转换,以及ADC是否因故障中断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值