打印

怪现象?串口发送丢数

[复制链接]
6088|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaobq|  楼主 | 2010-10-13 21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用STM32F103VC控制器,使用串口2,9600波特率,使用2.03库,程序很简单,用串口把一个数组顺序发出去,

//和上位机通信
void uart2_send_byte(u8 ch)
{
  USART_SendData(USART2, ch);
  /* Loop until the end of transmission */
  while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
  {
  }
}
但是碰到一个怪现象,第一个字符实“:”(0x24)际上控制器没有发出去,因为上位机接收软件没有收到,这是程序代码:
   uart2_send_buf[0] = ':';                         //组织缓冲区
   uart2_send_buf[1] = slave_addr[0];               //下位机地址
   uart2_send_buf[2] = slave_addr[1];
   uart2_send_buf[3] = uart2_receive_buf[3];              //功能码
   uart2_send_buf[4] = uart2_receive_buf[4];
   uart2_send_buf[5] = uart2_receive_buf[9];              //数据长度
   uart2_send_buf[6] = uart2_receive_buf[10];
   uart2_send_buf[7] = uart2_receive_buf[11];
   uart2_send_buf[8] = uart2_receive_buf[12];
  省略一些赋值代码
    for(ii=0;ii<len;ii++)
     uart2_send_byte(uart2_send_buf[ii]);


但是,为解决这个问题,首先让串口发送一个无关数据,如发一个0x00,则后续数组能完整地发送出去,上位机软件显示并没有收到第一个0x00,如下代码:
   uart2_send_byte(0x00);
   uart2_send_buf[0] = ':';                         //组织缓冲区
   uart2_send_buf[1] = slave_addr[0];               //下位机地址
   uart2_send_buf[2] = slave_addr[1];
   uart2_send_buf[3] = uart2_receive_buf[3];              //功能码
   uart2_send_buf[4] = uart2_receive_buf[4];
   uart2_send_buf[5] = uart2_receive_buf[9];              //数据长度
   uart2_send_buf[6] = uart2_receive_buf[10];
   uart2_send_buf[7] = uart2_receive_buf[11];
   uart2_send_buf[8] = uart2_receive_buf[12];
  省略一些赋值代码
    for(ii=0;ii<len;ii++)
     uart2_send_byte(uart2_send_buf[ii]);
不知道这是什么原因,以前碰见过这个问题,后来现象没有出现,今天这个结果必然出现,请高手指教,这是什么原因导致的,解决方法如何?谢谢!
沙发
hz198119| | 2010-10-15 16:07 | 只看该作者
我也遇到这个类似的问题了
程序已进入while(1)的时候,不能立刻发送,需等候1s左右后就可正常发送。
还没找到原因
郁闷中ing

使用特权

评论回复
板凳
cy757| | 2010-10-15 17:25 | 只看该作者
这种情况大多是焊错了晶振,系统时钟倍频设计错误,或者是波特率设置错误。

使用特权

评论回复
地板
yybj| | 2010-10-15 19:13 | 只看该作者
我也碰到过,想自知道具体的原因,如何检测

使用特权

评论回复
5
gaobq|  楼主 | 2010-10-15 23:05 | 只看该作者
汇报一下调试经过
程序中有段代码,每次发送必然出现丢失第一个字节的现象:
阶段1:将判断发送完成标志由TC改成TXE,当时好像解决问题了,可是过了会儿又不行了,郁闷,改回TC;
阶段2:跟踪单步,发现读取USART_SR寄存器并不能清楚TC标志,于是乎在每次USART_SendData前增加一条写SR寄存器语句,我调试的代码处发送正常了,可是程序中其它同类代码有得还是丢,继续郁闷中;
疑问:
1.我用的ST库uart.c版本是0.3,2007年的,不知有没有bug;
2.不会是硬件有问题吧?
3.想升级版本库试试,哎,目前没有思路,全是死描碰瞎耗子!迷惑之处在于此故障不稳定,有时出现,有时不出现。

使用特权

评论回复
6
gaobq|  楼主 | 2010-10-15 23:07 | 只看该作者
照cy757说法,莫非,晶振有问题?

使用特权

评论回复
7
gaobq|  楼主 | 2010-10-15 23:10 | 只看该作者
我还试验了一种方法,9600波特率,写senddata后等待2ms,清TC,再发,不能解决问题,理论上等2ms肯定已经发完了。但是以上每种方法:为什么只是丢第一个字节了。如果在被发送字符前发送一个0x00空字符,有的时候又多数,不好处理!

使用特权

评论回复
8
gaobq|  楼主 | 2010-10-16 09:05 | 只看该作者
找到一种特定的情形:
发送5个数正常;
发送10个数,第一个数就丢失,两次发送是同一个函数,把该注释的都注释了。

使用特权

评论回复
9
gaobq|  楼主 | 2010-10-16 12:19 | 只看该作者
尝试使用中断发送,好像有戏

使用特权

评论回复
10
gaobq|  楼主 | 2010-10-16 13:44 | 只看该作者
中断发送方式也失败了,也是不稳定,第一个数时丢时不丢

使用特权

评论回复
11
gaobq|  楼主 | 2010-10-16 13:46 | 只看该作者
更换为内部时钟,未能解决问题,能否说明不是硬件晶振的是,应该还是软件上哪里设置的有问题,困惑中。。

使用特权

评论回复
12
rockli| | 2010-10-17 11:38 | 只看该作者
示波器才是硬道理。别光看上位机有没有接收到。用示波器看引脚有没有发送出去。

使用特权

评论回复
13
gaobq|  楼主 | 2010-10-17 17:09 | 只看该作者
手头没有示波器,示波器能捕捉到短暂的一个字符串,并解析是什么字符吗?我曾怀疑过力特的USB to 232线,接在台式计算机串口上,现象一样,上位机接收软件也换了好几个,果真做到了怀疑一切的地步。

使用特权

评论回复
14
gaobq|  楼主 | 2010-10-17 17:17 | 只看该作者
使用英蓓特STM32V100-II开发板,ST的STM32F10x_StdPeriph_Lib_V3.3.0例程仍然出现串口发送第一个数丢失现象
现象:程序复位启动,第一个数据发不出去,丢失。
(1)USB转串口、计算机硬件串口都试了,不是串口接收的事
(2)自己做的板子使用103VC和英蓓特的STM32V100-II开发板开发板都一样,启动后第一次发送丢数。
(2)程序在9600和115200波特率下都丢
(4)程序在MDK模拟环境下都正常
程序可是st的官方程序,只是在发送上,为清楚地看出现象,稍加改动,实在不清楚是哪里出了问题。
附件为程序代码,敬请批评指正。anyuan_cpu为测试工程设置,是原来的STM32F10B-eval

使用特权

评论回复
15
gaobq|  楼主 | 2010-10-17 17:19 | 只看该作者

RE: 怪现象?串口发送丢数,快跳楼了!

我的程序代码

CPU_V3.3.rar

862.02 KB

使用特权

评论回复
16
gaobq|  楼主 | 2010-10-17 17:20 | 只看该作者
官方模板丢书代码

使用特权

评论回复
17
gaobq|  楼主 | 2010-10-17 17:21 | 只看该作者
换过高精度8.000MHz晶振,未能解决问题,哎!!

使用特权

评论回复
18
gaobq|  楼主 | 2010-10-17 17:22 | 只看该作者
现在使用103VC,换个101试试,看是否用错了系列!

使用特权

评论回复
19
rockli| | 2010-10-17 18:10 | 只看该作者
手头没有示波器,示波器能捕捉到短暂的一个字符串,并解析是什么字符吗?我曾怀疑过力特的USB to 232线,接在台式计算机串口上,现象一样,上位机接收软件也换了好几个,果真做到了怀疑一切的地步。 ...
gaobq 发表于 2010-10-17 17:09

数字存储示波器可以单次采样,抓到开始变化的波形,自己根据起始位、停止位就能分析出发送的数据。

使用特权

评论回复
20
gaobq|  楼主 | 2010-10-17 18:29 | 只看该作者
惭愧,兄弟我是贫民水平,石器+木棒的办公条件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

172

主题

827

帖子

5

粉丝