OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2895|回复: 2

cubemax配置多通道ADC—DMA.但是只能读到最后一个通道的值

[复制链接]

9

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-9-24
在线时间
23 小时
发表于 2016-10-24 21:21:22 | 显示全部楼层 |阅读模式
1金钱
void MX_ADC_Init(void)
{

  ADC_ChannelConfTypeDef sConfig;

    /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
    */
  hadc.Instance = ADC1;
  hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC;
  hadc.Init.Resolution = ADC_RESOLUTION12b;
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
  hadc.Init.EOCSelection = EOC_SINGLE_CONV;
  hadc.Init.LowPowerAutoWait = DISABLE;
  hadc.Init.LowPowerAutoPowerOff = DISABLE;
  hadc.Init.ContinuousConvMode = ENABLE;
  hadc.Init.DiscontinuousConvMode = DISABLE;
  hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc.Init.DMAContinuousRequests = ENABLE;
  hadc.Init.Overrun = OVR_DATA_OVERWRITTEN;
  HAL_ADC_Init(&hadc);

    /**Configure for the selected ADC regular channel to be converted.
    */
  sConfig.Channel = ADC_CHANNEL_3;
  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  HAL_ADC_ConfigChannel(&hadc, &sConfig);

}
void MX_DMA_Init(void)
{
  /* DMA controller clock enable */
  __DMA1_CLK_ENABLE();

  /* DMA interrupt init */
  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);

}
void init(void)
{
        HAL_TIM_Base_Start(&htim1);
        HAL_TIM_Base_Start_IT(&htim6);
        HAL_ADC_Start_DMA(&hadc,(uint32_t *)ADC_value,8);
}
uint32_t time;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{

        if(htim==&htim6)
        {
                if(++time>=500)
                {
                        time=0;
                        HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
                        printf("%d\r\n",ADC_value[0]);
                        printf("%d\r\n",ADC_value[1]);
                        printf("%d\r\n",ADC_value[2]);
                        printf("%d\r\n",ADC_value[3]);
                        printf("%d\r\n",ADC_value[4]);
                        printf("%d\r\n",ADC_value[5]);
                        printf("%d\r\n",ADC_value[6]);
                        printf("%d\r\n\r\n",ADC_value[7]);
                }
        }
}

void main_1(void)
{       
       
}       

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-9-24
在线时间
23 小时
 楼主| 发表于 2016-10-24 21:23:37 | 显示全部楼层
我设置ADC通道为0-3,但是读出来的数据一直都是最后一个通道的,有没有大神知道 的
回复

使用道具 举报

9

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-9-24
在线时间
23 小时
 楼主| 发表于 2016-10-24 21:54:02 | 显示全部楼层
自己解决了,F051生成的代码有BUG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 06:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表