探索者串口发送数据死循环

2019-07-20 10:02发布

当我接收到一个数据之后,下面的程序就开始发送hello word然后一直发一直发,停不下来。
考虑过用下面的两个函数,但是不是很懂,还请各位大佬指教一下。
USART_ClearITPendingBit()
USART_ClearFlag()




void USART1_IRQHandler(void)
{
        u8 d;
        static unsigned char display[]="hello word";
        if(USART_GetITStatus(USART1,USART_IT_RXNE))
        {
                        for(d=0;d<sizeof(display);d++)
                        {
                                USART_SendData(USART1,display[d]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)!=SET);
                        }
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
彼岸花
1楼-- · 2019-07-20 12:50
路人曦 发表于 2018-1-15 17:06
立即发送写函数就行嘞。。。讲真没必要用中断,得到数据就发送,收到数据就回复,这些写在函数里面都很容 ...

问题已经解决了,当时其实程序都写对了。。。当时接收到数据之后,发送了两个hello word然后我以为有问题,就一直改,结果是我的串口助手没调好,以文本形式发送。。。。。
mill
2楼-- · 2019-07-20 15:42
 精彩回答 2  元偷偷看……
彼岸花
3楼-- · 2019-07-20 15:43
mill 发表于 2018-1-15 15:39
没有清除中断,所以USART1中断一直都会触发,d又是个局部变量,每次进来都是0,所以一直发

那用哪个函数去清除中断呢?USART_ClearITPendingBit吗?
彼岸花
4楼-- · 2019-07-20 16:34
mill 发表于 2018-1-15 15:39
没有清除中断,所以USART1中断一直都会触发,d又是个局部变量,每次进来都是0,所以一直发

d是局部变量没关系啊,我只要执行完for就好了啊,然后下次进入中断又重新赋值啊,数组是静态变量,所以和d无关吧
路人曦
5楼-- · 2019-07-20 17:41
 精彩回答 2  元偷偷看……
彼岸花
6楼-- · 2019-07-20 19:39
路人曦 发表于 2018-1-15 16:11
= = 串口中断发送。。。一般来说只会用串口中断来接收。

这个我也知道。。。。但是,假如说我要立即发送这个东西呢,就是说一接收到就立马返回一个值

一周热门 更多>