关于stm32107和103的rs485通信

2019-03-23 19:36发布

写了主机和从机的程序,两块107可以进行询问——应答方式的485通信,现在把程序移植到103上面,不行。我是用数组保存数据帧的,在数据帧发送或接收完成前板子时钟保持发送或接收的状态。标志位用到的是TXE和RXNE,通过中断方式。把运行过程的中间参数发送到串口调试助手上看,发现接收到的数据帧(其实是一个个的字母组成)中间出现大量空格,字符串不能连续显示,也有接收的字符与显示的不一致。 请问是什么原因?跟两个芯片的时钟频率不一样有关吗?但我感觉好像系统里面都是配置到72M的。  求解,求解。。。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
虚V界
1楼-- · 2019-03-24 11:30
 精彩回答 2  元偷偷看……
731955123
2楼-- · 2019-03-24 15:59
有用到。只是在接收中断里设置断点后再单步运行发现除了第一个字符 后面的字符是收不到的,这样好像没多大意思,所以直接用了printf在调试助手上显示。不知道是不是我不太熟练仿真器的使用。
虚V界
3楼-- · 2019-03-24 19:36
你在中断后面设断点,第一个都正确了,那后面的只关系到一些细节问题了
731955123
4楼-- · 2019-03-24 20:03
 精彩回答 2  元偷偷看……
虚V界
5楼-- · 2019-03-25 01:02
USART_ITConfig(USART3,USART_IT_RXNE,DISABLE);了
结束了又没打开,只能收到一个字节
另外你在RxBuffer[RxCounter++] = RxChar ; 前面加多一句长度判断吧counter的超长判断。
如果你这样写
RxChar = USART_ReceiveData(USART3);
RS232_SendData(RxChar);
你很容易就发现立即收发很容易出问题,一旦出问题了只能下电,下一次上电还未必能正常。我建议中间加多两到三条指令做为一个时间缓冲。我估计读出这个数据它是需要几个机器周期的,毕竟串口也慢,加几句话到中间占个读取时间。

一周热门 更多>