关于写接收中断函数中的buffer问题

2019-08-14 18:26发布

请问大神们,我自己写了一个在中断函数中的buffer,用于接收上位机通过串口发送的数据。但是这样写后为什么标志位rx_flag始终不能置1呢?我发送 55 10 10 10 输出不了收到的数据,请问我是哪里有问题么?[mw_shl_code=c,true]int main(void)
{       
        while(1)
        {
                if(rx_flag==1)
                {
                        rx_flag=0;
                        for(i=0;i<4;i++)
                        {
                                USART_SendData(USART1,Rec);
                                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
                        }
               

                       
                }
        }
}
void USART1_IRQHandler(void)
{
        u8 Rx_Counter;
        u8 ch;
        if (USART_GetITStatus(USART1,USART_IT_RXNE))
        {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);

                ch=USART_ReceiveData(USART1);
                if(Rx_Counter==0)
                {
                        if(ch==0x55)
                        {
                                Rec[0]=0x55;
                                Rx_Counter++;
                        }
                        else
                        {
                                Rx_Counter=0;
                        }
                }
                else if(Rx_Counter==4)
                {
                        Rx_Counter=0;
                        rx_flag=1;
                }
                else
                {
                        Rec[Rx_Counter++]=ch;
                }
               
        }
}[/mw_shl_code]



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
oywjex
1楼-- · 2019-08-15 06:24
昊430 发表于 2017-8-5 16:54
加到4了,但是你一共就发了4个字节的数据,需要再发送一个字节才能再进入中断判断实现你的标志位置位,我 ...

您说的有道理,但是我改了后,还是没有任何反应呢,依然输出不了。库函数肯定是对的,因为如果我就改为收1个字节,那么就正常的。
oywjex
2楼-- · 2019-08-15 11:23
oywjex 发表于 2017-8-5 17:27
您说的有道理,但是我改了后,还是没有任何反应呢,依然输出不了。库函数肯定是对的,因为如果我就改为收 ...

我改成这样了
[mw_shl_code=c,true]                else if(Rx_Counter==3)
                {
                        Rx_Counter=0;
                        rx_flag=1;
                        Rec[3]=ch;
                }
                else
                {
                        Rec[Rx_Counter++]=ch;
                }[/mw_shl_code]
昊430
3楼-- · 2019-08-15 15:25
oywjex 发表于 2017-8-5 17:28
我改成这样了
[mw_shl_code=c,true]                else if(Rx_Counter==3)
                {

你最好使用仿真器仿真一下,设置断点,看能不能执行rx_flag=1;这一句
正点原子
4楼-- · 2019-08-15 15:53
 精彩回答 2  元偷偷看……
oywjex
5楼-- · 2019-08-15 20:04
昊430 发表于 2017-8-5 17:32
你最好使用仿真器仿真一下,设置断点,看能不能执行rx_flag=1;这一句

我设置了断点,然后用串口助手发了4个字节 然后就只进过一次中断 然后就一直在while里面卡主了,没有理解到呢
oywjex
6楼-- · 2019-08-15 21:55
正点原子 发表于 2017-8-7 00:56
仿真找问题

我设置了断点,然后用串口助手发了4个字节 然后单步执行,但是就只进过一次中断 然后就一直在while里面卡住了,

一周热门 更多>