<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 經(jīng)典_STM32_ADC多通道采樣的例子

          經(jīng)典_STM32_ADC多通道采樣的例子

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏



          ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1

          ADC_ResetCalibration(ADC1); //復(fù)位指定的ADC1的校準(zhǔn)寄存器

          while(ADC_GetResetCalibrationStatus(ADC1)); //獲取ADC1復(fù)位校準(zhǔn)寄存器的狀態(tài),設(shè)置狀態(tài)則等待


          ADC_StartCalibration(ADC1); //開始指定ADC1的校準(zhǔn)狀態(tài)

          while(ADC_GetCalibrationStatus(ADC1)); //獲取指定ADC1的校準(zhǔn)程序,設(shè)置狀態(tài)則等待


          }


          void DMA_Configuration(void)
          {

          DMA_InitTypeDef DMA_InitStructure;
          DMA_DeInit(DMA1_Channel1); //將DMA的通道1寄存器重設(shè)為缺省值
          DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA外設(shè)ADC基地址
          DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //DMA內(nèi)存基地址
          DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //內(nèi)存作為數(shù)據(jù)傳輸?shù)哪康牡?br />DMA_InitStructure.DMA_BufferSize = N*M; //DMA通道的DMA緩存的大小
          DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設(shè)地址寄存器不變
          DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //內(nèi)存地址寄存器遞增
          DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //數(shù)據(jù)寬度為16位
          DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //數(shù)據(jù)寬度為16位
          DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循環(huán)緩存模式
          DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x擁有高優(yōu)先級(jí)
          DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x沒有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?br />DMA_Init(DMA1_Channel1, &DMA_InitStructure); //根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道

          }


          //配置所有外設(shè)
          void Init_All_Periph(void)
          {

          RCC_Configuration();

          GPIO_Configuration();

          ADC1_Configuration();

          DMA_Configuration();

          //USART1_Configuration();
          USART_Configuration(9600);


          }



          u16 GetVolt(u16 advalue)

          {

          return (u16)(advalue * 330 / 4096); //求的結(jié)果擴(kuò)大了100倍,方便下面求出小數(shù)

          }




          void filter(void)
          {
          int sum = 0;
          u8 count;
          for(i=0;i<12;i++)

          {

          for ( count=0;count
          {

          sum += AD_Value[count][i];

          }

          After_filter[i]=sum/N;

          sum=0;
          }

          }




          int main(void)
          {

          u16 value[M];

          init_All_Periph();
          SysTick_Initaize();


          ADC_SoftwareStartConvCmd(ADC1, ENABLE);
          DMA_Cmd(DMA1_Channel1, ENABLE); //啟動(dòng)DMA通道
          while(1)
          {
          while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待傳輸完成否則第一位數(shù)據(jù)容易丟失

          filter();
          for(i=0;i<12;i++)
          {
          value[i]= GetVolt(After_filter[i]);

          printf("value[%d]:t%d.%dvn",i,value[i]/100,value[i]0) ;
          delay_ms(100);
          }
          }

          }
          總結(jié)
          該程序中的兩個(gè)宏定義,M和N,分別代表有多少個(gè)通道,每個(gè)通道轉(zhuǎn)換多少次,可以修改其值。
          曾出現(xiàn)的問(wèn)題:配置時(shí)鐘時(shí)要知道外部晶振是多少,以便準(zhǔn)確配置時(shí)鐘。將轉(zhuǎn)換值由二進(jìn)制轉(zhuǎn)換為十進(jìn)制時(shí),要先擴(kuò)大100倍,方便顯示小數(shù)。最后串口輸出時(shí)在 printf語(yǔ)句之前加這句代碼,防止輸出的第一位數(shù)據(jù)丟失:while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: STM32ADC多通道采

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();