你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
双串口连续发送丢字节
[复制链接]
liulei84-273821
提问时间:2011-5-16 17:56 /
小弟初用103RBT6,从论坛下了个例程双串口连续发送的,结果丢字节程序如下 请教:
SystemInit();
USART_Configuration();
USART1_SendString("USART1");
USART2_SendString("USART2");
程序如上,USART2的发送丢掉了首字节,有木有人遇到过?
赞
0
收藏
0
评论
8
分享
发布时间:2011-5-16 17:56
举报
请先
登录
后回复
8个回答
liulei84-273821
回答时间:2011-5-16 17:58:30
a0a.1 0b0c
RE:双串口连续发送丢字节
沙发补充一下,应该不是TC首发送清零问题,因为两个串口一样的程序USART1的配置一样的
赞
0
评论
回复
支持
反对
废鱼
回答时间:2011-5-16 18:04:13
a0a.1 0b0c
RE:双串口连续发送丢字节
不看程序不知道你的问题所在,我猜想几个问题:
1、串口配置有错
2、发送串口时,要等待发送完毕以后,再发送下一个字节内容。
赞
0
评论
回复
支持
反对
liulei84-273821
回答时间:2011-5-18 10:37:57
a0a.1 0b0c
RE:双串口连续发送丢字节
仿真单步执行没有问题,或者在程序里打个断点也没问题,没断点RUN就丢了又,还是没人碰到过么?另USART_SR 在发送第一个字节之前应该是80还是C0呢?我单步执行发现他是80,在初始化SR之后打断点却是C0但都不会出问题。。。
赞
0
评论
回复
支持
反对
liulei84-273821
回答时间:2011-5-18 17:18:21
a0a.1 0b0c
RE:双串口连续发送丢字节
问题已解决,但具体原因说不上来,原来发送之前TC清零是用USART_ClearFlag,导致丢字节。现在改用USART_GetFlagStatus就不会丢了,谁知道咋回事?
赞
0
评论
回复
支持
反对
废鱼
回答时间:2011-5-18 17:58:05
a0a.1 0b0c
RE:双串口连续发送丢字节
发送的时候要先发送数据,然后等待发送完成。不然后面会把前面的内容冲掉。你出现这个问题就是因为后面的内容把前面的冲掉了,解决这个问题发送单个字符可以参考下面代码。
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
赞
0
评论
回复
支持
反对
liulei84-273821
回答时间: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++;
}
}
赞
0
评论
回复
支持
反对
liulei84-273821
回答时间: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丢掉首字节的初始化,未屏蔽的是现在能完整发送的初始化。看来我这问题挺偏的啊 版主你没碰见过?
赞
0
评论
回复
支持
反对
liulei84-273821
回答时间:2011-5-19 15:45:05
a0a.1 0b0c
RE:双串口连续发送丢字节
我是看到手册里面有这么句话:推荐软件写0清除TC只在多缓冲器通讯模式下使用。 于是改成现在读写寄存器清零TC的方法的,只是不知道何谓多缓冲器通讯模式
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:双串口连续发送丢字节
RE:双串口连续发送丢字节
1、串口配置有错
2、发送串口时,要等待发送完毕以后,再发送下一个字节内容。
RE:双串口连续发送丢字节
RE:双串口连续发送丢字节
RE:双串口连续发送丢字节
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
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++;
}
}
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丢掉首字节的初始化,未屏蔽的是现在能完整发送的初始化。看来我这问题挺偏的啊 版主你没碰见过?
RE:双串口连续发送丢字节