你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6370|回复: 8

双串口连续发送丢字节

[复制链接]

5

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-30
发表于 2011-5-16 17:56:23 | 显示全部楼层 |阅读模式
小弟初用103RBT6,从论坛下了个例程双串口连续发送的,结果丢字节程序如下 请教:
 SystemInit();
 USART_Configuration();
 
 USART1_SendString("USART1");
 USART2_SendString("USART2");
程序如上,USART2的发送丢掉了首字节,有木有人遇到过?
回复

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-30
 楼主| 发表于 2011-5-16 17:58:30 | 显示全部楼层

RE:双串口连续发送丢字节

沙发补充一下,应该不是TC首发送清零问题,因为两个串口一样的程序USART1的配置一样的
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-5-16 18:04:13 | 显示全部楼层

RE:双串口连续发送丢字节

不看程序不知道你的问题所在,我猜想几个问题:
1、串口配置有错
2、发送串口时,要等待发送完毕以后,再发送下一个字节内容。
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-30
 楼主| 发表于 2011-5-18 10:37:57 | 显示全部楼层

RE:双串口连续发送丢字节

仿真单步执行没有问题,或者在程序里打个断点也没问题,没断点RUN就丢了又,还是没人碰到过么?另USART_SR 在发送第一个字节之前应该是80还是C0呢?我单步执行发现他是80,在初始化SR之后打断点却是C0但都不会出问题。。。
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-30
 楼主| 发表于 2011-5-18 17:18:21 | 显示全部楼层

RE:双串口连续发送丢字节

问题已解决,但具体原因说不上来,原来发送之前TC清零是用USART_ClearFlag,导致丢字节。现在改用USART_GetFlagStatus就不会丢了,谁知道咋回事?
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-5-18 17:58:05 | 显示全部楼层

RE:双串口连续发送丢字节

发送的时候要先发送数据,然后等待发送完成。不然后面会把前面的内容冲掉。你出现这个问题就是因为后面的内容把前面的冲掉了,解决这个问题发送单个字符可以参考下面代码。
USART_SendData(USART1,ch);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
  {
  }
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-30
 楼主| 发表于 2011-5-19 15:36:41 | 显示全部楼层

RE:双串口连续发送丢字节

程序就是那样的,
void USART1_SendString(uint8_t *str)
{
        while(*str!='\0' && *str!='#')
        {
                USART_SendData(USART1, (uint8_t) *str);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){};
                str++;
        }
}
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-30
 楼主| 发表于 2011-5-19 15:39:10 | 显示全部楼层

RE:双串口连续发送丢字节

问题出在这里
//        USART_ClearFlag(USART2, USART_FLAG_TC);//清除发送完成标志,解决第一个字节无法发送的问题
//        USART_ClearFlag(USART1, USART_FLAG_TC);//清除发送完成标志,解决第一个字节无法发送的问题
        USART_GetFlagStatus(USART1, USART_FLAG_TC);
        USART_GetFlagStatus(USART2, USART_FLAG_TC);
被屏蔽掉的是以前的 发送前初始化,也就是导致串口2丢掉首字节的初始化,未屏蔽的是现在能完整发送的初始化。看来我这问题挺偏的啊 版主你没碰见过?
回复 支持 反对

使用道具 举报

5

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
2019-8-30
 楼主| 发表于 2011-5-19 15:45:05 | 显示全部楼层

RE:双串口连续发送丢字节

我是看到手册里面有这么句话:推荐软件写0清除TC只在多缓冲器通讯模式下使用。 于是改成现在读写寄存器清零TC的方法的,只是不知道何谓多缓冲器通讯模式
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版