用stm32的uart4做串口通讯。之前有用查询的方式在main中发送数据到外部,没有碰到什么问题。今天,想改成中断来接收和发送。写好代码,单步调试时,一开始是可以进接收中断的。当我无意改动一句后就怎么也进不了中断了。后来才意识到,ctrl脚被我拉高了。拉高改成拉低后,又可以进中断了。但打开RX缓存,发现前4个字节对的,后4个字节错了。
奇怪!后来,检查了中断优先级,ctrl引脚电平,超时判断等都没发现问题。后来,回忆起以前用DSP2407时RX引脚要上拉的。而我在代码里设置的RX是浮空输入,改成上拉输入还是不行。外面焊一个10k上拉电阻也不行。
逼得没办法,用示波器来测量RX引脚,发现波形和缓存里的数据对应得上,而和我串口调试工具里的数据对不上。于是果断怀疑用的RS232转485这个东东有问题。于是改成我司触屏和我控制板通讯。结果是缓存数据完全正确。后来,把发送中断打开,也没有问题。
后记:
1.后来发送还是有点小问题,就是最后一个字节发不出来。把发送中断由TXEIE改成TC后此现象消失
2.不用触屏,改用USB转485,还是用串口调试助手,一切正常。
文章评论(0条评论)
登录后参与讨论