我使用STM32F4Discovery开发板,从Cube生成代码,SYSCLK为168MHz,APB1定时器时钟为42 MHz,TIM6具有预分频器1000,并且计数至62。STM32F4 TIM6中断不会在DMA工作时发生
启用由
__HAL_TIM_ENABLE_IT(&htim6, TIM_IT_UPDATE);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
开始DAC_DMA TIM6中断在正常模式下,用30元素阵列。
计数许多定时器中断是如何发生的
void TIM6_DAC_IRQHandler(void) {
HAL_TIM_IRQHandler(&htim6);
tim6Counter++;
}
设置断点在这个函数:
void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef *hdac) {
conversionCounter++;
}
我想到:
1)HAL_DAC_ConvCpltCallbackCh1是(由于非圆模式)调用一次。这是真的。
2)当它被称为tim6Counter必须等于30,作为DAC数据缓冲区的长度是30。在实验tim6Counter是1
3)DAC完成后,设置断点来TIM6处理程序,并主要是(1)循环。问题是,它挂在TIM6处理程序中。
问题:
1)即使未启用TIM6中断,DMA仍能正常工作。但是,如果启用,为什么只发生一次,而不是每个DMA请求?
2)为什么它挂在定时器处理程序?
3)TIM6 SR寄存器不会被HAL宏或HAL_TIM_IRQHandler清零。我使用openOCD的eclipse。这是一个工具问题吗?还是由于挂在处理程序?