编过一点点串口通信程序(28181云台),当时有些问题没想明白,现在瞎琢磨了下。
停止位怎么还有1.5位,不设停止位怎么也能用?
1. 也许大家都用了默认值。
2. 停止位和空闲的电平是一样的,多闲一会好像也没啥问题。
怎么从错误中恢复?
见过自动从高到低尝试波特率,需要在串口终端的键盘上不断敲击Q键,单板机上的程序循环接收,收到'Q'后退出。
电线不是下水管,电线上的信号会消失。之前错误的信息不(怎么)影响后续恢复过来。
比如RX期望8个data bit,TX只发5个data bit. 芯片内部根据设定的接受波特率算出采样率,每隔一段时间采样,可能把停止位和空闲当成数据位的1,倒不至于就“阻塞”住不动,像recv()一样不返回。然后是长长的空闲电平(慢速通信)。TX把参数设成和RX一样后,起始位为0,RX可以接收对。
反之,RX期望5个data bit, TX发8个data bit,RX被“晕眩”的时间可能更长,因为数据位的0可能会被当成起始位。不过还是不至于就死翘翘了。
电子工程师和软件工程师思维方式不同,起码做模拟电视的和玩socket编程(更准确地说,tcp编程:-))的看问题的方式不同。
RX不宜收到0干这个,收到1干那个,“握手信息”长点保险。收到不理解的信息后reset下自己或sleep一小会(随机值)更保险。
The command line used in every modem starts with ‘AT’ otherwise ‘at’ so these commands are named as AT commands. There are many commands which are used for controlling modems (wired dial-up) like ATD – Dial, ATA – Answer, ATH – Hook control & ATO – Come back to the online data state. These are supported by modems like mobile phones, GSM or GPRS.
标签:疑惑,commands,TX,RX,通信,串口,bit,data From: https://www.cnblogs.com/funwithwords/p/16607586.html