分享

STM32_H750_ADC总结

 印度阿三17 2021-01-10

DMA中断方式

STM32cubemx的一些基础配置
注意H750引脚,很多引脚有后缀例如PC3_C(不是PC3)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ADC和DMA都不是连续模式
初始化开启DMA传输

HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC_ConvertedValue, 1);

回调函数将flag变量u置1

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{
u=1;
y  ;
}

主函数

x  ;
printf("x=%d\r\n",x);
if(x%5==0)
{HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC_ConvertedValue, 1);}
HAL_Delay(1000);
if(u==1)
{
ADC_vol = (float)(ADC_ConvertedValue*3.3/65536);
printf("y=%d\r\n",y);
u=0;
    printf("\r\n The current AD value = 0xX \r\n", ADC_ConvertedValue);
    printf("\r\n The current AD value = %f V \r\n", ADC_vol);
}

主函数每5s开启一次ADC_DMA
判断flag变量u,打印adc转换数值
DMA部分选择DMA,不要选择BDMA(网上查了下BDMA只能用在D3域)

连续转换模式,将ADC连续转换打开,DMA循环打开

HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC_ConvertedValue, 1);
  while (1)
  {
HAL_Delay(1000);
if(u==1)
{
ADC_vol = (float)(ADC_ConvertedValue*3.3/65536);
u=0;
    printf("\r\n The current AD value = 0xX \r\n", ADC_ConvertedValue);
    printf("\r\n The current AD value = %f V \r\n", ADC_vol);
}
}

ADC 和DMA一直在转换,只需要打印电压值。

中断方式

使用下面两个函数开启和关闭ADC中断

HAL_ADC_Start_IT(&ADC_Handle);
HAL_ADC_Stop_IT(&ADC_Handle);

多通道DMA的ADC转换和单通道的区别是()

HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_ConvertedValue, 4);

双重ADC单通道 交替采集
双重 ADC 交替模式,只适用于 ADC1 和 ADC2。双重 ADC 交替模式是针对同一通道的使用两个 ADC(ADC1 作为主 ADC, ADC2 作为从 ADC)交叉采集,就是在 ADC1 采样完等几个时钟周期后 ADC2 开始采样,此时 ADC1 处在转换阶段,当ADC2 采样完成再等几个时钟周期后 ADC1 就进行采样,充分利用转换阶段时间达到增快采样速度的效果

HAL_ADCEx_MultiModeStart_DMA(&ADC_Handle, (uint32_t*)&ADC_ConvertedValue, 1);//开启交替采集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用 ADC_MultiModeTypeDef 结构体变量ADC_multimode 来配置 ADC 为双重 ADC 交替模式、 3 个周期的采样延迟、数据格式选择 32 位数据格式。(DMA设置为32位)

来源:https://www./content-4-816701.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多