STM AD(也称为STM32 ADC)是一种用于STM32微控制器的模拟数字转换器。下面是一个简单的STM AD写法示例:

  1. 首先,需要在STM32的初始化代码中启用ADC模块:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // 启用ADC1时钟
  1. 然后,需要设置ADC的参数,如采样时间、分辨率、通道等:
ADC_InitTypeDef ADC_InitStruct;
ADC_CommonInitTypeDef ADC_CommonInitStruct;

ADC_CommonInitStruct.ADC_Mode = ADC_Mode_Independent; // 独立模式
ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div2; // 分频系数为2
ADC_CommonInit(&ADC_CommonInitStruct);

ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b; // 分辨率为12位
ADC_InitStruct.ADC_ScanConvMode = DISABLE; // 关闭扫描模式
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; // 关闭连续模式
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; // 触发方式为TIM1的CC1
ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; // 触发极性为上升沿
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 数据对齐方式为右对齐
ADC_InitStruct.ADC_NbrOfConversion = 1; // 转换通道数为1
ADC_Init(ADC1, &ADC_InitStruct);

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); // 配置通道0
  1. 接下来,需要启用ADC的DMA模式,并设置DMA参数:
DMA_InitTypeDef DMA_InitStruct;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // 启用DMA1时钟

DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)adc_values; // DMA传输的目标地址为adc_values数组
DMA_InitStruct.DMA_BufferSize = 1; // DMA传输的数据长度为1
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC; // DMA传输方向为从外设读取数据
DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR)); // DMA传输的外设地址为ADC1_DR的地址
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 关闭外设地址自增
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; // 开启目标地址自增
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 外设数据长度为半字
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; // 目标数据长度为半字
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; // 循环模式
DMA_InitStruct.DMA_Priority = DMA_Priority_High; // DMA传输优先级为高
DMA_Init(DMA1_Channel1, &DMA_InitStruct);

DMA_Cmd(DMA1_Channel1, ENABLE); // 启用DMA1通道1
  1. 最后,需要启动ADC转换,并启用DMA传输:
ADC_Cmd(ADC1, ENABLE); // 启用ADC1
ADC_DMACmd(ADC1, ENABLE); // 启用ADC1的DMA模式
ADC_SoftwareStartConv(ADC1); // 启动ADC1的转换

这样,就可以使用STM AD进行模拟信号的采集和转换了。在转换完成后,可以通过DMA传输将转换结果存储到指定的内存地址中。

用STM AD写法

原文地址: https://www.cveoy.top/t/topic/zNL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录