电路如图,主函数实现功能是先初始化GPIO,再配置USART1工作模式,DIR为1即发送状态,先发送3个数据(如0x54,0x54,0x54),再DIR为0即接收状态,循环检查状态位RXNE,直到接收到数据(如41),然后DIR为1,将接收到的数据再发送出去。整个过程使用STM32f107,和max3485,以及一个485转串口模块,连接电脑。
问题如下:
1.发送数据时:串口调试助手上接收的数据总是 00 FF 54 54 54,多出一个00 FF,这是怎么回事??手动复位时发现按下复位按键后串口调试助手收到00,松开后,收到FF 54 54 54 54
2接收数据时:若JLINK单步仿真,则数据为 00 FF 54 54 54 41(前两个数不知从哪里来,每次发都会有,即问题1中的情况,第3,4,5个数为实际程序中发的数,第六个数 为stm32接收到串口调试助手发送的数后回显)。此时接收还正常。
但是在接收数据时,如不是单步仿真,而是硬件运行程序或软件仿真全速执行程序,则数据为00 FF 54 54 54 54,(注意此时我还没有通过串口调试助手向stm32发送数据41,但串口调试助手显示的数据54以比正常情况多了一个),正常情况应该是死循环等待我发送数据,可实际上多次测试发现,软件竟然将stm发送给串口调试助手的最后一个数据,又当成了串口调试助手发送给stm32的数据,置位了RXNE,并回显至串口调试助手这时就有了上面的数据4个54。
实在不明白为什么会这样,已经困惑了好几天了,不知道有没有人遇到和我相同的问题,求好心人解答。
另外:串口调试助手和232转485模块肯定不存在问题,因为在别人板子上用很正常
|