liulei84-273821 发表于 2011-5-16 17:56:23

双串口连续发送丢字节

小弟初用103RBT6,从论坛下了个例程双串口连续发送的,结果丢字节程序如下 请教:
 SystemInit();
 USART_Configuration();
 
 USART1_SendString("USART1");
 USART2_SendString("USART2");
程序如上,USART2的发送丢掉了首字节,有木有人遇到过?

liulei84-273821 发表于 2011-5-16 17:58:30

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

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

发表于 2011-5-16 18:04:13

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

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

liulei84-273821 发表于 2011-5-18 10:37:57

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

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

liulei84-273821 发表于 2011-5-18 17:18:21

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

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

发表于 2011-5-18 17:58:05

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

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

liulei84-273821 发表于 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++;
        }
}

liulei84-273821 发表于 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丢掉首字节的初始化,未屏蔽的是现在能完整发送的初始化。看来我这问题挺偏的啊 版主你没碰见过?

liulei84-273821 发表于 2011-5-19 15:45:05

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

我是看到手册里面有这么句话:推荐软件写0清除TC只在多缓冲器通讯模式下使用。 于是改成现在读写寄存器清零TC的方法的,只是不知道何谓多缓冲器通讯模式 :L
页: [1]
查看完整版本: 双串口连续发送丢字节