你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

IIC通信时,有时候会卡住,

[复制链接]
select326 提问时间:2018-3-13 11:50 /
用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)


大约是这二行上面,就不再继续 运行了。。。。

还请大神帮分析问题所在
收藏 评论13 发布时间:2018-3-13 11:50

举报

13个回答
wenyangzeng 回答时间:2018-3-13 12:41:30
IIC器件发送应答信号时如果被其他中断打断,就可能出现上述现象。建议进行IIC通讯时禁止其他中断发生。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

回答时间:2018-3-13 13:48:59
HAL库,建议用硬件I2C通讯。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

select326 回答时间:2018-3-13 14:01:50
安 发表于 2018-3-13 13:48
HAL库,建议用硬件I2C通讯。

使用硬件IIC的话,只怕是需要修改引脚了,但是,板子是别人做好的,引脚 不能修改,可有办法使用硬件IIC ?
select326 回答时间:2018-3-13 14:03:08
wenyangzeng 发表于 2018-3-13 12:41
IIC器件发送应答信号时如果被其他中断打断,就可能出现上述现象。建议进行IIC通讯时禁止其他中断发生。 ...

IIC通信是会一直持续进行的,这个是由FreeRTOS调度的。我如何来做到禁止中断发生?
wenyangzeng 回答时间:2018-3-13 14:06:37
select326 发表于 2018-3-13 14:03
IIC通信是会一直持续进行的,这个是由FreeRTOS调度的。我如何来做到禁止中断发生? ...

至少中断优先级改变一下
回答时间:2018-3-13 14:13:07
不行,只能用模拟的I2C了。看一下驱动,STOP的时候是不是有挂起等待时间的操作?可能是其他的任务影响的。
Tcreat 回答时间:2018-3-13 14:18:27
最近怎么那么多涉及到I2C的
toofree 回答时间:2018-3-13 14:20:48
把其余任务去掉,只开I2C的,看看还卡死不?排除多任务造成的影响。
至于I2C问题,论坛问的人也不少了,可以搜索参考一下别人回复。同一问题,多次回答比较浪费资源。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

熊猫火锅 回答时间:2018-3-13 14:36:50
关闭中断吧,实在没办法,就修改优先级别。最好是用硬件I2C.

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版