想做一个RS485和RS232相互转换的板子,遇到了奇怪的问题。问题描述如下:232转485丢数据。 485转232正常。 main()函数中有一个延时函数,延时时间越长丢字节的现象越不明显,延时时间越短 丢字节的现象就越明显。丢数据的方式一般是丢数据帧的尾部。比如我从232出输入“ABCDEFGHI”, 从485除出来就变成“ABCDEF”了。而且多次发送相同的内容,丢掉的内容基本也一样。 MAINå½æ° 程序代码: |
【STM32F0开发日志/评测/笔记】+互补PWM波的产生
STM32F030 PB14和PB15无法输出PWM求助
【STM32F030探索套件】序列之五 外部中断
【STM32F0开发日志---二】+ucosii.2.92移植在STM32F030
上传个STM32F0+5110+内部温度传感器的菜鸟实例
【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败
求一份STM32F051 I2C驱动LCD 12864的例程
STM32F0 M0 向结构体赋值进入HardFault异常
STM32F0 ADC-DMA方式采集2路数据时出现问题
STM32F030C8T6,TIM16定时慢很多问题?
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
延时过短,如果在在你发送的过程中串口又接收到了数据,但是这时你已经把发送的个数RS232_RX_CNT变量传递给了发送函数里面了,虽然接收到了数据计数变量RS232_RX_CNT 也在增加 但是这时不会影响发送函数中的发送个数变量了,所以 这时就会丢数据
同意楼上意见。是全局变量volatile uint8_t RS232_RX_CNT使用错误引起的乱序。主循环和中断函数交错赋值,导致RS232_RX_CNT与实际的接收字节量不符。
---------------------------------------------------------
如果你非要这么玩,可以在发送函数RS232_Send(...)以及变量赋值后加延时,以等待接收中断完全接收完数据。(个人觉得没啥意思)---------------------------------------------------------
引用你的代码:
while(1)
{
if(RS485_RX_CNT>0)
{
RS232_Send((uint8_t *)RS485_RX_BUF,RS485_RX_CNT);
RS485_RX_CNT=0; delay();
}
if(RS232_RX_CNT>0)/*232接收缓冲区里有数据*/
{
/*去掉延时就不能正常工作,原因不明。
单帧的数据量越大需要越大的演延时。*/
delay();
RS485_Send((uint8_t *)RS232_RX_BUF,RS232_RX_CNT);/*485发送*/
RS232_RX_CNT=0;
}
}