你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
ST意法半导体中文论坛
»
论坛
›
【技术区】
›
STM32
›
双串口连续发送丢字节
返回列表
查看:
6377
|
回复:
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表