打印

一配置PB0 做为ADC的PA0就读不出值?

[复制链接]
3307|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ledoem|  楼主 | 2012-4-2 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADC, dc, AD
一配置PB0 做为ADC的PA0就读不出值?不配PB时读出值正常。
沙发
logokfu| | 2012-4-2 16:15 | 只看该作者
代码呢

使用特权

评论回复
板凳
ledoem|  楼主 | 2012-4-2 16:22 | 只看该作者
初始化PB0:
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
初始化ADC PA0:
void ADC_Configuration(void)
{
  ADC_InitTypeDef ADC_InitStructure;
  DMA_InitTypeDef DMA_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;

  // 配置PA0/ADC12_IN0为模拟输入
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
   
  // 配置 DMA 通道1
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = 0x4001244C;                                // 地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_Info.ConvertedValue;        // ADC转换值存贮地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = 1;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  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);
  
  /* Enable DMA1 channel1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);
   
  /* ADC1 configuration ------------------------------------------------------*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                                        // ADC1/ADC2工作在独立模式下
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;                                                        // 启动扫描模式
  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通道数目
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channel6 configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);        //ADC通道选择及采样周期设置

  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);
  
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
     
  /* Start ADC1 Software Conversion */
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
看值:ADC_Info.ConvertedValue

使用特权

评论回复
地板
ledoem|  楼主 | 2012-4-2 16:23 | 只看该作者
先初始化PA0 读ADC_Info.ConvertedValue正常,但一配置PB0/PB1则ADC_Info.ConvertedValue自动变成0

使用特权

评论回复
5
logokfu| | 2012-4-2 16:27 | 只看该作者
能把main函数贴出来看看吗

使用特权

评论回复
6
ledoem|  楼主 | 2012-4-2 16:31 | 只看该作者
int main(void)
{
  /*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f10x_xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f10x.c file
     */     

  /* Add your application code here         */

        // 端口定义及初始化
        RCC_Configuration();

        ADC_Configuration();
                GPIO_Configuration();

}
就这几步就不对
void RCC_Configuration(void)
{   
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  if(RCC_WaitForHSEStartUp() == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }

  /* Enable GPIOC clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
           RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
                            | RCC_APB2Periph_TIM1
                            | RCC_APB2Periph_ADC1
                            | RCC_APB2Periph_AFIO
                            , ENABLE);
}

使用特权

评论回复
7
logokfu| | 2012-4-2 16:36 | 只看该作者
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
                            | RCC_APB2Periph_TIM1
                            | RCC_APB2Periph_ADC1
                            | RCC_APB2Periph_AFIO
                            , ENABLE);



把上面的那段改成下面的这个试试。

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1| RCC_APB2Periph_AFIO, ENABLE);

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);

使用特权

评论回复
8
ledoem|  楼主 | 2012-4-2 16:41 | 只看该作者
依然那样

使用特权

评论回复
9
ledoem|  楼主 | 2012-4-2 16:52 | 只看该作者
谁还有办法呀????????????

使用特权

评论回复
10
areshan| | 2012-4-3 11:58 | 只看该作者
估计是初始化参数错误了,看看PA0和PB0对应的ADC是哪个,在哪个通道上!别弄错了!

使用特权

评论回复
11
areshan| | 2012-4-3 12:02 | 只看该作者
我这边手册上对应的PA0是ADC1,通道0,PB0是ADC1通道8。都是ADC1上,我看的是STM32F103的手册!还是检查下配置参数!

使用特权

评论回复
12
zhangli019| | 2012-4-3 13:24 | 只看该作者
估计是初始化的时候出问题了,建议查看datesheet关于AD的所有寄存器,看看与ADC1相关的寄存器有否被意外更改

使用特权

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

本版积分规则

6

主题

12

帖子

0

粉丝