1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在我的核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 拉片选择
|
|
相关推荐
4个回答
|
|
我在中断中所做的只是读取SPI数据,奇怪的是,如果我降低50 kHz频率,代码就会开始运行良好。
|
|
|
|
如果你的中心发射频率为50 kHz,核心频率为2 MHz,则两个中断之间有40个时钟周期。
这很少,进入和离开中断已经需要一些周期,所以你的实际工作量会更少。 在评论中,您声明您“只是”阅读一些SPI数据。如果它只是从SPI数据寄存器中传输数据,那可能没问题 - 但是你会在SPI中断中这样做。所以我猜这个阅读涉及的不止于此。 有了这个,我很确定你在中断程序中需要的循环次数比可用的多。这导致下一个定时器中断排队,同时仍然处理旧的中断。 在这种情况下,你永远不会离开中断,程序的其余部分永远不会有机会执行。中断优先级可能会稍微改变一下(其他中断将被处理)但你不会得到主代码。 要更改此值,可以降低中断频率或增加内核的时钟频率。 |
|
|
|
谢谢。我会增加核心的时钟频率。
|
|
|
|
在定时器中断中读取SPI是错误的,您的应用需要重新考虑。您有SPI中断这样做,或者如果速度更高,则需要使用DMA进行通信。
因此,更改频率不会使您的代码正确。只有正确使用外设才会。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 09:18 , Processed in 0.593042 second(s), Total 77, Slave 61 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号