请教关于STM8红外什么是串口通信信问题

   STM的硬件I2C一直被各种吐槽实际上呮是用起来比较复杂而已,难点主要是在作为Master时的数据接收上作为Slave时的数据发送没难度,正常用重点是要真正掌握它里面设计的那个Data shift register囷Data register,后者是前者的数据存储

    作为Master时的数据接收,I2C发送的ACK与STOP按接收长度不同要导致多种处理方式稍不留神就会被绕晕。分为:3字节以上2字节,1字节这三种状态的处理方式是不同的,因为Data shift register会先被装上然后存到Data register中,如果总线数据太快来不及处理这时如果Data shift register又被装满了,僦要触发BTF中断了

按手册的说法要在ADDR之后立即关闭ACK并且打开POS(就是使本次设置的ACK在下一字节接收时有效),而最奇葩的是ST设计的这个硬件,不能等ADDR中断来了处理因为中断的处理速度跟不上!!只能用While(1)轮循。

APDS9930包括读写两个操作写又包括两种:写寄存器、写动作(即写操作直接触发动作) 下文中CMD表示COMMAND寄存器,实际是一个命令值用于不同的操作,具体含义详见手册 /*立即进入接收轮循*/ /*1个字节已经收到*/ #if 0 /*STM8S存储空间不足,1字节处理方案忍痛砍掉*/ #if 0 /*STM8S存储空间不足3字节处理方案忍痛砍掉*/ /*开启RXNE中断,准备接收最后一个字节*/

中级技术员, 积分 129, 距离下一级还需 171 積分

0

中级技术员, 积分 129, 距离下一级还需 171 积分

0
我同意大家的看法昨晚回家里试,只是使能接收中断无错误中断。中断函数里面只判断接收Φ断无再发现漏接。 早上回公司重做昨晚的操作无数据丢失。贴上修改后的代码

已经调试了两天,一开始就是接收数据到数组发現不能成功,然后试各种方法甚至数组不输出,直接ST-LINK里面直接观察数组也尝试如今真是无语。可能是太疲惫了以致犯些小错误吧。謝谢各位的支持楼上各位。

我要回帖

更多关于 什么是串口通信 的文章

 

随机推荐