STM32 CUbeIDE ADC采集 单通道和多通道 DMA

STM32 CUbeIDE ADC采集单通道和多通道 DMA 1、ADC采集单通道1.1 、创建工程选择ADC1.2、重定向printf 可以输出小数1.3、开启 ADC DMA2、ADC采集2通道
  STM32拥有 1~3个 ADC STM32F101/102系列只有 1个 ADC)),这些 ADC可以独立使用,也可以使用双重模式(提高采样率)。 STM32的 ADC是 12位逐次逼近型的模拟数字转换器。它有 18个通道,可测量 16个外部和 2个内部信号源。各通道的 A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在 16位数据寄存器中。
  STM32F103系列最少都拥有 2个 ADC, STM32F103RCT包含有 3个ADC。STM32的 ADC最大的转换速率为 1Mhz,也就是转换时间为 1us(在ADCCLK=14M,采样周期为 1.5个 ADC时钟下得到),不要让 ADC的时钟超过 14M,否则将导致结果准确度下降。

1、ADC采集单通道
1.1 、创建工程选择ADC

开始创建工程文件,选择对应的芯片,我自己使用的是STM32F103RC
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
打开调试,可以下载代码
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
开启外部时钟
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
配置时钟树
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
开启ADC选择 ,选择了PA1
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
选择连续转换模式(Continuous Conversion Mode),并调整采样时间。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
开启DMA转换,选择循环模式,半字。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

为了方便调试,开启串口1,USART1,选择异步通信。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
为了让生成的文件都是单独分开的,这样看着方便,选择如下所示
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
生成代码,在此之前,还有重要的一步,编码问题,STM32 CUbeIDE 默认UTF-8编码,会出现中文字符乱码问题,所以我选择了GBK编码,防止乱码。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

1.2、重定向printf 可以输出小数

我的重定向和你看到一般重定向可能不一样,但是效果是一样的。特别注意的一点就是,在STM32 CUbeIDE中,要输出小数还要选择勾选对应的选项。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
定义数组保存要发送的数据,和adc值保存数组,定义为uint16_t 是因为,在开启ADC的时候,选择了半字。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "stdint.h"
#include <string.h> // correct header
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
#define printf(...) HAL_UART_Transmit((UART_HandleTypeDef *)&huart1, (uint8_t *)u_buf,\
sprintf((char*)u_buf,__VA_ARGS__), 0xFFFF);
/* USER CODE END PTD */

定义的发送数据数组,和adc值保存变量

/* USER CODE BEGIN PV */
uint8_t u_buf[64];//定义数据存放
uint16_t adc_buf[2];
/* USER CODE END PV */

生成hex文件,STM32 CUbeIDE默认不生成hex文件,需要勾选对应项。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

1.3、开启 ADC DMA

在HAL 库中使用ADC 、定时器等,都是需要自己先开启,在使用的。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

HAL_ADC_Start_DMA((ADC_HandleTypeDef*)&hadc1, (uint32_t*)adc_buf, (uint32_t)1); //通道数1

hadc1 :定义的ADC结构体变量,在adc.c中可以看到
adc_buf :前面定义的变量
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
串口输出ADC转换的值
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

while (1)
{
printf("ADC = %d\r\n",adc_buf[0]);
printf("voltage: %f\r\n,(float)adc_buf[0]/4096*3.3");
HAL_Delay(1000);
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}

2、ADC采集2通道

  既然有了1路的ADC采集,那么多路的ADC其实就是在1路ADC上面改改。现在生成2路ADC。选择了PA1 PA2
STM32 CUbeIDE ADC采集 单通道和多通道 DMA
  采样时间可以不修改,保持默认也是可以的,但是为了保证采样周期完整,周期修改大一点。

STM32 CUbeIDE ADC采集 单通道和多通道 DMA
生成代码,开启ADC 。
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

HAL_ADC_Start_DMA((ADC_HandleTypeDef*)&hadc1, (uint32_t*)adc_buf,(uint32_t)2); //2路

输出采样数据
STM32 CUbeIDE ADC采集 单通道和多通道 DMA

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

STM32 CUbeIDE ADC采集 单通道和多通道 DMA

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » STM32 CUbeIDE ADC采集 单通道和多通道 DMA
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏