你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
ST意法半导体中文论坛
»
论坛
›
【技术区】
›
STM32
›
双串口连续发送丢字节
返回列表
查看:
6369
|
回复:
8
双串口连续发送丢字节
[复制链接]
liulei84-273821
liulei84-273821
当前离线
在线时间
1 小时
UID
273821
ST金币
0
蝴蝶豆
0
注册时间
2011-3-30
5
主题
31
回帖
0
蝴蝶豆
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
最后登录
2019-8-30
收听TA
发消息
发表于 2011-5-16 17:56:23
|
显示全部楼层
|
阅读模式
a0a.1 0b0c
小弟初用103RBT6,从论坛下了个例程双串口连续发送的,结果丢字节程序如下 请教:
SystemInit();
USART_Configuration();
USART1_SendString("USART1");
USART2_SendString("USART2");
程序如上,USART2的发送丢掉了首字节,有木有人遇到过?
回复
使用道具
举报
liulei84-273821
liulei84-273821
当前离线
在线时间
1 小时
UID
273821
ST金币
0
蝴蝶豆
0
注册时间
2011-3-30
5
主题
31
回帖
0
蝴蝶豆
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
最后登录
2019-8-30
收听TA
发消息
楼主
|
发表于 2011-5-16 17:58:30
|
显示全部楼层
a0a.1 0b0c
RE:双串口连续发送丢字节
沙发补充一下,应该不是TC首发送清零问题,因为两个串口一样的程序USART1的配置一样的
回复
支持
反对
使用道具
举报
安
安
当前离线
在线时间
1469 小时
UID
123826
ST金币
0
蝴蝶豆
239
注册时间
2009-4-22
134
主题
4489
回帖
239
蝴蝶豆
版主
最后登录
2020-12-9
收听TA
发消息
发表于 2011-5-16 18:04:13
|
显示全部楼层
a0a.1 0b0c
RE:双串口连续发送丢字节
不看程序不知道你的问题所在,我猜想几个问题:
1、串口配置有错
2、发送串口时,要等待发送完毕以后,再发送下一个字节内容。
回复
支持
反对
使用道具
举报
liulei84-273821
liulei84-273821
当前离线
在线时间
1 小时
UID
273821
ST金币
0
蝴蝶豆
0
注册时间
2011-3-30
5
主题
31
回帖
0
蝴蝶豆
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
最后登录
2019-8-30
收听TA
发消息
楼主
|
发表于 2011-5-18 10:37:57
|
显示全部楼层
a0a.1 0b0c
RE:双串口连续发送丢字节
仿真单步执行没有问题,或者在程序里打个断点也没问题,没断点RUN就丢了又,还是没人碰到过么?另USART_SR 在发送第一个字节之前应该是80还是C0呢?我单步执行发现他是80,在初始化SR之后打断点却是C0但都不会出问题。。。
回复
支持
反对
使用道具
举报
liulei84-273821
liulei84-273821
当前离线
在线时间
1 小时
UID
273821
ST金币
0
蝴蝶豆
0
注册时间
2011-3-30
5
主题
31
回帖
0
蝴蝶豆
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
最后登录
2019-8-30
收听TA
发消息
楼主
|
发表于 2011-5-18 17:18:21
|
显示全部楼层
a0a.1 0b0c
RE:双串口连续发送丢字节
问题已解决,但具体原因说不上来,原来发送之前TC清零是用USART_ClearFlag,导致丢字节。现在改用USART_GetFlagStatus就不会丢了,谁知道咋回事?
回复
支持
反对
使用道具
举报
安
安
当前离线
在线时间
1469 小时
UID
123826
ST金币
0
蝴蝶豆
239
注册时间
2009-4-22
134
主题
4489
回帖
239
蝴蝶豆
版主
最后登录
2020-12-9
收听TA
发消息
发表于 2011-5-18 17:58:05
|
显示全部楼层
a0a.1 0b0c
RE:双串口连续发送丢字节
发送的时候要先发送数据,然后等待发送完成。不然后面会把前面的内容冲掉。你出现这个问题就是因为后面的内容把前面的冲掉了,解决这个问题发送单个字符可以参考下面代码。
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
回复
支持
反对
使用道具
举报
liulei84-273821
liulei84-273821
当前离线
在线时间
1 小时
UID
273821
ST金币
0
蝴蝶豆
0
注册时间
2011-3-30
5
主题
31
回帖
0
蝴蝶豆
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
最后登录
2019-8-30
收听TA
发消息
楼主
|
发表于 2011-5-19 15:36:41
|
显示全部楼层
a0a.1 0b0c
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++;
}
}
回复
支持
反对
使用道具
举报
liulei84-273821
liulei84-273821
当前离线
在线时间
1 小时
UID
273821
ST金币
0
蝴蝶豆
0
注册时间
2011-3-30
5
主题
31
回帖
0
蝴蝶豆
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
最后登录
2019-8-30
收听TA
发消息
楼主
|
发表于 2011-5-19 15:39:10
|
显示全部楼层
a0a.1 0b0c
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丢掉首字节的初始化,未屏蔽的是现在能完整发送的初始化。看来我这问题挺偏的啊 版主你没碰见过?
回复
支持
反对
使用道具
举报
liulei84-273821
liulei84-273821
当前离线
在线时间
1 小时
UID
273821
ST金币
0
蝴蝶豆
0
注册时间
2011-3-30
5
主题
31
回帖
0
蝴蝶豆
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
最后登录
2019-8-30
收听TA
发消息
楼主
|
发表于 2011-5-19 15:45:05
|
显示全部楼层
a0a.1 0b0c
RE:双串口连续发送丢字节
我是看到手册里面有这么句话:推荐软件写0清除TC只在多缓冲器通讯模式下使用。 于是改成现在读写寄存器清零TC的方法的,只是不知道何谓多缓冲器通讯模式
回复
支持
反对
使用道具
举报
返回列表
浏览过的版块
签到区
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表