OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5936|回复: 1

stm32f429串口2 不进接收中断

[复制链接]

2

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-4-24
在线时间
2 小时
发表于 2021-5-1 18:40:20 | 显示全部楼层 |阅读模式
1金钱
void uart_init(u32 bound)
{       
        //UART 3õê¼»ˉéèÖÃ
        UART2_Handler.Instance=USART2;                                            //USART1
        UART2_Handler.Init.BaudRate=bound;                                    //2¨ìØÂê
        UART2_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //×Ö3¤Îa8λêy¾Y¸ñê½
        UART2_Handler.Init.StopBits=UART_STOPBITS_1;            //ò»¸öí£Ö1λ
        UART2_Handler.Init.Parity=UART_PARITY_NONE;                    //ÎTÆæżD£Ñéλ
        UART2_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //ÎTó2¼tá÷¿Ø
        UART2_Handler.Init.Mode=UART_MODE_TX_RX;                    //êÕ·¢Ä£ê½
        HAL_UART_Init(&UART2_Handler);                                            //HAL_UART_Init()»áê1ÄüUART1
       
        HAL_UART_Receive_IT(&UART2_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//¸Ãoˉêy»á¿aÆô½óêÕÖD¶Ï£o±ê־λUART_IT_RXNE£¬2¢ÇòéèÖýóêÕ»o3åòÔ¼°½óêÕ»o3å½óêÕ×î′óêy¾Yá¿

}

//UARTμ×2ã3õê¼»ˉ£¬ê±Öóê1Äü£¬òy½ÅÅäÖã¬ÖD¶ÏÅäÖÃ
//′Ëoˉêy»á±»HAL_UART_Init()μ÷óÃ
//huart:′®¿ú¾ä±ú

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO¶Ë¿úéèÖÃ
        GPIO_InitTypeDef GPIO_Initure;
       
        if(huart->Instance==USART2)//èç1ûêÇ′®¿ú1£¬½øDD′®¿ú1 MSP3õê¼»ˉ
        {
                __HAL_RCC_GPIOA_CLK_ENABLE();                        //ê1ÄüGPIOAê±Öó
                __HAL_RCC_USART2_CLK_ENABLE();                        //ê1ÄüUSART1ê±Öó
          
        //        HAL_UART_DeInit(huart);
                GPIO_Initure.Pin=GPIO_PIN_2;                        //PA9
                GPIO_Initure.Mode=GPIO_MODE_AF_PP;                //¸′óÃíÆíìêä3ö
                GPIO_Initure.Pull=GPIO_PULLUP;                        //éÏà-
                GPIO_Initure.Speed=GPIO_SPEED_FAST;                //¸ßËù
                GPIO_Initure.Alternate=GPIO_AF7_USART2;        //¸′óÃÎaUSART1
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);                   //3õê¼»ˉPA9

                GPIO_Initure.Pin=GPIO_PIN_3;                        //PA10
                GPIO_Initure.Mode=GPIO_MODE_INPUT;                //¸′óÃíÆíìêä3ö
                GPIO_Initure.Pull=GPIO_NOPULL;                        //éÏà-
                GPIO_Initure.Speed=GPIO_SPEED_FAST;                //¸ßËù
                GPIO_Initure.Alternate=GPIO_AF7_USART2;        //¸′óÃÎaUSART1
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);                   //3õê¼»ˉPA10
               
#if EN_USART2_RX
                HAL_NVIC_EnableIRQ(USART2_IRQn);                //ê1ÄüUSART1ÖD¶Ïí¨μà
                HAL_NVIC_SetPriority(USART2_IRQn,3,3);        //ÇàÕ¼óÅÏ輶3£¬×óóÅÏ輶3
#endif       
        }

}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        if(huart->Instance==USART2)//èç1ûêÇ′®¿ú1
        {
                if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
                {
                        if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
                        {
                                if(aRxBuffer[0]!=0x0a)USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
                                else USART_RX_STA|=0x8000;        //½óêÕíê3éáË
                        }
                        else //»1ûêÕμ½0X0D
                        {       
                                if(aRxBuffer[0]==0x0d)USART_RX_STA|=0x4000;
                                else
                                {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=aRxBuffer[0] ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                                }                 
                        }
                }

        }
}

//′®¿ú1ÖD¶Ï·tÎñ3ìDò
//void USART2_IRQHandler(void)                       
//{
//        u32 timeout=0;
//        u32 maxDelay=0x1FFFF;
//#if SYSTEM_SUPPORT_OS                 //ê1óÃOS
//        OSIntEnter();   
//#endif
//       
//        HAL_UART_IRQHandler(&UART2_Handler);        //μ÷óÃHAL¿aÖD¶Ï′|àí1«óÃoˉêy
//       
//        timeout=0;
//    while (HAL_UART_GetState(&UART2_Handler) != HAL_UART_STATE_READY)//μè′y¾íD÷
//        {
//         timeout++;////3¬ê±′|àí
//     if(timeout>maxDelay) break;               
//        }
//     
//        timeout=0;
//        while(HAL_UART_Receive_IT(&UART2_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)//ò»′Î′|àííê3éÖ®oó£¬ÖØD¿aÆôÖD¶Ï2¢éèÖÃRxXferCountÎa1
//        {
//         timeout++; //3¬ê±′|àí
//         if(timeout>maxDelay) break;       
//        }
//#if SYSTEM_SUPPORT_OS                 //ê1óÃOS
//        OSIntExit();                                                                                           
//#endif
//}
//#endif       


/*ÏÂÃæ′úÂëÎòÃÇÖ±½ó°ÑÖD¶Ï¿ØÖÆÂß¼-D′ÔúÖD¶Ï·tÎñoˉêyÄú2¿¡£
ËμÃ÷£o2éóÃHAL¿a′|àíÂß¼-£¬D§Âê2»¸ß¡£*/



//′®¿ú1ÖD¶Ï·tÎñ3ìDò
void USART2_IRQHandler(void)                       
{
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //ê1óÃOS
        OSIntEnter();   
#endif
        if((__HAL_UART_GET_FLAG(&UART2_Handler,UART_FLAG_RXNE)!=RESET))  //½óêÕÖD¶Ï(½óêÕμ½μÄêy¾Y±ØDëêÇ0x0d 0x0a½áÎ2)
        {
        HAL_UART_Receive(&UART2_Handler,&Res,1,1000);
                if((USART_RX_STA&0x8000)==0)//½óêÕÎ′íê3é
                {
                        if(USART_RX_STA&0x4000)//½óêÕμ½áË0x0d
                        {
                                if(Res!=0x0a)USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
                                else USART_RX_STA|=0x8000;        //½óêÕíê3éáË
                        }
                        else //»1ûêÕμ½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;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                                }                 
                        }
                }                    
        }
        HAL_UART_IRQHandler(&UART2_Handler);       
#if SYSTEM_SUPPORT_OS                 //ê1óÃOS
        OSIntExit();                                                                                           
#endif
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-4-24
在线时间
2 小时
 楼主| 发表于 2021-5-6 06:36:51 | 显示全部楼层
自己已解决。官方懒散,无作为。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 00:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表