求助,关于STM8L051F3芯片,多路ADC采集DMA传输遇到的问题

2019-07-19 21:07发布

新人求助使用STM8L051F3主控芯片的ADC循环采样DMA传输功能,遇到DMA传输位数变动,采样值交换的问题。
还不能确定是ADC触发DMA的错误还是DMA传输的错误,求大神帮助。
以下是主要代码:
主函数:
void main(void)
{

//  GPIO_Init(LED_PORT,LED_PINS,GPIO_Mode_Out_PP_Low_Fast);

  GPIO_Init(GPIOC,GPIO_Pin_0,GPIO_Mode_Out_PP_Low_Fast);
  GPIO_Init(GPIOC,GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Fast);
  GPIO_Init(GPIOB,GPIO_Pin_0,GPIO_Mode_Out_PP_Low_Fast);


  Tim2_Init();//向量21 200MS定时处理治疗进程和1S定时
  Tim3_Init();//PWM

  DMA_InitConfig();

  ADC_InitConfig();//ADC8位分辨率

  enableInterrupts();

  GPIO_SetBits(GPIOA,GPIO_Pin_1);

while (1)
{

}


}
DMA初始化配置
void DMA_InitConfig(void)
{
  CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);

  SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);

//*******************************************************************

  DMA_Init( DMA1_Channel0,
            BUFFER_ADDRESS,
            ADC1_DR_ADDRESS,
            2,
            DMA_DIR_PeripheralToMemory,
            DMA_Mode_Circular,
            DMA_MemoryIncMode_Inc,
            DMA_Priority_VeryHigh,
            DMA_MemoryDataSize_HalfWord);

   /* DMA Channel0 enable */
  DMA_Cmd(DMA1_Channel0, ENABLE);

  /* Enable DMA1 channel0 Transfer complete interrupt */
//  DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);

  /* DMA enable */
  DMA_GlobalCmd(ENABLE);



}


宏定义
#define ADC1_DR_ADDRESS ((uint16_t)0x5344)
#define BUFFER_SIZE     ((uint8_t)0x02)
#define BUFFER_ADDRESS  ((uint32_t)DMAResult)


ADC初始化配置
void ADC_InitConfig(void)
{
  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);

  ADC_Init(ADC1,ADC_ConversionMode_Continuous,ADC_Resolution_12Bit,ADC_Prescaler_2);

  ADC_SamplingTimeConfig(ADC1,ADC_Group_SlowChannels,ADC_SamplingTime_48Cycles);

  ADC_Cmd(ADC1,ENABLE);

  GPIO_Init(GPIOB,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT);//按键1
  GPIO_Init(GPIOB,GPIO_Pin_6,GPIO_Mode_In_FL_No_IT);//按键2

  ADC_ChannelCmd(ADC1,ADC_Channel_12,ENABLE);//PB6
  ADC_ChannelCmd(ADC1,ADC_Channel_13,ENABLE);//PB5

// ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);

  ADC_DMACmd(ADC1,ENABLE);

  ADC_SoftwareStartConv(ADC1);

//  ADC_DMARequestAfterLastTransferCmd();



}

运行后查看寄存器与存储数组







可以看到出现两位通道数值交换问题,为什么呢?
数据位数寄存器C0NDTR并不一直为2.但是配置的BUFFERSIZE是2。
请大神给予解答,不胜感激

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
304069320
1楼-- · 2019-07-20 01:28
一天了仍然没有解决,看寄存器是会出现End of conversion中断和OVERRUN中断的,求助求助
正点原子
2楼-- · 2019-07-20 04:33
 精彩回答 2  元偷偷看……
304069320
3楼-- · 2019-07-20 08:24
实在找不到DMA的问题出在哪,换了单通道轮询方式了

一周热门 更多>