新人求助使用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
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。
请大神给予解答,不胜感激