STM32F429 USART3串口中断无法接收到数据???

2019-10-15 18:31发布

Q:这个配置方法我是按照阿波罗USART1配置的,测试下来USART3->DR未有数据无法进入接收中断,usart3对外发数据是成功的
   此外我配置usart3接收DMA是可以正常收到数据的

请问这个怎么破?有空调试的朋友留下邮箱,我把文件发给你

/**************************************´®¿Ú3µÄÏà¹ØÅäÖà start************************************/
#if EN_USART3_RX   //Èç¹ûʹÄÜÁ˽ÓÊÕ
//´®¿Ú1ÖжϷþÎñ³ÌÐò
//×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó      
u8 USART3_RX_BUF[USART_REC_LEN];     //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú.
u16 USART3_RX_STA=0;       //½ÓÊÕ״̬±ê¼Ç   
UART_HandleTypeDef UART3_Handler; //UART¾ä±ú

//³õʼ»¯IO ´®¿Ú3
//bound:²¨ÌØÂÊ
void uart3_init(u32 bound)
{   
    UART3_Handler.Instance=USART3;                        //USART3
    UART3_Handler.Init.BaudRate=bound;                    //²¨ÌØÂÊ
    UART3_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //×Ö³¤Îª8λÊý¾Ý¸ñʽ
    UART3_Handler.Init.StopBits=UART_STOPBITS_1;        //Ò»¸öֹͣλ
    UART3_Handler.Init.Parity=UART_PARITY_NONE;            //ÎÞÆæżУÑéλ
    UART3_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //ÎÞÓ²¼þÁ÷¿Ø
    UART3_Handler.Init.Mode=UART_MODE_TX_RX;            //ÊÕ·¢Ä£Ê½
    HAL_UART_Init(&UART3_Handler);                        //NOTE:此处会调用void HAL_UART_MspInit(UART_HandleTypeDef *huart)
}
        
//´®¿Ú3ÖжϷþÎñ³ÌÐò
void USART3_IRQHandler(void)                    
{
    u8 Res;
#if SYSTEM_SUPPORT_OS         //ʹÓÃOS
    OSIntEnter();   
#endif
    if((__HAL_UART_GET_FLAG(&UART3_Handler,UART_FLAG_RXNE)!=RESET))  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ)
    {
        HAL_UART_Receive(&UART3_Handler,&Res,1,1000);
        if((USART3_RX_STA&(1<<15))==0)//&#189;&#211;&#202;&#213;&#205;ê&#181;&#196;&#210;&#187;&#197;ú&#202;&#253;&#190;&#221;,&#187;&#185;&#195;&#187;&#211;&#208;±&#187;&#180;&#166;&#192;í,&#212;ò&#178;&#187;&#212;&#217;&#189;&#211;&#202;&#213;&#198;&#228;&#203;&#251;&#202;&#253;&#190;&#221;
        {
            if(USART3_RX_STA<USART_REC_LEN)    //&#187;&#185;&#191;&#201;&#210;&#212;&#189;&#211;&#202;&#213;&#202;&#253;&#190;&#221;
            {
                __HAL_TIM_SET_COUNTER(&TIM7_Handler,0);//&#188;&#198;&#202;&#253;&#198;÷&#199;&#229;&#191;&#213;
                if(USART3_RX_STA==0)                 //&#202;&#185;&#196;&#220;&#182;¨&#202;±&#198;÷7&#181;&#196;&#214;&#208;&#182;&#207;
                {
                    __HAL_TIM_ENABLE(&TIM7_Handler);//&#202;&#185;&#196;&#220;TIM7
                }
                USART3_RX_BUF[USART3_RX_STA++]=Res;    //&#188;&#199;&#194;&#188;&#189;&#211;&#202;&#213;&#181;&#189;&#181;&#196;&#214;&#181;
                Res=0;
            }
            else
            {
                USART3_RX_STA|=1<<15;                //&#199;&#191;&#214;&#198;±ê&#188;&#199;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
            }
        }           
    }
    #if SYSTEM_SUPPORT_OS         //&#202;&#185;&#211;&#195;OS
        OSIntExit();   
    #endif
}
#endif
/**************************************&#180;&#174;&#191;&#218;3&#181;&#196;&#207;à&#185;&#216;&#197;&#228;&#214;&#195;  end************************************/


void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO&#182;&#203;&#191;&#218;&#201;è&#214;&#195;
    GPIO_InitTypeDef GPIO_Initure;
   
    if(huart->Instance==USART1)//&#200;&#231;&#185;&#251;&#202;&#199;&#180;&#174;&#191;&#218;1&#163;&#172;&#189;&#248;&#208;&#208;&#180;&#174;&#191;&#218;1 MSP&#179;&#245;&#202;&#188;&#187;&#175;
    {
        __HAL_RCC_GPIOA_CLK_ENABLE();            //&#202;&#185;&#196;&#220;GPIOA&#202;±&#214;&#211;
        __HAL_RCC_USART1_CLK_ENABLE();            //&#202;&#185;&#196;&#220;USART1&#202;±&#214;&#211;
   
        GPIO_Initure.Pin=GPIO_PIN_9;            //PA9
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;        //&#184;&#180;&#211;&#195;&#205;&#198;&#205;ì&#202;&#228;&#179;&#246;
        GPIO_Initure.Pull=GPIO_PULLUP;            //&#201;&#207;&#192;&#173;
        GPIO_Initure.Speed=GPIO_SPEED_FAST;        //&#184;&#223;&#203;&#217;
        GPIO_Initure.Alternate=GPIO_AF7_USART1;    //&#184;&#180;&#211;&#195;&#206;&#170;USART1
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175A9

        GPIO_Initure.Pin=GPIO_PIN_10;            //PA10
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175A10
        
        __HAL_UART_DISABLE_IT(&UART1_Handler,UART_IT_TC);
        
#if EN_USART1_RX
        __HAL_UART_ENABLE_IT(&UART1_Handler,UART_IT_RXNE);//&#191;&#170;&#198;&#244;&#189;&#211;&#202;&#213;&#214;&#208;&#182;&#207;        
        HAL_NVIC_EnableIRQ(USART1_IRQn);                //&#202;&#185;&#196;&#220;USART1&#214;&#208;&#182;&#207;&#205;¨&#181;&#192;
        HAL_NVIC_SetPriority(USART1_IRQn,3,3);            //&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;3&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;3
        TIM3_Init(100-1,9000-1);     //TIM7_Init(1000-1,9000-1)=100ms
#endif
    }
    if(huart->Instance==USART2)//&#200;&#231;&#185;&#251;&#202;&#199;&#180;&#174;&#191;&#218;2&#163;&#172;&#189;&#248;&#208;&#208;&#180;&#174;&#191;&#218;2 MSP&#179;&#245;&#202;&#188;&#187;&#175;
    {
        __HAL_RCC_GPIOA_CLK_ENABLE();            //&#202;&#185;&#196;&#220;GPIOA&#202;±&#214;&#211;
        __HAL_RCC_USART2_CLK_ENABLE();            //&#202;&#185;&#196;&#220;USART2&#202;±&#214;&#211;
   
        GPIO_Initure.Pin=GPIO_PIN_2;            //PA2
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;        //&#184;&#180;&#211;&#195;&#205;&#198;&#205;ì&#202;&#228;&#179;&#246;
        GPIO_Initure.Pull=GPIO_PULLUP;            //&#201;&#207;&#192;&#173;
        GPIO_Initure.Speed=GPIO_SPEED_FAST;        //&#184;&#223;&#203;&#217;
        GPIO_Initure.Alternate=GPIO_AF7_USART2;    //&#184;&#180;&#211;&#195;&#206;&#170;USART2
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175A9

        GPIO_Initure.Pin=GPIO_PIN_3;            //PA3
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175A10
        
        __HAL_UART_DISABLE_IT(&UART2_Handler,UART_IT_TC);
        
#if en_USART2_RX
        __HAL_UART_ENABLE_IT(&UART2_Handler,UART_IT_RXNE);//&#191;&#170;&#198;&#244;&#189;&#211;&#202;&#213;&#214;&#208;&#182;&#207;        
        HAL_NVIC_EnableIRQ(USART2_IRQn);                //&#202;&#185;&#196;&#220;USART2&#214;&#208;&#182;&#207;&#205;¨&#181;&#192;
        HAL_NVIC_SetPriority(USART2_IRQn,3,2);            //&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;3&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;2
        TIM3_Init(100-1,9000-1);     //TIM3_Init(10-1,9000-1);1ms
#endif
    }   
    if(huart->Instance==UART4)//&#200;&#231;&#185;&#251;&#202;&#199;&#180;&#174;&#191;&#218;4&#163;&#172;&#189;&#248;&#208;&#208;&#180;&#174;&#191;&#218;4 MSP&#179;&#245;&#202;&#188;&#187;&#175;
    {
        __HAL_RCC_GPIOA_CLK_ENABLE();            //&#202;&#185;&#196;&#220;GPIOA&#202;±&#214;&#211;
        __HAL_RCC_UART4_CLK_ENABLE();            //&#202;&#185;&#196;&#220;USART4&#202;±&#214;&#211;
   
        GPIO_Initure.Pin=GPIO_PIN_0;            //PA0
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;        //&#184;&#180;&#211;&#195;&#205;&#198;&#205;ì&#202;&#228;&#179;&#246;
        GPIO_Initure.Pull=GPIO_PULLUP;            //&#201;&#207;&#192;&#173;
        GPIO_Initure.Speed=GPIO_SPEED_FAST;        //&#184;&#223;&#203;&#217;
        GPIO_Initure.Alternate=GPIO_AF8_UART4;    //&#184;&#180;&#211;&#195;&#206;&#170;USART4
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175A0

        GPIO_Initure.Pin=GPIO_PIN_1;            //PA1
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175A1
        
        __HAL_UART_DISABLE_IT(&UART4_Handler,UART_IT_TC);
        
#if EN_USART4_RX
        __HAL_UART_ENABLE_IT(&UART4_Handler,UART_IT_RXNE);//&#191;&#170;&#198;&#244;&#189;&#211;&#202;&#213;&#214;&#208;&#182;&#207;        
        HAL_NVIC_EnableIRQ(UART4_IRQn);                //&#202;&#185;&#196;&#220;USART4&#214;&#208;&#182;&#207;&#205;¨&#181;&#192;
        HAL_NVIC_SetPriority(UART4_IRQn,3,1);            //&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;3&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;1
        TIM7_Init(100-1,9000-1);     //TIM7_Init(1000-1,9000-1)=100ms
#endif
    }
   if(huart->Instance==USART3)//&#200;&#231;&#185;&#251;&#202;&#199;&#180;&#174;&#191;&#218;3&#163;&#172;&#189;&#248;&#208;&#208;&#180;&#174;&#191;&#218;3 MSP&#179;&#245;&#202;&#188;&#187;&#175;
    {
        __HAL_RCC_GPIOB_CLK_ENABLE();            //&#202;&#185;&#196;&#220;GPIOB&#202;±&#214;&#211;
        __HAL_RCC_USART3_CLK_ENABLE();            //&#202;&#185;&#196;&#220;USART3&#202;±&#214;&#211;
   
        GPIO_Initure.Pin=GPIO_PIN_10;            //PB10
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;        //&#184;&#180;&#211;&#195;&#205;&#198;&#205;ì&#202;&#228;&#179;&#246;
        GPIO_Initure.Pull=GPIO_PULLUP;            //&#201;&#207;&#192;&#173;
        GPIO_Initure.Speed=GPIO_SPEED_FAST;        //&#184;&#223;&#203;&#217;
        GPIO_Initure.Alternate=GPIO_AF7_USART3;    //&#184;&#180;&#211;&#195;&#206;&#170;USART3
        HAL_GPIO_Init(GPIOB,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175B10

        GPIO_Initure.Pin=GPIO_PIN_11;            //PB11
        HAL_GPIO_Init(GPIOB,&GPIO_Initure);           //&#179;&#245;&#202;&#188;&#187;&#175B11
        
        __HAL_UART_DISABLE_IT(&UART3_Handler,UART_IT_TC);
        
#if EN_USART3_RX
        __HAL_UART_ENABLE_IT(&UART3_Handler,UART_IT_RXNE);//&#191;&#170;&#198;&#244;&#189;&#211;&#202;&#213;&#214;&#208;&#182;&#207;        
        HAL_NVIC_EnableIRQ(USART3_IRQn);                //&#202;&#185;&#196;&#220;USART3&#214;&#208;&#182;&#207;&#205;¨&#181;&#192;
        HAL_NVIC_SetPriority(USART3_IRQn,3,0);            //&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;3&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;0
        TIM7_Init(100-1,9000-1);     //TIM7_Init(1000-1,9000-1)=100ms
#endif
    }

}
0条回答

一周热门 更多>