2863|2

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32用DMA读取ADC1的两个通道,,怎么都不能实现是怎么回事 啊 [复制链接]

/******************** (C) COPYRIGHT 2012 WildFire Team **************************
* ÎļtÃû  £omain.c
* Ãèêö    £oóÃ3.5.0°æ±¾½¨μÄ1¤3ìÄ£°å¡£         
* êμÑéƽ쨣oò°»eSTM32¿a·¢°å
* ¿a°æ±¾  £oST3.5.0
*
* ×÷Õß    £owildfire team
* ÂÛì3    £ohttp://www.amobbs.com/forum-1008-1.html
* ìÔ±|    £ohttp://firestm32.taobao.com
**********************************************************************************/
#include "stm32f10x.h"
#include "lcd12864.h"         
//#include "stm32f10x_adc.h"
#include "delay.h"       

u8 ad,i=1;
u8 ad_temp=0,ad_result1,ad_result2,ad_result3,ad_result4,ad_result5,ad_result6,ad_result7,ad_result8;
u16 ADCData[2];



void RCC_Configuration(void);
void GPIO_Configuration(void);
void ADC_Configuration(void);
void RCC_HSE_Configuration(void);
void DMA_Configuration(void);
/*
* oˉêyÃû£omain
* Ãèêö  : Ö÷oˉêy
* êäèë  £oÎT
* êä3ö  : ÎT
*/
int main(void)
{            
                  RCC_Configuration();
                 GPIO_Configuration();
                                                ADC_Configuration();                
            DMA_Configuration();       
                                              LCD12864_Init();
                                 Display12863(0,0,"AD");  
                                 Display12863(1,0,"AD");        
        while(1){       

                                        for(i=0;i<2;i++)
                     {
                          ADC_SoftwareStartConvCmd(ADC1,ENABLE);
                                 while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
                                 }
      
                      ad_result1=ADCData[0]/1000;
                ad_result2=ADCData[0]%1000/100;
                ad_result3=ADCData[0]%100/10;
                ad_result4=ADCData[0]%10;
               
                      ad_result5=ADCData[1]/1000;
                ad_result6=ADCData[1]%1000/100;
                ad_result7=ADCData[1]%100/10;
                ad_result8=ADCData[1]%10;
                                 
                                  write_com(0x81);                                         
                                  write_data(0x30+ad_result1);
                                        write_data(0x30+ad_result2);
                                        write_data(0x30+ad_result3);
                                        write_data(0x30+ad_result4);
                                  write_com(0x91);                                         
                                  write_data(0x30+ad_result5);
                                        write_data(0x30+ad_result6);
                                        write_data(0x30+ad_result7);
                                        write_data(0x30+ad_result8);
                                                                                                  
          }
}
         
void GPIO_Configuration(void)
{
                                        GPIO_InitTypeDef GPIO_InitStructure;                  
                                        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;       
                                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
                                        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                                        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
                                        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
                                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
                                        GPIO_Init(GPIOA,&GPIO_InitStructure);
}


void RCC_Configuration(void)
{
          SystemInit();//72m
                //RCC_HSE_Configuration();
                                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
                                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
                                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
                                        RCC_ADCCLKConfig(RCC_PCLK2_Div6);                      //12M  ×î′ó14M
                                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void RCC_HSE_Configuration(void)             //HSE×÷ÎaPLLê±Öó£¬PLL×÷ÎaSYSCLK
{
   RCC_DeInit();                             /*½«íaéèRCC¼Ä′æÆ÷ÖØéèÎaè±ê¡Öμ */
   RCC_HSEConfig(RCC_HSE_ON);                      /*éèÖÃía2¿¸ßËù¾§Õñ£¨HSE£© HSE¾§Õñ′ò¿a(ON)*/

   if(RCC_WaitForHSEStartUp() == SUCCESS) {  /*μè′yHSEÆeÕñ,  SUCCESS£oHSE¾§ÕñÎ趨Çò¾íD÷*/  

   RCC_HCLKConfig(RCC_SYSCLK_Div1);         /*éèÖÃAHBê±Öó(HCLK)RCC_SYSCLK_Div1¡a¡aAHBê±Öó = Ïμí3ê±*/  
   RCC_PCLK2Config(RCC_HCLK_Div1);          /*éèÖøßËùAHBê±Öó(PCLK2)RCC_HCLK_Div1¡a¡aAPB2ê±Öó = HCLK*/     
   RCC_PCLK1Config(RCC_HCLK_Div2);          /*éèÖÃμíËùAHBê±Öó(PCLK1)RCC_HCLK_Div2¡a¡aAPB1ê±Öó = HCLK / 2*/      

   RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/*éèÖÃPLLê±ÖóÔ′¼°±¶ÆμÏμêy*/   
   RCC_PLLCmd(ENABLE);                             /*ê1ÄüPLL */
   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*¼ì2éÖ¸¶¨μÄRCC±ê־λ(PLL×¼±¸oñêÖ¾)éèÖÃóë·ñ*/
   
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  /*éèÖÃÏμí3ê±Öó£¨SYSCLK£© */  
   while(RCC_GetSYSCLKSource() != 0x08);     /*0x08£oPLL×÷ÎaÏμí3ê±Öó */            
}
}

void ADC_Configuration(void)
{
        ADC_InitTypeDef ADC_InitStructure;

        ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;                             //1¤×÷Ä£ê½μ¥¶à»òêÇË«
        ADC_InitStructure.ADC_ScanConvMode=ENABLE;                                                                                               //1¤×÷Ä£ê½
        ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;                                                                             //1¤×÷Ä£ê½
        ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;                                     //×a»»óéèí¼tÆô¶ˉ
        ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;                                                                   //¶ÔÆëÄ£ê½
        ADC_InitStructure.ADC_NbrOfChannel=2;                                                                                                           //í¨μà×é¸öêy
        ADC_Init(ADC1,&ADC_InitStructure);

        ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_1Cycles5 );                 //1æÔò×飬í¨μ࣬2éÑùË3Dò£¬2éÑùê±¼ä
  ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_1Cycles5 );       

        ADC_DMACmd(ADC1,ENABLE);//ÖØòa
       
        ADC_Cmd(ADC1,ENABLE);                                                                                                                                              //ê1ÄüADCíaéè

                ADC_ResetCalibration(ADC1);                                                                                                  
                while(ADC_GetResetCalibrationStatus(ADC1));

                ADC_StartCalibration(ADC1);
                while(ADC_GetCalibrationStatus(ADC1));

                ADC_SoftwareStartConvCmd(ADC1,ENABLE);                                                                                                          //ê1Äü»òê§Äüèí¼t×a»»
                                                                                                                   
}


void DMA_Configuration(void)
{
        DMA_InitTypeDef DMA_InitStructure;

        DMA_DeInit(DMA1_Channel1);

        DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)ADC1->DR;        //DMAíaéèADC»ùμØÖ·
        DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADCData;              //DMAÄú′æ»ùμØÖ·

        DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;                 //êy¾Y′«êä·½Ïò£¬′óÄú′æ¶áè¡·¢Ëíμ½íaéè
        DMA_InitStructure.DMA_BufferSize=2;                               //DMAí¨μàμÄDMA»o′æμÄ′óD¡

        DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;                               // éèÖÃíaéèμØÖ·Ôöá¿óë·ñ
        DMA_InitStructure.DMA_MemoryInc=DMA_PeripheralInc_Enable;                     //Äú′æμØÖ·Ôöá¿óë·ñ

        DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;                          //éèÖÃêy¾Y¿í¶è
        DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;                                 //éèÖÃÄú′æ¿í¶è

        DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;                                         //1¤×÷Ôúê2Ã′Ä£ê½Ï  êÇÑ-»·»1êÇ»o′æÄ£ê½ÏÂ
        DMA_InitStructure.DMA_Priority=DMA_Priority_High;
        DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;                                   
//        DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE);
        DMA_Init(DMA1_Channel1,&DMA_InitStructure);                                        //ê1óÃí¨μà1
       
        DMA_Cmd(DMA1_Channel1,ENABLE);
}





/******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
此帖出自stm32/stm8论坛

最新回复

你再说详细点,调试有数据没有?  详情 回复 发表于 2014-8-14 13:27
点赞 关注
 

回复
举报

12

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
哪位大神快个来看看啊   谢谢了
此帖出自stm32/stm8论坛
 
 

回复

4008

帖子

0

TA的资源

版主

板凳
 
你再说详细点,调试有数据没有?
此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表