11477|31

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怪现象?串口发送丢数 [复制链接]

使用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]);
不知道这是什么原因,以前碰见过这个问题,后来现象没有出现,今天这个结果必然出现,请高手指教,这是什么原因导致的,解决方法如何?谢谢!
此帖出自stm32/stm8论坛

最新回复

                                 我23楼上传的程序就是st的模板  详情 回复 发表于 2010-10-18 16:43
点赞 关注
 

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我也遇到这个类似的问题了
程序已进入while(1)的时候,不能立刻发送,需等候1s左右后就可正常发送。
还没找到原因
郁闷中ing
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 这种情况大多是焊错了晶振,系统时钟倍频设计错误,或者是波特率设置错误。
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 我也碰到过,想自知道具体的原因,如何检测
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

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

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 照cy757说法,莫非,晶振有问题?
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 我还试验了一种方法,9600波特率,写senddata后等待2ms,清TC,再发,不能解决问题,理论上等2ms肯定已经发完了。但是以上每种方法:为什么只是丢第一个字节了。如果在被发送字符前发送一个0x00空字符,有的时候又多数,不好处理!
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
找到一种特定的情形:
发送5个数正常;
发送10个数,第一个数就丢失,两次发送是同一个函数,把该注释的都注释了。
此帖出自stm32/stm8论坛
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 尝试使用中断发送,好像有戏
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 中断发送方式也失败了,也是不稳定,第一个数时丢时不丢
此帖出自stm32/stm8论坛
 
 
 

回复

89

帖子

0

TA的资源

禁止访问

11
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 示波器才是硬道理。别光看上位机有没有接收到。用示波器看引脚有没有发送出去。
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 手头没有示波器,示波器能捕捉到短暂的一个字符串,并解析是什么字符吗?我曾怀疑过力特的USB to 232线,接在台式计算机串口上,现象一样,上位机接收软件也换了好几个,果真做到了怀疑一切的地步。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
使用英蓓特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
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

15
 

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

我的程序代码

CPU_V3.3.rar (862.02 KB)

此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

16
 
                                 官方模板丢书代码
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

17
 
                                 换过高精度8.000MHz晶振,未能解决问题,哎!!
此帖出自stm32/stm8论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

18
 
                                 现在使用103VC,换个101试试,看是否用错了系列!
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

19
 
手头没有示波器,示波器能捕捉到短暂的一个字符串,并解析是什么字符吗?我曾怀疑过力特的USB to 232线,接在台式计算机串口上,现象一样,上位机接收软件也换了好几个,果真做到了怀疑一切的地步。 ...
数字存储示波器可以单次采样,抓到开始变化的波形,自己根据起始位、停止位就能分析出发送的数据。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

20
 
                                 惭愧,兄弟我是贫民水平,石器+木棒的办公条件。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表