CUBEMAX.adc模拟灰度(adc多通道传输dma)

ADC

信号线接地,电压为0:

在这里插入图片描述

信号线接3.3v,如图:
在这里插入图片描述

 uint16_t ADC_temp1=0;
   float ADC_temp2=0;
    float ADC_temp3=0;
int main(void)
{

  HAL_Init();

  SystemClock_Config();


  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1);

  while (1)
  {
   HAL_ADC_Start(&hadc1);//开始转换
   HAL_ADC_PollForConversion(&hadc1,10);//等待转换结束
   if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))//检查是否转换结束
   {
   ADC_temp1=HAL_ADC_GetValue(&hadc1);//12位就是0-4096
   ADC_temp2=(float)ADC_temp1*3.3/256;//3.3是基准电压,这一步是吧模拟量转换成数字量
	ADC_temp3=(float)ADC_temp1*3.3/4096;//3.3是基准电压,这一步是吧模拟量转换成数字量
   }
  }

}

多通道传输(dma)

adc的通道必须是连续的,否则接收不到数值
比如:通道1 2 3 4 5 6 7 8 9 对
通道 1 2 3 4 5 8 9 错误

在这里插入图片描述
翻译:在这里插入图片描述

DMA初始化要改到adc初始化之前
否则无法接受到数据
任何外设使用dma传输都需要将dma初始化写在前面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

	uint32_t ADC1_buff[8];
	float ADC1_value[8];
	int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();  
	MX_DMA_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();
  MX_TIM8_Init();
  MX_TIM7_Init();
  MX_USART2_UART_Init();

	HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC1_buff,8);
car_stop();

  while (1)
  {

		for(int i=0;i<8;i++)

		ADC1_value[i]=(float)(ADC1_buff[i]*3300/4096);

}

注意:ADC_DMAConvCplt为dma传输完成回调函数,但是用户无法使用该函数,在这个韩淑下,函数进入了HAL_ADC_ConvCpltCallback函数,也就是adc传输完成函数

在这里插入图片描述
再去hal——adc.c文件下发现这边有个弱定义函数,弱定义即用户使用函数

在这里插入图片描述
于是在main下调用,处理数据
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ADC DMA传输多通道采集程序是用于实现多通道模拟信号采集和传输的程序。ADC代表模数转换器,用于将模拟信号转换为数字信号。DMA代表直接存储器访问,是一种数据传输方式,用于高效地将数据从一个地方传输到另一个地方,而不需要CPU的干预。 在多通道采集程序中,通常会使用多个ADC模块,每个模块对应一个通道。每个通道采集到的模拟信号会经过相应的ADC模块进行模数转换,转换后的数字信号会通过DMA传输到内存中进行存储或进一步处理。 程序的运行过程一般包括以下几个步骤: 1. 配置并启动ADC模块:设置采样频率、采样精度和通道数等参数,并启动ADC模块开始采样。 2. 配置DMA:设置DMA通道、数据传输方向和缓冲区等参数,并启动DMA传输。 3. 等待DMA传输完成中断:等待DMA传输完成中断的触发,表示数据已经传输完毕。 4. 处理采集到的数据:在DMA传输完成中断中,可以读取内存中的数据进行进一步处理,例如计算平均值或进行频谱分析等。 5. 重复以上步骤进行连续采集:根据需求,可以设置程序的循环次数或条件,以实现连续的多通道采集。 ADC DMA传输多通道采集程序的优势在于,通过DMA传输,可以减少CPU的使用率,提高数据传输的效率;同时,多通道采集可以同时获取多个通道的数据,方便进行多通道信号处理和分析。这种程序在很多领域都有广泛的应用,例如声音处理、图像采集和实时控制等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值