STM8的I2C在写地址的时候进入到assert_failed
来源:互联网 发布:大数据分析师 证书 编辑:程序博客网 时间:2024/05/17 07:40
近期使用stm8的库函数写功能,使用I2C时候遇到在调用 void I2C_Send7bitAddress(uint8_t Address, I2C_Direction_TypeDef Direction)的时候,会卡死的问题
通过调试发现在调用写地址函数后会进入到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死循环
阅读全文
1 0
- STM8的I2C在写地址的时候进入到assert_failed
- STM8 I2C的学习
- STM8的烧写
- stm8的I2C库的使用
- stm8 中i2c(iic)引脚的输出电平问题
- 动手写一个STM8的轻量级bootloader
- 在eclipse打包后部署到weblogic上运行地址的时候报错
- Ubuntu: 如何在开机的时候进入命令行
- 读后感在写感想的时候
- 进入Activity的时候隐藏软键盘当获取到焦点的时候弹出软键盘
- 在写原生js轮播图的时候,无法获取到left属性
- I2C设备地址的设定
- qcom 系列的i2c设备的power 在dtsi里定义的时候需要注意的
- qcom 系列的i2c设备的power 在dtsi里定义的时候需要注意的
- 怎么写stm8的IAP升级的bootloader和app
- IAR for stm8 中指定编译的起始地址
- c++ 函数调用在进入下一个循环的时候会再次初始化参数,将函数体直接写进去就正常
- java 写数据时候,插入到指定行的位置
- Java SAX解析操作
- 01背包问题-个人见解
- CodeForces 446C DZY Loves Fibonacci Numbers(线段树+数论)
- 测试
- 小白学tkinter(Text组件的Indexes(索引)用法)
- STM8的I2C在写地址的时候进入到assert_failed
- 如何有效高速生产天地盖?
- UVA
- HDU 2795 线段树
- [JZOJ5250]质数
- android 通知覆盖以及PendingIntent参数问题
- 线程之守护线程
- Android6.0运行时权限扩展篇
- Android中aar和jar文件的认识