APP手机端电子商务网站建设百度百科官网首页
目录
概述
1 STM32Cube配置项目
1.1 基本参数配置
1.1.1 ADC1参数配置
1.1.2 ADC2参数配置
1.2 项目软件架构
2 功能实现
2.1 ADC转换初始化
2.2 ADC数据组包
3 测试函数
3.1 Vofa数据接口
3.2 输入数据
4 测试
4.1 ADC1 通道测试
4.2 ADC2 通道测试
概述
本文主要介绍STM32G4系列MCU双ADC多通道数据转换的应用的方法,笔者通过STM32Cube工具配置多路ADC,并使用DAC模块产生1路模拟信号,验证ADC模块数据转换的功能。
1 STM32Cube配置项目
1.1 基本参数配置
1.1.1 ADC1参数配置
1)配置ADC1的端口
2)配置ADC2的端口
3)配置ADC的通道参数
step - 1 : 使能和选择相关的通道
step - 2 :选择如下配置
step-3: 配置数据模式和通道号信息
step-4: 使能DMA通道信息
1.1.2 ADC2参数配置
ADC2的参数配置方法和ADC1相似,这里不再做重复介绍。
1.2 项目软件架构
完成1.1小节的参数配置之后,就可以生成项目代码,其具体架构如下:
2 功能实现
2.1 ADC转换初始化
由于系统采用DMA的方式实现ADC转换功能,所以直接从buff中读取数据即可。初始化代码如下:
代码第32~33行: 定义两个buff,用于存放ADC转换数据的结果
代码38行:初始化ADC1模块
代码39行:启动ADC1的DMA模式ADC数据转换功能
代码41行:初始化ADC2模块
代码42行:启动ADC2的DMA模式ADC数据转换功能
源代码如下:
uint16_t adc1_rawlist[3];
uint16_t adc2_rawlist[5];void Sample_Init(void)
{HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1_rawlist, 2);HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2_rawlist, 4);
}
2.2 ADC数据组包
编写一个函数,将ADC1转换的数据和ADC2转换的数据转行成一个数据包,方便调用:
代码83~90行:实现数据组包功能
代码92行:使用vofa将数据包显示出来
3 测试函数
3.1 Vofa数据接口
代码21行:定义数据长度
代码22行:定义发送数据端口
代码25~29行:定义vofa数据包的结构
代码40~47行:定义发送数据函数
源代码如下:
/* USER CODE BEGIN Header */
/********************************************************************************* File Name : vofaDebug.c* Description : debug source code interface******************************************************************************* @attention*
* COPYRIGHT: Copyright (c) 2024 mingfei.tang* CREATED BY: ming fei.tang
* DATE: JUL 05th, 2024*******************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "vofaDebug.h"
#include "usart.h"#define LEN 6
#define DEBUG_UART_OBJ huart2/* Private variables ---------------------------------------------------------*/
typedef struct Frame
{float fdata[LEN];unsigned char tail[4];
} Frame_t;Frame_t Frame_Buff =
{.tail[0] = 0x00,.tail[1] = 0x00,.tail[2] = 0x80,.tail[3] = 0x7f,
};/* Public user code ---------------------------------------------------------*/
void Debug_PrintJustFloat(const uint16_t *pData, uint16_t Size)
{for (uint16_t i = 0; i < Size; i++){Frame_Buff.fdata[i] = pData[i];}HAL_UART_Transmit_DMA(&DEBUG_UART_OBJ, (uint8_t *)&Frame_Buff, sizeof(Frame_Buff));
}/* Private user code for printf log ------------------------------------------*/int fputc(int ch, FILE *f)
{HAL_UART_Transmit_DMA(&DEBUG_UART_OBJ, (uint8_t *)&ch, 1);return (ch);
}int fgetc(FILE *f)
{int ch;HAL_UART_Receive_DMA(&DEBUG_UART_OBJ, (uint8_t *)&ch, 1);return (ch);
}void Debug_fresh( void )
{
// int ch;// HAL_UART_Receive_DMA(&DEBUG_UART_OBJ, (uint8_t *)&ch, 1);
}/* End of this file */
3.2 输入数据
使用STM32G4的DAC2通道产生一路模式信号,用于作为ADC的输入数据。
1)选择端口和通道
2)配置参数
3)编写输出函数
代码52行:启动DAC数据转换功能
代码53行:初始化端口电平
4)实现正弦波信号函数
源代码文件如下:
/* USER CODE BEGIN Header */
/********************************************************************************* File Name : waveLib.c* Description : main task ******************************************************************************* @attention*
* COPYRIGHT: Copyright (c) 2024 tangmingfei2013@126.com* CREATED BY: mingfei.tang
* DATE: JUL 05th, 2024*******************************************************************************/
/* USER CODE END Header */
#include "waveLib.h"
#include "dac.h"
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>#define PI 3.14159void DAC_SetConvert( uint32_t value)
{HAL_DAC_SetValue( &hdac2, DAC_CHANNEL_1, DAC_ALIGN_12B_R,value );
}float dac_triangle_wave( void )
{static double t = 0;float angle;if( t >= 1 ){t = 0;}t += 0.001;angle = t*800;return angle;
}float asin_wave( void )
{static double t = -1;float value, angle;if( t >= 1 ){t = -1;}value = asin( t ); angle = (180*value)/3.1415926;t += 0.001;return angle;
}float sin_wave( void )
{float value, angle;static double t = -1;angle = 2*PI*t;value = 1000*sin( angle )+1500; t += 0.001;if( t >= 1 ){t = -1;}return value;
}/* End of this file */
4 测试
4.1 ADC1 通道测试
将DAC的数据输出端口连接到ADC1 - PC0端口上,测试输出数据的波形
DAC的波形数据:
ADC`-PC0接口转换的数据波形:
4.2 ADC2 通道测试
将DAC的数据输出端口连接到ADC2 - PC2端口上,测试输出数据的波形
原始数据波形和转换后的数据波形叠加: