关于串口接收问题

2019-10-15 03:30发布


[mw_shl_code=c,true]int main(void)
{       
        IIC_Init();
        delay_init();
        uart_init(9600);
        dht11_init();
        gy30_init();
        usart3_init();
        Adc_Init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        while(1)
        {

                if(control==0xAA) //¿aÆô′«êä
                {       

                                Send485_humiture();
                                delay_ms(500);
                                Send485_light();
                                delay_ms(500);
                                Send485_soil();
                                delay_ms(500);
                                Send485_pm();
                                delay_ms(500);

                }
                if(control==0x55)
                {
                }
        }
       
}
void USART1_IRQHandler(void)
{
        if (USART_GetITStatus(USART1,USART_IT_RXNE))
        {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                control=USART_ReceiveData(USART1);

        }
}[/mw_shl_code]

我想通过电脑给单片机发送 0xAA数据 单片机通过485开始传数据   发送0x55就停止发送数据   但是我这样编程过后发送0xAA过后 只发送一轮数据也就是只走了if(control==0xAA)里面一次  不能自己一直循环呢?我的control值难道不是该一直等于0xAA么 请问问题在哪呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
小小怪
2019-10-15 23:19
本帖最后由 小小怪 于 2017-2-10 12:43 编辑
oywjex 发表于 2017-2-10 12:32
是这个问题!!解决了!但是为什么呀?就算有换行符这个值讲道理也不会被改变呀?

换新行发送的话除了 有效数据AA之外还会发送0A和0D,是基础知识
因为程序串口接收中断,control的值均可能是这三个值,才被if判断
等于0x0D的可能最大,你可以试一下加上“换新行发送” ,if(control==0x0D) {Send485_humiture();...}

一周热门 更多>