STM32 HAL库 CUBEMX配置 ADC采集

您所在的位置:网站首页 thinkpad300s配置 STM32 HAL库 CUBEMX配置 ADC采集

STM32 HAL库 CUBEMX配置 ADC采集

2024-07-16 13:19| 来源: 网络整理| 查看: 265

文章目录 STM32 HAL库 CUBEMX配置 ADC采集软硬件型号1.单通道不定时任意时刻采集信号CUBEMX配置代码添加 2.单通道ADC采集+DMA传输CUBEMX添加配置代码添加 3.定时器触发转换(1khz)+DMA传输CUBEMX配置代码添加采集频率满足条件

STM32 HAL库 CUBEMX配置 ADC采集 软硬件型号

正点原子阿波罗STM32F428IG开发板 STM32CUBEMX+KEIL5编程 STM32F4 1.24.2 库版本

1.单通道不定时任意时刻采集信号 CUBEMX配置

1.打开RCC

在这里插入图片描述 2.配置时钟树

在这里插入图片描述 3.选择ADC通道

在这里插入图片描述 4.使能持续转换

在这里插入图片描述 5.开启中断

简单说一下这个配置,

Clock Prescaler 时钟预分频 为保证采集精度最好使分频后时钟在36Mhz以下Resolution 分辨率 有8位,10位,12位的,这里选择最高的就行Date Alignment 数据对齐方式 我们ADC转换后的数据存在寄存器中,12位的,这12位是左对齐右对齐都行Scan Conversion Mode 扫描模式,当我们使用多通道采集的时候需要使能他去轮询读取每个通道值Continous Conversion Mode 持续转换模式,一般我们都是连续转换,这个我们需要使能他Discontinous Conversion Mode 与上边序号5相反DMA Continous Requests 不经过cpu去提取转换的数据,直接交给DMA操作。具体的使用在下边会讲解 更详细的讲解可以看下边这个博客(转载,侵权即删) ST CubeMX翻译 在这里插入图片描述 6.开启USART

在这里插入图片描述 7.选择KEIL5模式

在这里插入图片描述 8.生成独立文件

在这里插入图片描述 9.生成代码

在这里插入图片描述

代码添加

10.代码中串口重定向

//usart.h 添加 #include "stdio.h" //usart.c 添加 int fputc(int ch, FILE *f) //轮询方式,超时机制,输出到串口函数重定义 { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, sizeof(ch), 0xFFFF); return ch; } /*HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)*/ int fgetc(FILE *f) //轮询方式,超时机制,接收到串口函数重定义 { uint8_t ch; HAL_UART_Receive(&huart1, (uint8_t *)&ch, sizeof(ch), 0xFFFF); return ch; }

11.ADC采集准备

// adc.h uint16_t GET_ADC(ADC_HandleTypeDef hadc,uint32_t ch); uint16_t GET_ADC_AVERAGE(ADC_HandleTypeDef hadc,uint32_t ch,uint8_t times); //adc.c //获得ADC值 //ch: 通道值 0~16,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16 //返回值:转换结果 uint16_t GET_ADC(ADC_HandleTypeDef hadc,uint32_t ch) { ADC_ChannelConfTypeDef ADC_ChanConf; ADC_ChanConf.Channel=ch; //通道 ADC_ChanConf.Rank=1; //第1个序列,序列1 ADC_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; //采样时间 ADC_ChanConf.Offset=0; HAL_ADC_ConfigChannel(&hadc,&ADC_ChanConf); //通道配置 HAL_ADC_Start(&hadc); //开启ADC HAL_ADC_PollForConversion(&hadc,10); //轮询转换 return (uint16_t)HAL_ADC_GetValue(&hadc); //返回最近一次ADC1规则组的转换结果 } //获取指定通道的转换值,取times次,然后平均 //times:获取次数 //返回值:通道ch的times次转换结果平均值 uint16_t GET_ADC_AVERAGE(ADC_HandleTypeDef hadc,uint32_t ch,uint8_t times) { uint32_t temp_val=0; uint8_t t; for(t=0;tfh/2, 否则会出现频谱混叠的现象,具体具体可看人家的博客: 奈奎斯特采样定理 (转载,侵权即删)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3