IIC通信时,有时候会卡住,
用STM32F103C8T6 做了个核心板,使用软件模拟IIC和12864的OLED屏幕通信,项目中使用CubeMX构建,添加了FreeRTOS。配置有三个任务,其中,display 任务负责把CACHE中的数据不停的发送给屏幕,
其他二个任务负责给CACHE中写入数据 。
初始化以后,程序运行正确,画线条成功,大约画了40左右条线的时候,就会很慢,感觉象是很卡的样子。
DEBUG发现,这个时候,系统会卡在IIC_Stop 方法上面。。。
#define SCL_L HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET)
#define SDA_L HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET)
大约是这二行上面,就不再继续 运行了。。。。
还请大神帮分析问题所在
IIC器件发送应答信号时如果被其他中断打断,就可能出现上述现象。建议进行IIC通讯时禁止其他中断发生。 HAL库,建议用硬件I2C通讯。 安 发表于 2018-3-13 13:48
HAL库,建议用硬件I2C通讯。
使用硬件IIC的话,只怕是需要修改引脚了,但是,板子是别人做好的,引脚 不能修改,可有办法使用硬件IIC ? wenyangzeng 发表于 2018-3-13 12:41
IIC器件发送应答信号时如果被其他中断打断,就可能出现上述现象。建议进行IIC通讯时禁止其他中断发生。 ...
IIC通信是会一直持续进行的,这个是由FreeRTOS调度的。我如何来做到禁止中断发生? select326 发表于 2018-3-13 14:03
IIC通信是会一直持续进行的,这个是由FreeRTOS调度的。我如何来做到禁止中断发生? ...
至少中断优先级改变一下 不行,只能用模拟的I2C了。看一下驱动,STOP的时候是不是有挂起等待时间的操作?可能是其他的任务影响的。 最近怎么那么多涉及到I2C的 把其余任务去掉,只开I2C的,看看还卡死不?排除多任务造成的影响。
至于I2C问题,论坛问的人也不少了,可以搜索参考一下别人回复。同一问题,多次回答比较浪费资源。 关闭中断吧,实在没办法,就修改优先级别。最好是用硬件I2C.
页:
[1]
2