|
本帖最后由 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请求,出中断再打开就行了 |
| 可能是中断优先级问题,数没及时取走,溢出到不该放的地方。。猜的,没用过。 |
STM8S103飞线外接芯片,I2C不能得到slaveAddress应答,通讯失败。
测试标签123
IAR FOR ARM和IAR FOR STM8无法共存,
STM8L052,液晶内部电源怎么用?
STM8S105C6T6 UART2串口,能接收数据,不能发送数据
STM8S105K4 串口2 无奇偶校验,也能接收 偶校验的 数据
在STM8S的IAP使用中断和APP使用中断问题
STM8L151 SMBUS设计
STM8S103F复位异常
STM8L的LCD调试时不亮
微信公众号
手机版