×
单片机 > 单片机程序设计 > 详情

STM32串口中断方式接收

发布时间:2020-08-26 发布时间:
|
void RCC_Configuration(void)

{

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | 
  RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
}

 

首先中断的配置

void NVIC_Configuration(void) 

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM  
   
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else   
   
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif

  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 
 
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  NVIC_Init(&NVIC_InitStructure); 
}

接着设置GPIO的第二功能

void GPIO_Configuration(void) 

  GPIO_InitTypeDef GPIO_InitStructure;

   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
  GPIO_Init(GPIOA, &GPIO_InitStructure);

}

初始化串口

void USART_Configuration(void) 

  USART_InitTypeDef USART_InitStructure; 
  USART_ClockInitTypeDef  USART_ClockInitStructure; 
 
   
 
#if 1 
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; 
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; 
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; 
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; 
 
USART_ClockInit(USART1, &USART_ClockInitStructure); 
#endif 
USART_InitStructure.USART_BaudRate = 115200; 
USART_InitStructure.USART_WordLength = USART_WordLength_8b; 
USART_InitStructure.USART_StopBits = USART_StopBits_1; 
USART_InitStructure.USART_Parity = USART_Parity_No ; 
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 
 
USART_Init(USART1, &USART_InitStructure); 
   
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 
 
   
  USART_Cmd(USART1, ENABLE);

}

然后是中断处理函数,这里只实现了简单的将收到的字符回显到终端上

void USART1_IRQHandler(void) 

    u16 i; 
     
    if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET) 
                  
        i = USART_ReceiveData(USART1); 
        USART_SendData(USART1,i); 
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) 
        
                       
    }

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) 
    
         
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);

    }

 

}

关键字:STM32  串口  中断方式

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析