STM32L1xx - ADC(割り込み/ DMA)サンプルコード

このコード機能が達成すべきである:取得した電圧値、単一のシングルチャンネルサンプリングADCレオスタット取得の割り込みやDMAモードを使用!

(私がリストされていないので、それが直接電圧変換機能のために必要とされていないので、関数変換に彼らの必要性に応じて、インターネット上で見つけることができます。)

 

ツリーコードの構造:


                             | ---- ADC_GPIO_Config(空)
   (空)ADC_Config | ---- ADC_Mode_Config(無効)
                             | _______(無効)ADC_NVIC_Config / ADC_DMA_Config(無効)

 

ADC_GPIO_Config:

 ADC_GPIO_Config(無効
{
    // 初期化PA2ピン
  GPIO_InitTypeDef GPIO_InitStruct。
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA、ENABLE)。
    GPIO_InitStruct.GPIO_Pin = ADC_GPIO_PIN。
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN。
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL。
  GPIO_Init(ADC_GPIO_PORT、 GPIO_InitStruct)。
    
}

ADC_Mode_Config:

 ADC_Mode_Config(無効
{
    ADC_InitTypeDef ADC_InitStruct;
    RCC_HSICmd(ENABLE);                     // HSIが提供するHSIクロック、非常に重要な、stm32l151クロック開く
    しばらく(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESETを)。
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1は、ENABLE); // ADCクロックをオン
    ADC_DeInit(ADC1)。
    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b。
    ADC_InitStruct.ADC_ScanConvMode = DISABLE; // スキャンモードは使用しない 
    ; = ENABLE ADC_InitStruct.ADC_ContinuousConvModeを//は連続変換可能 
    ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Noneを; //は提供せずに、外部トリガを使用していない 
    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Rightを; // 右揃え 
    ADC_InitStruct = ADC_Channel_1 .ADC_NbrOfConversion; // 。使用されるチャネルの数1 = 
    ADC_Init(ADC1、&ADC_InitStruct)。
    ADC_RegularChannelConfig(ADC1、ADC_Channel_2、1。、ADC_SampleTime_4Cycles); // 構成ADCサンプリング順序およびチャンネル切り替え時間
の#if ADC_DMA_ENABLE 
    ADC_DMARequestAfterLastTransferCmd(ADC1、ENABLE);     // DMAの開放位置ADC_CR2 DDSが自動的に後に起動完了 
    ADC_DMACmdを(ADC1 、ENABLE);                             // DMA開く
#ELSE 
    ADC_ITConfig(ADC1、ADC_IT_EOC、イネーブル);                // 割り込みレギュラーチャンネル変換完了を有効
#ENDIF
    ADC_Cmd(ADC1、ENABLE)。
    一方、(ADC_GetFlagStatus(ADC1、ADC_FLAG_ADONS)== RESET); // ADC開始完了を待つ
    ADC_SoftwareStartConv(ADC1)。
}

ADC_NVIC_Config:

 ADC_NVIC_Config(無効
{
  NVIC_InitTypeDef NVIC_InitStruct;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                             // 設定優先 
    NVIC_InitStruct.NVIC_IRQChannel = ADC1_IRQn;                                 // 選択割り込み要因 
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1。 ;             // 先取優先 
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1。 ;                             // 子の優先順位 
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;                                 // 割り込みオープンマスター 
    NVIC_Init(&NVIC_InitStruct);                                                                 // 初期化構造 
}

ADC_DMA_Config:

 ADC_DMA_Config(無効
{
    DMA_InitTypeDef DMA_InitStruct;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1、ENABLE)。
    DMA_DeInit(DMA1_Channel1);                                     // DMAリセット
    
    DMA_InitStruct.DMA_PeripheralBaseAddr = ADC_DR_ADDRESSを;               // 周辺アドレス 
    DMA_InitStruct.DMA_MemoryBaseAddr =((のuint32_t)&Adc_Data);                                 // メモリアドレス 
    DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;                                  // ADCデータが送信 
    DMA_InitStruct.DMA_BufferSize = 1 ;                                             // データの送信数 
    DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;     // シリアルデータは、唯一の登録、無インクリメント
    = DMA_MemoryInc_Disable DMA_InitStruct.DMA_MemoryInc;                     // メモリアドレスがインクリメントしない 
    DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;     // 周辺データ幅:ハーフワードD 
    DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;                     // メモリデータ転送幅 
    DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;                                         // サイクル送信 
    DMA_InitStruct.DMA_Priority = DMA_Priority_High;                             // 優先順位が高い 
    DMA_InitStruct.DMA_M2M = DMA_M2M_Disable。
    
    DMA_Init(ADC_DMA_CHANNEL、&DMA_InitStruct);                                         // DMAチャネルADCのADC1チャネルを使用して1。
    DMA_Cmd(ADC_DMA_CHANNEL、ENABLE)。
    
}

 

注:私は与えた割り込みとDMAのコードは、自分のニーズに合わせてお選び。

おすすめ

転載: www.cnblogs.com/Irvingcode/p/11877765.html