先看【正確採集】:
adc2 value = 0.835474 v
adc1 value = 0.825000 v
adc2 value = 0.798413 v
adc1 value = 0.815332 v
再看【錯誤採集】
adc2 value = 0.000000 v
adc1 value = 0.794385 v
adc2 value = 0.000000 v
adc1 value = 0.821777 v
問題出在哪呢?
【錯誤程式】:
//第 1 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]
adc_convertedvaluelocal[0] =(float)(((adc_convertedvalue[0] & 0xff00) >> 16)*3.3/4096);//2
adc_convertedvaluelocal[1] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1
//第 2 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]
adc_convertedvaluelocal[2] =(float)(((adc_convertedvalue[0] & 0xff00) >> 16)*3.3/4096);//2
adc_convertedvaluelocal[3] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1
【正確程式】:
//第 1 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]
adc_convertedvaluelocal[0] =(float)(((adc_convertedvalue[0] & 0xffff0000) >> 16)*3.3/4096);//2
adc_convertedvaluelocal[1] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1
//第 2 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]
adc_convertedvaluelocal[2] =(float)(((adc_convertedvalue[0] & 0xffff0000) >> 16)*3.3/4096);//2
adc_convertedvaluelocal[3] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1
問題一目了然了吧!
adc_convertedvalue是32位變數,& 0xff00後得到16位值,無論什麼值,只要再 >> 16,結果都會是0。(jnfxx)
STM32 ADC單通道單次採集
出處 今天講解 stm32f103 adc單通道單次採集 功能。獲取更多資訊。訪問密碼 de4f 訪問密碼 ca90 一 rcc時鐘配置 該函式位於在bsp.c檔案下面 使能rcc時鐘 rcc apb2periph adc1 二 引腳配置 該函式位於在adc.c檔案下面 對ad通道2所使用的引腳進行...
stm32adc多通道資料採集
工程連線 date 2013 8 28 author mei jilin brief adc1的配置完成3通道的資料採集 attention 1 adc config 配置adc 2 adc start 啟動adc,開始轉換 3 get channelvalue adc channel x 讀取相應...
STM32 ADC多通道採集電壓
前面的部落格中詳細介紹了stm32中adc的相關資訊,這篇部落格是對adc內容的乙個總結提公升,adc的詳細介紹 adc詳解 為了使這次 閱讀方便,博主沒有在標頭檔案中巨集定義變數,都是直接取樣庫函式中的規定形參。此次採用多通道採集電壓,使用adc1的通道10 11 12 13 14 15一共六個通...