OpenEdv-开源电子网

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

请教:STM32F407开启DMA时钟LCD白屏

[复制链接]

6

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-10-27
在线时间
28 小时
发表于 2017-4-10 19:28:15 | 显示全部楼层 |阅读模式
你好:我碰到了个问题,一个ADC程序LCD显示,LCD是FSMC驱动,但是我要用DMA  ADC时,只要一开启DMA时钟,LCD显示就变成了白屏,关了DMA时钟就显示正常了,请问下这是怎么回事呢,我调试时步调,开启DMA时钟时,一进入到FSMC就不正常。关闭DMA时钟就不正常,好像死机。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2018-4-22
在线时间
39 小时
发表于 2018-9-19 17:21:06 | 显示全部楼层
我也遇到同样的问题,        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);   注释掉,LCD正常显示,不注释,LCD就白屏。[mw_shl_code=c,true]

void ADC12_Init(void)
{
        ADC_InitTypeDef ADC_InitStructure;
        DMA_InitTypeDef    DMA_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);                              //??DMA??
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_ADC2,ENABLE);   //??ADC??        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //??GPIO??

         

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        

        ADC_DeInit(ADC1);                 //??ADC1
        RCC_ADCCLKConfig(RCC_PCLK2_Div6); //??ADC??,72/6=12MHz

  //-----------ADC1????----------------------------------
        ADC_InitStructure.ADC_Mode=ADC_Mode_RegSimult;      //ADC??????
        ADC_InitStructure.ADC_ScanConvMode=ENABLE;          //?????
        ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;    //??????
        ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//??????????????
        ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC?????
        ADC_InitStructure.ADC_NbrOfChannel=2;               //?????????ADC????4
        ADC_Init(ADC1,&ADC_InitStructure);                  //???ADC1

        ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_71Cycles5);  //ADC_Test1??        
        ADC_RegularChannelConfig(ADC1,ADC_Channel_3, 2,ADC_SampleTime_71Cycles5);  //ADC_Test2??               
        
  //-----------ADC2????----------------------------------
        ADC_InitStructure.ADC_Mode=ADC_Mode_RegSimult;      //ADC??????
        ADC_InitStructure.ADC_ScanConvMode=ENABLE;          //?????
        ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;    //??????
        ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//??????????????
        ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC?????
        ADC_InitStructure.ADC_NbrOfChannel=2;               //?????????ADC????4
        ADC_Init(ADC2,&ADC_InitStructure);                  //???ADC1

        ADC_RegularChannelConfig(ADC2,ADC_Channel_2 ,1,ADC_SampleTime_71Cycles5);  //FreeBack1??        
        ADC_RegularChannelConfig(ADC2,ADC_Channel_4 , 2,ADC_SampleTime_71Cycles5);  //FreeBack2??        

        ADC_ExternalTrigConvCmd(ADC2, ENABLE);                                     //??ADC2??????
        
  //------------DMA????----------------------------------
        DMA_DeInit(DMA1_Channel1);                                 //?DMA???x?????????
        DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA?????
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)AD_Value;    //DMA?????
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;         //??????,?????
        DMA_InitStructure.DMA_BufferSize = M*N;                      //DMA???DMA?????
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;             //?????????
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                      //?????????
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;      //?????32?
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;              //?????32?
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;          //?????????
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;     //DMA?? x???????
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;            //DMA??x????????????
        DMA_Init(DMA1_Channel1, &DMA_InitStructure);            //??DMA_InitStruct?????????DMA???USART1_Tx_DMA_Channel???????
        
        DMA_Cmd(DMA1_Channel1,ENABLE);                          //??DMA??
        
        ADC_Cmd(ADC1,ENABLE);                 //??ADC1
        ADC_Cmd(ADC2,ENABLE);                 //??ADC2
        
        ADC_ResetCalibration(ADC1);                 //??????
        while(ADC_GetResetCalibrationStatus(ADC1)); //????????
        ADC_StartCalibration(ADC1);                 //??AD??
        while(ADC_GetCalibrationStatus(ADC1));      //??????
        
        ADC_ResetCalibration(ADC2);                 //??????
        while(ADC_GetResetCalibrationStatus(ADC2)); //????????
        ADC_StartCalibration(ADC2);                 //??AD??
        while(ADC_GetCalibrationStatus(ADC2));      //??????
        
        
        ADC_DMACmd(ADC1, ENABLE);                      //ADC1 DMA??????
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);         //?????ADC1???????
}

void DMA1_Channel1_IRQHandler(void)      //DMA?????????,???????????
{
  if(DMA_GetITStatus(DMA1_IT_TC1) != RESET)
  {
    DMA_ClearITPendingBit(DMA1_IT_TC1);
   // filter();
  }
}[/mw_shl_code]

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 08:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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