STM8的I2C在写地址的时候进入到assert_failed
2017-08-11 17:23
176 查看
近期使用stm8的库函数写功能,使用I2C时候遇到在调用 void I2C_Send7bitAddress(uint8_t Address, I2C_Direction_TypeDef Direction)的时候,会卡死的问题
通过调试发现在调用写地址函数后会进入到main.c的这个函数中
后来发现写地址函数会先检测输入参数是否正确如果不正确就会进入错误循环
贴上这个官方I2C库函数的代码
这里
STM8这个比较特殊的一点在于,正常7位地址+1位RW位,这个RW位你必须自己留出来,比如某个设备地址是111 1100,我在其他环境下会声明为0x7C
但是在这边,你要用它的库就需要声明为1111 1000,0xF8才可以。
最后一位如果值为1,必出错跳转faild死循环
通过调试发现在调用写地址函数后会进入到main.c的这个函数中
void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ // printf("Wrong parameters value: file %s on line %d\r\n", file, line); /* Infinite loop */ while (1) {// return; } }
后来发现写地址函数会先检测输入参数是否正确如果不正确就会进入错误循环
贴上这个官方I2C库函数的代码
void I2C_Send7bitAddress(uint8_t Address, I2C_Direction_TypeDef Direction) { /* Check function parameters */ assert_param(IS_I2C_ADDRESS_OK(Address)); assert_param(IS_I2C_DIRECTION_OK(Direction)); /* Clear bit0 (direction) just in case */ Address &= (uint8_t)0xFE; /* Send the Address + Direction */ I2C->DR = (uint8_t)(Address | (uint8_t)Direction); }
这里
/* Check function parameters */ assert_param(IS_I2C_ADDRESS_OK(Address)); assert_param(IS_I2C_DIRECTION_OK(Direction));注释的两句话就是检测参数是否正确,有一个比较坑的地方就在于,如果你的地址是八位的,然后最后一位读写位不为0,那么就会出错
STM8这个比较特殊的一点在于,正常7位地址+1位RW位,这个RW位你必须自己留出来,比如某个设备地址是111 1100,我在其他环境下会声明为0x7C
但是在这边,你要用它的库就需要声明为1111 1000,0xF8才可以。
最后一位如果值为1,必出错跳转faild死循环
相关文章推荐
- 项目正式环境是双机,对外的访问地址是虚拟地址,在登录门户的时候,会等待15秒,才能进入门户
- iar for stm8 报错Error[Li005]: no definition for "assert_failed"解决方案
- iar for stm8 报错Error[Li005]: no definition for "assert_failed"解决方案
- 项目正式环境是双机,对外的访问地址是虚拟地址,在登录门户的时候,会等待15秒,才能进入门户
- 在eclipse打包后部署到weblogic上运行地址的时候报错
- i2c地址问题
- Android Studio运行或Rebuild的时候报Error:Execution failed for task ':app:compileDebugNdk'.的解决办法
- 使Xcode在任何抛出异常时候进入断点
- 退出后点击浏览器后退不能回到成功页面;直接进入页面和跳转进入页面样式不同;防止直接输入页面地址或servlet;当servlet跳servlet时,进行其他操作后后退出现错误!
- linux的nand中计算ECC的时候buf地址不4字节对齐的问题
- I2C之知(五)--I2C总线的10bit地址以及通用广播地址
- I2C设备地址
- 全键盘模式,目前按center key 和LSK时候会进入menu 菜单,期望按center键进入编辑
- rk3288 i2c 写双字节地址
- 调方法的时候 传的参数有值,进入方法内执行的时候 参数就变为空
- 地址参考clang: error: linker command failed with exit code 1 (use -v to see invocation)
- phpcms后台进入地址(包含No permission resources错误)
- qcom 系列的i2c设备的power 在dtsi里定义的时候需要注意的
- 应用层读写i2c设备可读写8位,16位设备地址小工具及源码
- Eclipse启动的时候提示:Failed to load JavaHL Library.