STM 32 F 1によるADC実験の整理

3001 ワード

チップ型番:STM 32 F 103 VE
まず,単一ADCの規則的チャネルと注入チャネルを実験した.
1つのADCの2つのチャネル:
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;//    
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	
	ADC_InitStructure.ADC_NbrOfChannel = 2;	//2   
	ADC_Init(ADC1, &ADC_InitStructure);


        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );		    
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);			
	 
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));

	return ADC_GetConversionValue(ADC1);	

1つのADC、2つのルールチャネル、1つの注入チャネル(ソフトウェア起動):
上記の構成に基づいて、注入チャネルのコードを追加します.
    ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);//        
    ADC_InjectedSequencerLengthConfig(ADC1, 1);//    
    ADC_InjectedChannelConfig(ADC1,ADC_Channel_15,1,ADC_SampleTime_28Cycles5);//     ,         ADC  

    ADC_SetInjectedOffset(ADC1,ADC_InjectedChannel_1,0);//  ,         1-4  
    ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE);//      
    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//      
    return ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1);//      1     

なお、ADC_InjectedChannel_1 ADCに誤記された実際のチャネルADC_Channel_15はだめです(コンパイラは間違っていません).
ADC_SampleTime_239 Cycles 5はサンプリング時間であり、サンプリング時間が長ければ長いほど正確である.
ADC_InjectedSequencerLengthConfig(ADC1, 1);ルールチャネル構成クラスに比べて,注釈と組み合わせていくつかの注入チャネルの意味があると推測した.
ADC_SetInjectedOffset(ADC1,ADC_InjectedChannel_1,0);チャネル変換データのオフセットを注入し、変換結果は元のデータからオフセット量を減算します.例えば、書き込みオフセットが1000になると、変換結果は元の2千余りから千余りになります.
 
ADC初期化構成の構造体を簡単に説明します.
typedef struct{uint 32_t ADC_Mode;/*ADCモードを設定します.独立モードと他のいくつかのモード(2つ以上のADC)*/
  FunctionalState ADC_ScanConvMode;/*スキャンモードをオンにするかどうかを設定します.すなわち、シングルチャネルまたはマルチチャネル*/
  FunctionalState ADC_ContinuousConvMode;/*連続変換モードをオンにするかどうかを設定します.すなわち、1回または連続変換*/
  uint32_t ADC_ExternalTrigConv;/*ルール変換グループ変換を開始する外部イベント、すなわちソフトウェアが変換をトリガするか、外部イベントがトリガするかを設定*/
  uint32_t ADC_DataAlign;/*ADCデータの位置合わせを左または右にする*/
  uint8_t ADC_NbrOfChannel;/*ルールシーケンスの長さを設定します*/}ADC_InitTypeDef;
ADC_Mode:2つ以上のADCがあるMCUでは、2つのADCモードを使用することができ、これらのモードの選択によって、主従が交互にトリガまたは同期トリガであることが決定される.
#define ADC_Mode_Independent独立モード、ADC#define ADC_Mode_RegInjecSimult同期注入+同期規則#define ADC_Mode_RegSimult_AlterTrig同期規則+交互トリガ#define ADC_Mode_InjecSimult_FastInterl同期注入+高速交互#define ADC_Mode_InjecSimult_SlowInterl同期注入+低速交互#define ADC_Mode_InjecSimult同期注入
#define ADC_Mode_RegSimult同期規則#define ADC_Mode_FastInterl快速交替#define ADC_Mode_SlowInterl低速交替#define ADC_Mode_AlterTrig交互トリガ
同期とは、複数のADCの変換を同時にトリガし、交互に同時にトリガしないことである.詳細な説明は参考マニュアルを参照してください.
二重ADCの実験を行います.
同期ルール:
モードを同期ルールに変更し、ADC 2の初期化コード(ADC 1付きのものはすべてコピー)に追加し、結果を読み込むだけです.
注意2つのADCの同じチャネルを変換しないでください.
同期注入:類似の変更.