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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版