Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
1)如图,I2c时钟12M,波特400K,模式Fast。 使用带Blocking的函数可以正常读取数据,如下图。 波形正常:
2)使用不带Blocking的函数, 只有写的波形,正确,但是clock被拉低了: 没有读的波形,并且进入断点之后,再点运行,SDA线被拉低了,Clock恢复高
综上所述:请问为啥不可以直接使用不带Blocking的函数?带Blocking的函数会影响Freertos的工作么?
已经找到问题,是写完之后I2c没有处于idle状态
FreeRTOS 推荐使用有Block的API,里面会创建信号量(开始传输后会让出CPU)
Frankie 收到~
lrx9695 老哥,我遇到类似的问题了,方便把你的情况给我描述一下不
gaoSheng 我是小学生,就是你使用I2c Master就使用函数接口I2C_DRV_MasterSendDataBlocking,还有I2C_DRV_MasterReceiveDataBlocking。 可以把最后Timeout形参设置为1,避免阻塞任务
lrx9695 不好意思,之前我没有描述情况,这边是使用I2C_DRV_MasterSendDataBlocking没有问题。使用I2C_DRV_MasterSendData偶尔会出现问题。因为客户实测发现带blocking的耗时会多一点,所以想用不带Blocking的
gaoSheng 带blocking的不会阻塞太久呀,你设置1ms的超时,也不久呀。因为master写完数据之后需要在中断里设置i2c_idle状态,然后才能实现读取数据的操作。 太快了不行。所以需要给他点时间设置I2c空闲状态。
lrx9695 非常感谢,我让客户试试
gaoSheng 这么着急么?1ms都等不了。安全气囊么?实际我示波器测试过了,用不了1ms,对任务没影响,。任务Task周期一直稳定,未出现超时等不规则时序
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...