前期已经完成的事情:1、QT串口通信的编写使用QT5自带的QtSerialPort类(串口类)。
目前遇到的问题:1、用QT编写的上位机与stm32的通信存在问题缓冲区不能清零,就发多少就会接到后面不会每次都清空再填充。
分析问题:1、stm32串口接受中断判断的是\r\n(0x0d,0x0a),而QT上位机发出去的没有\r\n(我猜测是这个原因)然后将结束判断位变成(0x38,0x39)就实现了功能。
总结:总的来说是这样的没有对串口中断接受有深刻的理解,对通信传输没有摸透
这是最基本的模式,所以关于数據帧的封装帧头帧尾的定义就迎刃而解了。
最后再说一些关于stm32的串口通信的问题:初始化函数就不提了几个寄存器的配置。
断后就會跳到该函数执行。这里我们设计了一个小小的接收协议:通过这个函数配合一个
变量,由作者自行添加由于它起到类似寄存器的功能,这里暂且称之为寄存器) 实现对串口
表 5.3.1.1 接收状态寄存器位定义表
当接收到从电脑发过来的数据把接收到的数据保存在 USART_RX_BUF 中,同时在接收
状态寄存器( USART_RX_STA)中计数接收到的有效数据个数当收到回车(回车的表示由2个字节组成: 0X0D 和 0X0A)的第一个字节0X0D 时,计数器将不再增加等待0X0A 的到来,
而如果 0X0A 没有来到则认为这次接收失败,重新开始下一次接收如果顺利接收到0X0A,
则标记 USART_RX_STA 的第15 位这样完成一次接收,并等待該位被其他程序清除从而开始下一次的接收,而如果迟迟没有收到 则会丢弃前面的数据重新接收。
刚好为\r\n.如果结束符不是\r\n,那就用最后兩位结束符的ASCII码来代替0x0d,0x0A.(注意顺序)