HALライブラリのSTM32 ADC(シングルチャネル非DMA)

中cubemxに設定してください。

 

 

 

独立モードには、日付アラインメントは右揃えデータに設定されています。

今右揃え左寄せの差: 12バイナリ0x0FFFの最大の結果は、左揃え動作が右寄せ後0xFFF0、又は0x0FFFです。左詰めデータが値X登録すれば、逆に、(実際のデータに対応* 16を、それが左詰めされた変換値/実測値が16であると)、X >> 4は、実際のデータです。右詰め、データがどのように多くの数を収集し、変更されません。どのようにコンフィギュレーション選挙を確認するために、フラッシュを保存するためとして登録することを左または右に揃えます。

サンプリング時間は、その後、一般的に長いサンプリング時間を高い取得時間を選択し、より高精度ADCを収集します。

 一方、1 
  {
        HAL_ADC_Start( hadc1)。
        HAL_ADC_PollForConversion(&hadc1、50 )。
        もし(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1)、HAL_ADC_STATE_REG_EOC))
        {
        adcx = Get_Adc_Average(ADC_CHANNEL_3、20 )。
        printf(" %dの\ R \ n " 、adcx)。
        ADC_Value = adcx * 3.3 / 4096 
        printf(" 測定電圧値.1fV%\ R&LT \ N- " 、ADC_Value);
     //     HAL_UART_Transmit(&huart1、(uint8_t *)&ADC_Value、はsizeof(ADC_Value)、0xFFFFの); 
        }
            HAL_Delay(1000年);
    / * ユーザコードのEND WHILE * /

    / * ユーザコードは3 BEGIN * / 
  }
コードの表示
int型 FPUTC(int型の CH、FILE * f)は
{
    uint8_t TEMP [ 1 ] = {CH}。
    HAL_UART_Transmit(&huart1、TEMP、12 )。
    リターン(CH);
}

Get_Adc_Average(のuint32_t CH、uint8_t回)uint16_t
{
    uint32_t temp_val = 0 
    uint8_tトン;
    (T = 0、T <時間; T ++ 
    {
        temp_val + =(uint16_t)HAL_ADC_GetValue(&hadc1)。
        HAL_Delay(5 )。
    }
    返す temp_val / 回。
} 
コードの表示

上記のコード。

最初のADCを開くには、

HAL_ADC_Start(&hadc1)。

そして、ADCの変換が完了するのを待ちます。

HAL_ADC_PollForConversion(&hadc1、50)。

審判の変換が完了フラグが設定されています。

HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1)、HAL_ADC_STATE_REG_EOC)

完了フラグが示すHAL_ADC_STATE_REG_EOC変換は、変換データが利用可能です。

 

ここでは、ADCの平均その関数を記述します。主な用途

HAL_ADC_GetValue(&hadc1)

ADC変換データを読み出し、すなわち、データが12ビットです。参照データシート4095に16を格納変換されたデータ、右詰め、0から2 ^ 12-1に、次に変換されたデータの範囲、すなわち、レジスタ0、見つかりました。

 

 

 最終のADC値が基準電圧値に変換する、即ちADC_Value * 3.3 / 4096。2 ^ 12 = 4096のADCのフルスケール値。

それはすることができます。

おすすめ

転載: www.cnblogs.com/zjx123/p/11990578.html