
本帖最后由 q304069320 于 2016-8-25 09:35 编辑 新人求助使用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。 请大神给予解答,不胜感激 |
请问楼主解决了吗? |
不了解,帮顶 |
在dma进入中断时先关闭ADC请求,出中断再打开就行了 |
可能是中断优先级问题,数没及时取走,溢出到不该放的地方。。猜的,没用过。 |
STM8S003无法检测到引脚电平
STM8 @svlreg 问题
STM8AF62XX+L99PM62GXP LIN通讯的电路原理图有吗?官网提供了一套软件,没找到对应的原理图,请大家指教一下
求一个STM8S207例程
初次接触STM8,请问在STVD中,为什么这个Struct会报错
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?