【学習記録】STM32インプットキャプチャ実験

STM32 インプットキャプチャ作業プロセス (例としてチャンネル 1)

 作業プロセスを 1 つの文で要約します。TIMx_CHxでエッジ信号を検出することにより、エッジ信号が遷移するとき (立ち上がりエッジ/立ち下がりエッジなど)、現在のタイマー値( TIMx_CNT )が対応するキャプチャ/比較レジスタ ( TIMx_CCRx )に保存されます。キャプチャを完了します。

ステップ 1 インプットキャプチャフィルターを設定します (例としてチャンネル 1)

 ステップ 2: インプットキャプチャ極性を設定します (例としてチャンネル 1)

ステップ 3: インプットキャプチャマッピングチャンネルを設定します (例としてチャンネル 1)

ステップ 4: インプットキャプチャディバイダを設定します (例としてチャンネル 1)

ステップ 5: 有効な信号がキャプチャされると、割り込みを有効にすることができます

 

最後に: タイマー チャネルの対応するピンを見てみましょう (例として TIM5 を取り上げます)。

 

インプットキャプチャチャネル初期化関数: void TIM_ICInit ( TIM_TypeDef * TIMx , TIM_ICInitTypeDef * TIM_ICInitStruct );
typedef struct

{

  uint16_t TIM_Channel; //捕获通道1-4  

  uint16_t TIM_ICPolarity; //捕获极性

  uint16_t TIM_ICSelection; //映射关系

  uint16_t TIM_ICPrescaler; //分频系数

  uint16_t TIM_ICFilter;  //滤波器

} TIM_ICInitTypeDef;
TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 
TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM5_ICInitStructure.TIM_ICFilter = 0x00;
TIM_ICInit(TIM5, &TIM5_ICInitStructure);
チャンネル極性設定独立機能:

void TIM_OCxPolarityConfig ( TIM_TypeDef * TIMx , uint16_t TIM_OCPolarity )

チャネルキャプチャ値を取得します。

uint32_t TIM_GetCapture1( TIM_TypeDef * TIMx )

入力キャプチャの一般的な構成手順は次のとおりです。

① チャネルに対応するIOのタイマとクロックを初期化します

IOポートを初期化します。モードは入力です: GPIO_Init ();

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ; //PA0入力

③タイマーARR PSCの初期化

   TIM_TimeBaseInit ();

④インプットキャプチャチャネルの初期化

   TIM_ICInit ();

⑤キャプチャ割り込みを有効にしたい場合は、

    TIM_ITConfig ();

    NVIC_Init ();

⑥タイマーを有効にする: TIM_Cmd ();

⑦割り込みサービス関数を書きます: TIMx_IRQHandler ();

実験目的:信号のパルス幅を測定する

 

重要なコード:

タイマー.c:

 main.c:

 

おすすめ

転載: blog.csdn.net/weixin_47723114/article/details/127700004