当前位置: 首页 > news >正文

【HAL库】STM32F105VCTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现

相关代码编写

配置好后点击生成代码,在生成代码的adc.c文件中的初始化函数MX_ADC1_Init中添加如下代码:

	HAL_ADCEx_Calibration_Start(&hadc1);                         /* 校准ADC */HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Value,ADC_DMA_BUF_SIZE);

在stm32f1xx_it.c文件的DMA中断服务函数DMA1_Channel1_IRQHandler中添加如下代码 :

	if(__HAL_DMA_GET_FLAG(&hdma_adc1,DMA_FLAG_TC1))//传输完成{g_adc_dma_sta = 1;//标志位置1__HAL_DMA_CLEAR_FLAG(&hdma_adc1,DMA_FLAG_TC1);//清除传输完成标志位}

ADC的采集代码如下所示:

/* Includes ------------------------------------------------------------------*/
#include "adc_driver.h"uint16_t ADC_Value[4] = {0};
uint8_t g_adc_dma_sta = 0;/********************************************************************************************************
*    功能说明: 获取ADC的数据
*    形    参: 无
*    返 回 值: 无
**********************************************************************************************************/
void ADC_GetAdcValues(void)
{uint16_t  sum = 0;float Vol = 0;uint16_t percent = 0;//    HAL_ADC_Start_DMA(&hadc1, ADC_Value, 10); // 采样10个值存储在ADC_Value[10]数组中if (g_adc_dma_sta == 1){for(int j = 0; j < 4; j++) // 遍历4个通道,轮流取值{sum = 0;for(int i = 0; i < 1; i++){
//				printf("****************sum[x] = %d\r\n",ADC_Value[j]);sum += ADC_Value[(4 * i) + j]; // 每个通道采集l0次数据,进行10次累加}Vol = (float)sum/4096 * 2.5;percent = (float)sum/4096 * 100;//			sum = sum / 10; // 取平均值
//			printf("sum[%d] = %d\r\n",j,sum);
//			printf("Vol[%d] = %.2f\r\n",j,Vol);if(j == 0){Can_data.Txbuf[2] = percent;printf("*****大制动区= %d %%\r\n",percent);}if(j == 1){Can_data.Txbuf[0] = percent;printf("制动区= %d %%\r\n",percent);}}
//		printf("sum[x] = %d\r\n",sum);g_adc_dma_sta = 0;                              // 清除DMA采集完成标志位
//		HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_Value, 4); // 开启下一次ADC和DMA采集
//		HAL_ADC_Start(&hadc1);//}
}

问题总结

使能连续转换模式  hadc1.Init.ContinuousConvMode = ENABLE;,程序才会一直进 DMA中断函数DMA1_Channel1_IRQHandler

 

ADC校准可以使ADC采集值和 Vref参考值(基准电压)接近。但是f4系列不支持。

    HAL_ADCEx_Calibration_Start(&hadc1);                         /* 校准ADC */

http://www.lryc.cn/news/483209.html

相关文章:

  • [SaaS] 数禾科技 AIGC生成营销素材
  • vue3中查找字典列表中某个元素的值对应的列表索引值
  • 爱普生机器人EPSON RC
  • Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)
  • ❤React-JSX语法认识和使用
  • 51单片机应用开发(进阶)---定时器应用(电子时钟)
  • JavaScript中的对象-栈内存和堆内存以及this指向的两种情况(后续会出进阶)
  • shell脚本使用curl上传FTP
  • 【漏洞分析】Fastjson最新版本RCE漏洞
  • 【项目开发 | 跨域认证】JSON Web Token(JWT)
  • 杨中科 .Net Core 笔记 DI 依赖注入2
  • 微信版产品目录如何制作?
  • 使用HTML、CSS和JavaScript创建动态圣诞树
  • 机器学习-35-提取时间序列信号的特征
  • 【软件测试】设计测试用例的万能公式
  • 【MySQL 保姆级教学】事务的自动提交和手动提交(重点)--上(13)
  • CUDA 核心与科学计算 :NVIDIA 计算核心在计算服务器的价值
  • 架构师之路-学渣到学霸历程-58
  • qq相册为啥越来越糊
  • <有毒?!> 诺顿检测:这篇 CSDN 文章有病毒
  • matlab实现主成分分析方法图像压缩和传输重建
  • 18.UE5怪物视野、AI感知、攻击范围、散弹技能
  • 【 ElementUI 组件Steps 步骤条使用新手详细教程】
  • MQTT从入门到精通之 MQTT 客户端编程
  • 数据结构-集合
  • 前端 JS面向对象 原型 prototype
  • Java中的不可变集合:性能与安全并重的最佳实践
  • RandomWords随机生成单词
  • 从零开始使用Intel的AIPC使用xpu加速comfyui
  • PyQt入门指南五十二 版本控制与协作开发