stm32使用同步计时器时遇到问题

2019-07-14 16:47发布

在我的核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拉片选择
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
天地直方
1楼-- · 2019-07-15 00:58
如果你的中心发射频率为50 kHz,核心频率为2 MHz,则两个中断之间有40个时钟周期。

这很少,进入和离开中断已经需要一些周期,所以你的实际工作量会更少。

在评论中,您声明您“只是”阅读一些SPI数据。如果它只是从SPI数据寄存器中传输数据,那可能没问题 - 但是你会在SPI中断中这样做。所以我猜这个阅读涉及的不止于此。

有了这个,我很确定你在中断程序中需要的循环次数比可用的多。这导致下一个定时器中断排队,同时仍然处理旧的中断。

在这种情况下,你永远不会离开中断,程序的其余部分永远不会有机会执行。中断优先级可能会稍微改变一下(其他中断将被处理)但你不会得到主代码。

要更改此值,可以降低中断频率或增加内核的时钟频率。
dfgsdf
2楼-- · 2019-07-15 04:32
 精彩回答 2  元偷偷看……
zyh34997
3楼-- · 2019-07-15 06:27
在定时器中断中读取SPI是错误的,您的应用需要重新考虑。您有SPI中断这样做,或者如果速度更高,则需要使用DMA进行通信。

因此,更改频率不会使您的代码正确。只有正确使用外设才会。

一周热门 更多>