求助,f7用hal库串口5问题

2019-07-20 09:15发布

如题,问题是串口5不通了,指纹程序,本来用的是串口2,但是串口2一个io是以太网的控制脚,另一个复用也用不了,所以就改为串口5,只有串口5不占用别的脚,改完之后指纹模块初始化就不通了, 所以问题就是串口5不通,求各位坛友相助。[mw_shl_code=c,true]
UART_HandleTypeDef UART5_Handler;//UART¾ä±ú
//3õê¼»ˉIO ′®¿ú2
//bound:2¨ìØÂê          
void uart5_init(u32 bound)
{  
        GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_GPIOD_CLK_ENABLE();                        //ê1ÄüGPIOcê±Öó
        __HAL_RCC_GPIOC_CLK_ENABLE();                        //ê1ÄüGPIOdê±Öó
        __HAL_RCC_UART5_CLK_ENABLE();                //ê1ÄüUSART5ê±Öó
       
        //GPIO¶Ë¿úéèÖÃ
        GPIO_Initure.Pin=GPIO_PIN_12;
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;//¸′óÃíÆíìêä3ö
        GPIO_Initure.Pull=GPIO_PULLUP;                //éÏà-
        GPIO_Initure.Speed=GPIO_SPEED_FAST;//¸ßËù
        GPIO_Initure.Alternate=GPIO_AF7_UART5;        //¸′óÃÎaUSART5
        HAL_GPIO_Init(GPIOC,&GPIO_Initure);                  
       
        GPIO_Initure.Pin=GPIO_PIN_2;       
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;//¸′óÃíÆíìêä3ö
        GPIO_Initure.Pull=GPIO_PULLUP;                //éÏà-
        GPIO_Initure.Speed=GPIO_SPEED_FAST;//¸ßËù
        GPIO_Initure.Alternate=GPIO_AF7_UART5;        //¸′óÃÎaUSART5
        HAL_GPIO_Init(GPIOD,&GPIO_Initure);          
        //UART 3õê¼»ˉéèÖÃ
        UART5_Handler.Instance=UART5;                                                                    //USART5
        UART5_Handler.Init.BaudRate=bound;                                                          //2¨ìØÂê
        UART5_Handler.Init.WordLength=UART_WORDLENGTH_8B; //×Ö3¤Îa8λêy¾Y¸ñê½
        UART5_Handler.Init.StopBits=UART_STOPBITS_1;            //ò»¸öí£Ö1λ
        UART5_Handler.Init.Parity=UART_PARITY_NONE;                    //ÎTÆæżD£Ñéλ
        UART5_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //ÎTó2¼tá÷¿Ø
        UART5_Handler.Init.Mode=UART_MODE_TX_RX;                                        //êÕ·¢Ä£ê½
        HAL_UART_Init(&UART5_Handler);                                                                    //ê1Äü

        __HAL_UART_ENABLE_IT(&UART5_Handler,UART_IT_RXNE);//¿aÆô½óêÕÖD¶Ï
        HAL_NVIC_EnableIRQ(UART5_IRQn);                                //ê1ÄüUART5ÖD¶Ïí¨μà
        HAL_NVIC_SetPriority(UART5_IRQn,1,0);        //ÇàÕ¼óÅÏ輶1£¬×óóÅÏ輶0       
        TIM7_Init(100-1,9000-1);                //10msÖD¶Ï
        __HAL_TIM_DISABLE(&TIM7_Handler);//1رն¨ê±Æ÷7
        UART5_RX_STA=0;                //Çåáã
         
}

//′®¿ú·¢Ëí»o′æÇø        
__align(8) u8 UART5_TX_BUF[UART5_MAX_SEND_LEN]; //·¢Ëí»o3å,×î′óUSART2_MAX_SEND_LEN×Ö½ú
#ifdef UART5_RX_EN                                                                   //èç1ûê1Äüá˽óêÕ             
//′®¿ú½óêÕ»o′æÇø        
u8 UART5_RX_BUF[UART5_MAX_RECV_LEN];                                     //½óêÕ»o3å,×î′óUSART2_MAX_RECV_LEN¸ö×Ö½ú.
//í¨1yÅD¶Ï½óêÕá¬Dø2¸ö×Ö·ûÖ®¼äμÄê±¼ä2î2»′óóú100msà′¾ö¶¨êÇ2»êÇò»′Îá¬DøμÄêy¾Y.
//èç1û2¸ö×Ö·û½óêÕ¼ä¸ô3¬1y100ms,ÔòèÏÎa2»êÇ1′Îá¬Døêy¾Y.ò2¾íêÇ3¬1y100msûóD½óêÕμ½
//èÎoÎêy¾Y,Ôò±íê¾′Ë′νóêÕíê±Ï.
//½óêÕμ½μÄêy¾Y×′ì¬
//[15]:0,ûóD½óêÕμ½êy¾Y;1,½óêÕμ½áËò»Åúêy¾Y.
//[14:0]:½óêÕμ½μÄêy¾Y3¤¶è
u16 UART5_RX_STA=0;            
void UART5_IRQHandler(void)
{
        u8 Res;            
        if((__HAL_UART_GET_FLAG(&UART5_Handler,UART_FLAG_RXNE)!=RESET))//½óêÕμ½êy¾Y
        {         
                HAL_UART_Receive(&UART5_Handler,&Res,1,1000);
                if((UART5_RX_STA&0x8000)==0)//½óêÕíêμÄò»Åúêy¾Y,»1ûóD±»′|àí,Ôò2»Ôù½óêÕÆäËûêy¾Y
                {                
                        if(UART5_RX_STA<UART5_MAX_RECV_LEN)                //&#187;1&#191;éò&#212;&#189;óê&#213;êy&#190;Y
                        {
                                __HAL_TIM_SET_COUNTER(&TIM7_Handler,0);//&#188;&#198;êy&#198;÷&#199;&#229;&#191;&#213;                                         
                                if(UART5_RX_STA==0)               
                                        __HAL_TIM_ENABLE(&TIM7_Handler);  //ê1&#196;ü&#182;¨ê±&#198;÷7
                                UART5_RX_BUF[UART5_RX_STA++]=Res;                //&#188;&#199;&#194;&#188;&#189;óê&#213;μ&#189;μ&#196;&#214;μ         
                        }else
                        {
                                UART5_RX_STA|=1<<15;                                        //&#199;&#191;&#214;&#198;±ê&#188;&#199;&#189;óê&#213;íê3é
                        }
                }         
  }                                                                                 
}

//′&#174;&#191;ú2,printf oˉêy
//è·±£ò&#187;′&#206;·¢&#203;íêy&#190;Y2&#187;3&#172;1yUSART2_MAX_SEND_LEN×&#214;&#189;ú
void u5_printf(char* fmt,...)  
{  
        u16 i,j;
        va_list ap;
        va_start(ap,fmt);
        vsprintf((char*)UART5_TX_BUF,fmt,ap);
        va_end(ap);
        i=strlen((const char*)UART5_TX_BUF);//′&#203;′&#206;·¢&#203;íêy&#190;Yμ&#196;3¤&#182;è
        for(j=0;j<i;j++)//&#209;-&#187;··¢&#203;íêy&#190;Y
        {
                while((UART5->ISR&0X40)==0);//&#209;-&#187;··¢&#203;í,&#214;±μ&#189;·¢&#203;ííê±&#207;   
                UART5->TDR=UART5_TX_BUF[j];  
        }
}
#endif       

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