程序运行到I2C_WaitOnFlagUntilTimeout时卡死,多次暂停读取HAL_GetTick()值没有变化;当把HAL_I2C_Mem_Read(size = 0),则会造成不知名问题,导致再次运行后HAL_I2C_Mem_Read(size = 2)也会停留在I2C_WaitOnFlagUntilTimeout()中,目前具体原因不详 |
哪位大哥有stm32f103c8t6的keil编程实例源码呀?求
能在一个程序中同时使用TIM的callback和uart的callback函数吗?
Cubemax 生成的文件夹选项包含Core文件夹
多路ADC使用DMA模式有没有教程呀,芯片STM32L151
cubemx升级6.11后,左侧congfiguration选项出不来,鼠标转圈
STM32CubeMX有没有汉化版啊,该怎么搞?
STM32L051K8U6没有供电时,io是不是高阻态?
USBH CDC通讯,如何修改通讯波特率?
NUCLEO-H7A3ZI-Q配置RCC出问题
STM32L151定时器上升沿触发ADC采样:低电平期间多出现一次采样动作
进入溢出中断,尤其当systick中断优先级设置得并不高于该中断时。
这就可能发生一方面systick中断没法得到响应,另一方面超时函数又需要systick动态提供计时值,最后超时函数就在哪里死等。
尝试先关闭I2C的代码,看看系统运行后,tick是否正常。如果可以,把工程上传一下,大家有相同资源的可以帮你测试一下。
我只保留了iic通讯任务,也会出现这种情况,很难理解当我对这个函数HAL_I2C_Mem_Read()中的size参数赋值为0后,程序跑着跑着就会卡死,systick没有输出计时(systick的抢占优先级设置为15,iic为0)。
HAL_I2C_Mem_Read()函数中有比较多的关闭/开启中断的操作,我在HAL_GetTick(void)中添加__enable_irq()也没有效果
[md]关闭IIC代码,tick工作正常,工作原因,工程不能上传
[md]说明是I2C错误导致的这个问题,I2C中断中是否有其他的代码?尽量优先开启tick的工作,看一下tick中断的状态,是否能够正常产生?tick中断的配置是否比I2C优先执行?
[md]看看I2C的代码中是否有对系统时钟的改配置的代码,或者中断优先级的代码从而影响到SYSTICK 的运行。
我也遇到了这一类情况,经过我的调试,发现是Keil软件的原因,只需要打开魔术棒,将C/C++选项卡中的优化Optimization等级调成最低Level 0就行了。
大坑。。。
根据楼主的分析。我觉得这位仁兄的分析是对的。 第一, 你是不是在某个高优先级的ISR里面卡死了。
第二,你是不是在某个地方关了总中断(比如临界区),没有恢复总中断。