串口助手无显示,但下方显示不断收到数据,16进制显示全零

2019-08-21 13:18发布

本帖最后由 909425711 于 2017-4-13 22:51 编辑

如题,我按照原子大哥的例程编写简易的串口程序,但是一直无法正常收发数据,串口精灵上显示全空,使用16进制显示后则全部都是0,使用原子例程的hex则正常。但是,我的程序基本就是按照原子的程序写得,除了没有用到延时、led灯外,其余都是照抄的。想问问是什么原因。file:///C:UserslenovoAppDataRoamingTencentUsers2314121630QQWinTempRichOle@~GPF)W(T}WUJ`06DPJ2$82.png
int main (void)
{        
        usart_Init(9600,72);
        while(1)
        {        
                USART1->DR=2;          //循环发送数字02
                while((USART1->SR&(1<<7))==0);
        };        
        return 0;        
}


void usart_Init (u16 botelv,u16 MHz)
{        
        float x=MHz*16000000.0/botelv;         
        NVIC_InitTypeDef NVIC_Init1;
        RCC->APB2ENR|=1<<14|1<<2;
        RCC->APB2RSTR|=1<<14;
        RCC->APB2RSTR&=~(1<<14);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);            //此处使用了misc库函数来初始化中断
        NVIC_Init1.NVIC_IRQChannel=37;
        NVIC_Init1.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_Init1.NVIC_IRQChannelSubPriority=1;
        NVIC_Init1.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_Init1);        
        GPIOA->CRH&=0XFFFFF00F;
        GPIOA->CRH|=0x000004b0;
        USART1->BRR=(u16)x;
        USART1->CR1|=0X200C;
        USART1->CR1|=1<<5;
        USART1->CR1|=1<<8;
}


void USART1_IRQHandler(void)
{
        u8 res;        
        GPIOA->CRH|=0x3;
        GPIOA->ODR|=1<<8;
        if(USART1->SR&(1<<5))//接收到数据
        {         
                res=USART1->DR;
                if((USART_RX_STA&0x8000)==0)//接收未完成
                {
                        if(USART_RX_STA&0x4000)//接收到了0x0d
                        {
                                if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                                else USART_RX_STA|=0x8000;        //接收完成了
                        }else //还没收到0X0D
                        {        
                                if(res==0x0d)USART_RX_STA|=0x4000;
                                else
                                {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收         
                                }                 
                        }
                }                                                                                                
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。