打印

STM32程序问题

[复制链接]
1411|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序是使用中断方式接收PC数据,然后回发,
A和B采用TC和TXE标志判断。
A程序发送的数据长度超多一定程度(比如20),发送几次单片机就停了,不知怎么回事。
B程序无任何问题
使用串口调试助手,发送间隔20ms
程序A:
void USART1_IRQHandler(void)
{
        uint8_t ch;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
        {                
           ch = USART_ReceiveData(USART1);               
    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        USART_SendData(USART1,  ch);
       
        }          
}

程序B:

void USART1_IRQHandler(void)
{
        uint8_t ch;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
        {                
           ch = USART_ReceiveData(USART1);               
    while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
        USART_SendData(USART1,  ch);
       
        }          
}

沙发
arefeng| | 2014-10-10 16:16 | 只看该作者
可能是发送太快了,或许是没用缓存的原因,丢了数据

使用特权

评论回复
板凳
qq4988| | 2014-10-10 17:21 | 只看该作者
换个串口工具试试

使用特权

评论回复
地板
mmuuss586| | 2014-10-10 19:02 | 只看该作者
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
应该停在这一句了吧;

不管是哪个程序,都要加容错处理(比如超时退出WHILE循环)

使用特权

评论回复
5
拿起书本| | 2014-10-10 19:39 | 只看该作者
Tc 的用法有问题。这个是传输结束标志,也就是说如果当时没有数据正在传输,程序就死在那儿傻傻地等下去了
Txe 是传送缓冲区空标志,只要没有数据可送就会置位,所以没问题 。

使用特权

评论回复
6
fanxsd| | 2014-10-10 19:40 | 只看该作者
mmuuss586 发表于 2014-10-10 19:02
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
应该停在这一句了吧;

版主思路就是牛啊!

使用特权

评论回复
7
mmuuss586| | 2014-10-10 19:42 | 只看该作者
fanxsd 发表于 2014-10-10 19:40
版主思路就是牛啊!

尽量用些常用的判断中断标志位的方式;

使用特权

评论回复
8
jxmzzr| | 2014-10-12 19:52 | 只看该作者
判断头码,校验码,对不上的话,就把整包丢掉,数据指针清零.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

506

主题

2446

帖子

8

粉丝