在我的核L432KC中,我将定时器1设置为PWM生成,定时器15设置为基于定时器的中断,定时器2设置为PWM输入模式。定时器1和定时器15工作正常,直到一个点。我的时钟频率是2MHz。例如,我想要一个50 kHz的更新事件,所以我设置timer 15 Precaler 0和period 39.在这种情况下,While(1)循环永远不会执行,即程序挂起。当我启动计时器2时:HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_3);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_4);我的计时器1行为不端。该计划一般行为不端。这可能会发生什么?这就像Timer 15中断正在进行所有控制?是否与中断优先级有关?定时器15的目的是以50 kHz的频率发出中断。在此中断期间,我正在读取SPI数据。中断例程的伪代码:拉片选择下来使用HAL_SPI_Receive读SPI拉片选择
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这很少,进入和离开中断已经需要一些周期,所以你的实际工作量会更少。
在评论中,您声明您“只是”阅读一些SPI数据。如果它只是从SPI数据寄存器中传输数据,那可能没问题 - 但是你会在SPI中断中这样做。所以我猜这个阅读涉及的不止于此。
有了这个,我很确定你在中断程序中需要的循环次数比可用的多。这导致下一个定时器中断排队,同时仍然处理旧的中断。
在这种情况下,你永远不会离开中断,程序的其余部分永远不会有机会执行。中断优先级可能会稍微改变一下(其他中断将被处理)但你不会得到主代码。
要更改此值,可以降低中断频率或增加内核的时钟频率。
因此,更改频率不会使您的代码正确。只有正确使用外设才会。
一周热门 更多>