打印
[STM32F0]

STM32F030R8T6单片机ADC采样问题

[复制链接]
610|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onlycook|  楼主 | 2024-7-31 19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的是STM32F030R8T6单片机,在进行AD采样时,只是把例程中的IO口换了一下,ADC就不能正常工作了,是哪里出了问题,请指教
#include "adc.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define ADC1_DR_Address                0x40012440
__IO uint16_t RegularConvData_Tab;
void ADC1_DMA_Init(void)
{
  ADC_InitTypeDef     ADC_InitStruct;
  DMA_InitTypeDef     DMA_InitStruct;
        GPIO_InitTypeDef    GPIO_InitStruct;
          /* ADC1 DeInit */  
  ADC_DeInit(ADC1);

        /* Enable  GPIOA clock */
          RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  /* ADC1 Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  /* DMA1 clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);

  /* Configure PA.01  as analog input */
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
        GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStruct);                                // PC1,输入时不用设置速率


  /* DMA1 Channel1 Config */
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;
  DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)&RegularConvData_Tab;
  DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStruct.DMA_BufferSize =4;
  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_InitStruct.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel1, &DMA_InitStruct);

  /* DMA1 Channel1 enable */
  DMA_Cmd(DMA1_Channel1, ENABLE);

//   /* ADC DMA request in circular mode */
  ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);

  /* Enable ADC_DMA */
  ADC_DMACmd(ADC1, ENABLE);  

  /* Initialize ADC structure */
  ADC_StructInit(&ADC_InitStruct);

  /* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits  */
  ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStruct.ADC_ScanDirection = ADC_ScanDirection_Backward;
  ADC_Init(ADC1, &ADC_InitStruct);

//   /* Convert the ADC1 temperature sensor  with 55.5 Cycles as sampling time */
//   ADC_ChannelConfig(ADC1, ADC_Channel_TempSensor , ADC_SampleTime_55_5Cycles);  
//   ADC_TempSensorCmd(ENABLE);

  /* Convert the ADC1 Vref  with 55.5 Cycles as sampling time */
  ADC_ChannelConfig(ADC1, ADC_Channel_1  , ADC_SampleTime_55_5Cycles);
//   ADC_VrefintCmd(ENABLE);

  /* ADC Calibration */
  ADC_GetCalibrationFactor(ADC1);
   ADC_DMACmd(ADC1, ENABLE);
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);     

  /* Wait the ADCEN falg */
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));

  /* ADC1 regular Software Start Conv */
  ADC_StartOfConversion(ADC1);
}

使用特权

评论回复
沙发
laocuo1142| | 2024-8-6 10:47 | 只看该作者
检查ADC初始化代码中通道号的设置是否与您更换后的引脚相匹配。

使用特权

评论回复
板凳
flycamelaaa| | 2024-8-6 10:48 | 只看该作者
检查ADC的时钟源是否已正确配置并启用。

使用特权

评论回复
地板
powerantone| | 2024-8-6 10:49 | 只看该作者
可能是ADC初始化未完成

使用特权

评论回复
5
stormwind123| | 2024-8-6 10:50 | 只看该作者
软件bug,检查代码

使用特权

评论回复
6
probedog| | 2024-8-6 10:51 | 只看该作者
使用万用表测量引脚上的电压和电阻看看连接有问题没

使用特权

评论回复
7
classroom| | 2024-8-6 10:52 | 只看该作者
检查ADC的参考电压设置是否正确。

使用特权

评论回复
8
夜阑风雨| | 2024-8-21 19:45 | 只看该作者
你换个IO的话,那你的ADC通道改了没

使用特权

评论回复
9
淡漠安然| | 2024-8-21 20:30 | 只看该作者
IO不行,因为有些ADC是固定通道的

使用特权

评论回复
10
江河千里| | 2024-8-22 01:00 | 只看该作者
你还是用CUBEMX来配置一下ADC的吧,这个简单还不错

使用特权

评论回复
11
别乱了阵脚| | 2024-8-22 02:30 | 只看该作者
一般来说不能改端口,如果改了,ADC配置也要改

使用特权

评论回复
12
冰春彩落下| | 2024-8-22 05:00 | 只看该作者
你这得确认是不是ADC和你的端口一一对应

使用特权

评论回复
13
一秒落纱| | 2024-8-22 07:00 | 只看该作者
确保ADCGPIO的初始化顺序正确,通常先初始化GPIO,再初始化ADC

使用特权

评论回复
14
远山寻你| | 2024-8-22 08:00 | 只看该作者
STM32F030R8T6单片机上进行ADC采样时,如果只是简单地更换了IO口,ADC不能正常工作,可能是GPIO配置错误

使用特权

评论回复
15
暖了夏天蓝了海| | 2024-8-22 08:00 | 只看该作者
确保ADC通道和ADC时钟使能和采样时间看看?

使用特权

评论回复
16
远山寻你| | 2024-8-22 13:00 | 只看该作者
STM32F030R8T6单片机上进行ADC采样时,如果只是简单地更换了IO口,ADC不能正常工作,可能是GPIO配置错误

使用特权

评论回复
17
三生万物| | 2024-8-22 15:00 | 只看该作者
那你换回来端口是否可以正常使用呢?

使用特权

评论回复
18
光辉梦境| | 2024-8-22 16:00 | 只看该作者
换个IO不行的,这样的操作是得确认ADC是否适配这个IO才行啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

428

主题

1578

帖子

3

粉丝