关于使用rtt操作系统后hal库iic读写的问题

近日在将一使用hal库硬件IIC工程移植到rtt操作系统中时,出现了一些错误,分享如下。
在使用hal库IIC的读函数HAL_I2C_Mem_Read时,发现程序一直卡在I2C_WaitOnFlagUntilTimeout函数里,原因是I2C_WaitOnFlagUntilTimeout函数里有这样一句
if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)),如下图所示:
在这里插入图片描述
而调用HAL_GetTick函数返回值是uwTick,而uwTick的增加需要调用HAL_IncTick函数。
原来HAL_IncTick函数在滴答定时器中断中被调用,而在操作系统接管了滴答定时器后,uwTick的值便不再增加。这也导致了一些使用了hal库延时函数HAL_Delay的程序不能正常运行。
解决办法:1找到rtt文件夹下board.c文件中被接管的SysTick_Handler函数,将HAL_IncTick函数手动添加进去:
在这里插入图片描述
2:重新创建一个定时器,作为hal库的滴答定时器用。
如使用stm32cubemx直接勾选下列选项,这里选择了定时器7:
在这里插入图片描述
或者手动初始化一个定时器,将HAL_IncTick函数添加进它的中断服务函数里。

另外如果程序可以运行但就是无法读出数据,可以参考以下文章:
https://blog.csdn.net/zhanglifu3601881/article/details/82462519

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值