私はSTM32F4Discoveryボード、Cubeからコードを生成、SYSCLKは168MHz、APB1タイマクロックは42MHz、TIM6はプリスケーラ1000、カウントは62までです。以下の実験を行います。DMA動作中にSTM32F4 TIM6割り込みが発生しない
は30-elements配列と通常モードで
__HAL_TIM_ENABLE_IT(&htim6, TIM_IT_UPDATE);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
スタートDAC_DMAによってTIM6の中断を有効にします。
void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef *hdac) {
conversionCounter++;
}
は、私が何を期待:
1)HAL_DAC_ConvCpltCallbackCh1が(原因)非円形モードに一度と呼ばれ、多くのタイマーの中断がこの機能に
void TIM6_DAC_IRQHandler(void) {
HAL_TIM_IRQHandler(&htim6);
tim6Counter++;
}
セットブレークポイントが起こるのか
カウント。それは本当です。それはtim6Counter呼ばれる
2)に実験tim6Counterで30である1
3)DACが完了した後は、TIM6ハンドラにブレークポイントを設定し、DACデータバッファの長さとして、30等しくなければなりませんメインwhile(1)ループ。問題は、TIM6ハンドラにハングすることです。
質問:
1)DMA TIM6の中断が有効になっていない場合でも動作します。しかし、有効化されている場合、すべてのDMA要求ではなく、なぜ1回だけ発生するのですか?
2)なぜタイマーハンドラでハングするのですか?
3)TIM6 SRレジスタは、HALマクロまたはHAL_TIM_IRQHandlerのいずれによってもクリアされません。私はopenOCDでEclipseを使用しています。それはツールの問題ですか?またはハンドラにぶら下がっているために?