历史上的今天
今天是:2025年07月27日(星期日)
2019年07月27日 | stm32下面控制RS485发送有一定概率出错的情况
2019-07-27 来源:eefocus
环境:stm32 72M时钟 串口波特率9600 RS485芯片 发送的数据每组16byte
原程序(未修改):
//RS485 发送len个字节
//buf:发送区首地址
//len:发送的字节数
void RS485SendData(u8 *buf,u8 len)
{
u8 t;
RS485_TX_EN=1; //设置为发送模式
for(t=0;t while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); USART_SendData(USART2,buf[t]); } while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); RS485_RX_CNT=0; RS485_TX_EN=0; //设置为接收模式 } 修改后(串口发送前后都需要延时20us): //RS485 发送len个字节 //buf:发送区首地址 //len:发送的字节数 void RS485SendData(u8 *buf,u8 len) { u8 t; RS485_TX_EN=1; //设置为发送模式 for(t=0;t while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); delay_us(20); //延时20us USART_SendData(USART2,buf[t]); delay_us(20); //延时20us } while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); RS485_RX_CNT=0; RS485_TX_EN=0; //设置为接收模式 } 总结:串口发送前和发送后都需要延时20us,不然会出现一定概率数据出错的问题,经过多天分析,一直看不准是发送错误还是接受错误,最后快要放弃的时候主从机都修改了,一直修改程序,最后发现这是主从机都需要配合的问题,搞了这么久,终于解决问题了!
史海拾趣
|
用一个嵌入式设备把一个usb的拨号上网设备 用ppp拨号上网,然后通过以太网口提供ppp oe服务,要能够使这个设备能够支持snmp管理,可是拨号上网设备的ip又要能够传给以太网口接着的路由器或者机器。其实就是一个支持snmp的modem。不过那位大侠能帮个 ...… 查看全部问答> |
|
硬件:2410 SIM300D 在wince420使用TAPI拨号时,初始化成功,正常打开线路,能够正常拨打电话 但是在挂断电话得时候,去无任何响应! 监控串口输出也没有任何输出。 请求帮助,谢谢… 查看全部问答> |
|
我在AddDevice函数内,创建了3个设备,用DeviceTree工具是可以看到设备的 但是我怎样在PC的设备管理器内把驱动内创建的设备体现出来???… 查看全部问答> |
|
可以通过浏览器访问交换机的web界面对交换机进行各种参数的设置,请问这种是如何实现的?是不是首先在本地建立好相关函数,然后通过web界面经由web服务器调用这些函数?能详细一些最好,谢谢! … 查看全部问答> |
|
使用tms320f2812芯片,在线仿真时CAn运行正常,可烧写到flash后,其他部分运行正常,只有CAN不能通信,这是怎么回事啊?请教大家!… 查看全部问答> |
|
$(\'swf_Clf\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMjY0NzU1MzUy/v.sw ...… 查看全部问答> |




