STM32 F446RET6多通道ADC采集

本文详细介绍了在STM32CUBEIDE中利用DMA进行ADC数据采集的两种方式,包括连续数据搬运和单次点击执行。阐述了如何通过配置定时器溢出触发ADC采集,以及如何设置多通道数据采集,确保数据完整性和避免污染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次配置是根据STM32CUBEIDE去开发的

  • DMA搬运数据规则

使用DMA搬运数据的时候我们会先建立一个数据缓冲区,将DMA采集的数据存放到数据缓冲区内。采集到的ADC的值根据通道的顺序一个一个的将数据存放进去。

  • 两种ADC数据采集方式
    ①连续将数据搬运。
    直接开启DMA将ADC采集的数据存放进缓冲区,此种方法是连续数据搬运进缓冲区,可能造成的影响是数据容易被污染,也就是当数据没有完全处理时,DMA没有关闭,原来存放在缓冲区的数据被后面的数据覆盖。
    ②单次点击执行
    配置定时器的溢出时间,当定时器时间到了就触发ADC采集数据,ADC根据通道的配置,将每个通道采集的值依照先后顺序由DMA搬运至缓冲区。当ADC采集的数据满时,产生转换完成中断,等待下一次触发信号收集ADC采集的数据。

ACD内部配置
在这里插入图片描述

  • 将连续扫描通道打开(如果选择使用使用手动打开,就不需要开启)
    在这里插入图片描述

  • 选择转换的通道数量(我有7个通道)
    在这里插入图片描述

  • 选择通道转换的优先级以及采样频率
    在这里插入图片描述

接下来我们需要打开DMA,用DMA来搬运这些采集的数据。

多通道我们必须选择用ADC来采集,配置如下:
在这里插入图片描述

/* USER CODE BEGIN 2 */

  uint32_t VR[7] ;  //存储ADC结果的变量,必须为32位无符号型
while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
HAL_ADC_Start_DMA(&hadc1, VR, 7); // Start adc in dma for multichaannel
  }
  /* USER CODE END 2 */




### STM32F446RET6 MCU 的基本信息 STM32F446RET6 是一款基于 ARM Cortex-M4 内核的高性能微控制器 (MCU),其主要特点包括但不限于以下几点: - **核心架构**: 基于 ARM Cortex-M4 内核,支持浮点运算单元 (FPU)[^1]。 - **主频**: 最高运行频率可达 180 MHz[^1]。 - **存储容量**: - Flash 存储器大小为 512 KB。 - SRAM 容量为 96 KB。 - **外设功能**: - 集成了丰富的模拟和数字外设,例如 ADC、DAC、USART、SPI 和 I²C 等。 - 支持 USB OTG FS/HS 控制器。 - 提供多个定时器模块,包括高级控制定时器、通用定时器和低功耗定时器。 #### 数据手册获取方式 数据手册通常可以从官方文档库下载。访问 STMicroelectronics 官方网站并搜索型号 “STM32F446RET6”,即可找到对应的数据手册和技术参考资料[^3]。 --- ### 引脚定义与功能描述 STM32F446RET6 使用 LQFP100 封装形式,共有 100 个引脚。以下是部分常见引脚的功能说明(具体需查阅官方数据手册): | 引脚编号 | 名称 | 功能描述 | |----------|------------|------------------------------------------------------------------------| | PA0 | GPIO/TIM2_CH1 | 可作为普通 IO 或 TIM2 定时器通道 1 输入/输出 | | PB6 | USART1_TX | UART 发送端口 | | PC13 | USER_BUTTON | 用户按键输入,默认下拉 | | PF0 | DAC_OUT1 | 数模转换器输出 1 | 完整的引脚分配表可以在数据手册中的“Pin Definitions and Mechanical Information”章节查找。 --- ### 示例程序:点亮 LED 下面是一个简单的例程,用于通过 HAL 库配置 STM32F446RET6 上的一个 GPIO 输出来驱动外部 LED。 ```c #include "stm32f4xx_hal.h" // 初始化 GPIO void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用 GPIOA 时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置 PA5 为推挽输出模式 GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } int main(void) { HAL_Init(); // 初始化 HAL 库 MX_GPIO_Init(); // 调用 GPIO 初始化函数 while (1) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 切换 PA5 状态 HAL_Delay(500); // 延迟 500ms } } ``` 上述代码实现了对 PA5 引脚的操作,使其周期性切换高低电平状态以实现 LED 的闪烁效果。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值