stm32f103ADC采集电压通过dma怎么算出小频电压最大值最小值
时间: 2023-09-16 11:10:48 浏览: 220
要算出ADC采集的小频电压的最大值和最小值,需要进行以下步骤:
1. 配置ADC,DMA和GPIO,设置采样频率、采样时间等参数。
2. 开启DMA传输,将ADC采集到的数据传输到内存中。
3. 在DMA传输完成中断中,对采集到的数据进行处理,可以使用以下方法计算最大值和最小值:
- 定义一个变量max和min,初始化为采集到的第一个数据。
- 遍历所有采集到的数据,比较每个数据与当前的max和min,更新max和min。
- 最终得到的max和min即为电压的最大值和最小值。
4. 根据采集到的数据和ADC的参考电压计算出电压值,可以使用以下公式:
- 电压值 = ADC采集到的数值 / (2^12 - 1) * 参考电压
其中,2^12 - 1是ADC的分辨率,参考电压是ADC的参考电压。
相关问题
stm32f103ADC采集电压通过dma怎么算出小频电压最大值最小值 代码
以下是一个示例代码,用于通过DMA采集STM32F103的ADC电压,并计算最大值和最小值。
首先,需要初始化ADC和DMA模块,设置ADC的采样通道和采样速率。然后,启动DMA传输,以将ADC采样值存储到缓冲区中。最后,遍历缓冲区,计算最大值和最小值。
```c
#include "stm32f10x.h"
#define ADC1_DR_Address ((u32)0x4001244C)
u16 ADC_ConvertedValue[1000];
void ADC_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//初始化ADC1和DMA1
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
//配置ADC1通道2对应的GPIOA.2引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//配置DMA1通道1
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 1000;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
//启动DMA1通道1
DMA_Cmd(DMA1_Channel1, ENABLE);
//初始化ADC1
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
//配置ADC1通道2
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_55Cycles5);
//启动ADC1的DMA传输
ADC_DMACmd(ADC1, ENABLE);
//启动ADC1
ADC_Cmd(ADC1, ENABLE);
//等待ADC1启动
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));
//启动ADC1的连续转换模式
ADC_StartConversion(ADC1);
}
int main(void)
{
u16 max_value = 0, min_value = 0xffff;
ADC_DMA_Config();
while (1)
{
//遍历ADC采样值缓冲区
for(int i=0; i<1000; i++)
{
if(ADC_ConvertedValue[i] > max_value)
{
max_value = ADC_ConvertedValue[i];
}
if(ADC_ConvertedValue[i] < min_value)
{
min_value = ADC_ConvertedValue[i];
}
}
//计算最大值和最小值的电压值
float max_voltage = (float)max_value / 4096 * 3.3;
float min_voltage = (float)min_value / 4096 * 3.3;
}
}
```
需要注意的是,ADC采样值缓冲区的长度应该足够大,以便准确地计算最大值和最小值。这里设置为1000个采样值。另外,根据实际应用情况,可能需要调整ADC采样速率和DMA传输速率。
stm32f103示波器
基于STM32F103微控制器的示波器设计可以实现测量输入信号的频率、最大值、最小值和幅值,并显示所输入的波形。该设计使用了正点原子的MiniSTM32开发板作为硬件平台,并采用了ADC、定时器、UART、外部中断、DMA、GPIO、EXTI等硬件模块。采样频率可以设置,并且可以通过串口输出所测量的内容。使用FFT算法计算频率,可以获得较高的精度。
另外,还有基于普中准端-Z300开发板开发的简单示波器,它采用了TFT_ILI9488触摸屏作为显示屏,采样信号的电压范围为0——3.3V。人机交互方面,通过TFTLCD_ILI9488触摸屏实现点击控制示波器的信号点显示大小、采样频率、信号放大幅度、采样点间隔及单次采样的信号点个数。点击屏幕会出现相关设置的选择界面,点击对应按键即可实现示波器相关参数的修改。
综上所述,基于STM32F103微控制器可以实现示波器功能,并且可以根据具体需求选择相应的硬件平台和人机交互方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [基于STM32F103的简易示波器设计](https://blog.csdn.net/weixin_48984764/article/details/127188469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [使用stm32f103ZET制作低电压示波器](https://blog.csdn.net/weixin_41780069/article/details/126449479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文