STM32的串口配置(中断方式)

STM32的串口中断配置,也是很简单的.

首先是配置UART的GPIO口

首先是配置UART的GPIO口 
/*******************************************************************************
* Name  : UART1_GPIO_Configuration
* Deion        : Configures the uart1 GPIO ports.
* Input                    : None
* Output                 : None
* Return                 : None
*******************************************************************************/
void UART1_GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    // Configure USART1_Tx as alternate push-pull 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // Configure USART1_Rx as input floating 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
}
然后是配置串口参数
/*******************************************************************************
* Name  : UART1_Configuration
* Deion        : Configures the uart1 
* Input                    : None
* Output                 : None
* Return                 : None
*******************************************************************************/
void USART_Configuration(void)
{
  USART_InitTypeDef USART_InitStructure;
  USART_ClockInitTypeDef  USART_ClockInitStructure;
  Uart1_GPIO_Configuration();
  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;
  /* Configure the USART1 synchronous paramters */
  USART_ClockInit(USART1, &USART_ClockInitStructure);

  USART_InitStructure.USART_BaudRate = 9600;
  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;
  /* Configure USART1 basic and asynchronous paramters */
  USART_Init(USART1, &USART_InitStructure);

  /* Enable USART1 Receive interrupts */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    
  /* Enable USART1 */
  USART_Cmd(USART1, ENABLE);
}

然后是在中断设置,需要修改stm32f10x_it.c 中的串口中断函数 并且需要修改void NVIC_Configuration(void)函数

修改NVIC_Configuration函数

/*******************************************************************************
* Name  : NVIC_Configuration
* Deion        : Configures NVIC and Vector Table base location.
* Input                    : None
* Output                 : None
* Return                 : None
*******************************************************************************/
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
#ifdef  VECT_TAB_RAM
    /* Set the Vector Table base location at 0x20000000 */
    NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
    /* Set the Vector Table base location at 0x08000000 */
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
  
  /* Configure the NVIC Preemption Priority Bits */  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  
  /* Enable the USART1 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
}

//串口中断
void USART1_IRQHandler(void)
{
    //处理接收到的数据
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
    /* Clear the USART1 Receive interrupt */
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);

    }
      //发送中断
    if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
    {
  USART_SendData(USART1, Send_Data[Send_Length++]);
  if (Send_Length==SEND_LENGTH)
  {
     //发送字节结束
   USART_ClearITPendingBit(USART1,USART_IT_TXE);
   USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
   USART_ITConfig(USART1, USART_IT_TC, ENABLE);
  }

    }
      //发送完成
    if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)
    {
 USART_ClearITPendingBit(USART1,USART_IT_TC);
 USART_ITConfig(USART1, USART_IT_TC, DISABLE);
   }
}

在需要发送的程序里Send_Data[SEND_LENGTH]和发送长度设置好,

void Send_to_PC(void)

{

      //设置好Send_Data[SEND_LENGTH]数组

     //打开发送中断
     USART_ITConfig(USART1, USART_IT_TXE, ENABLE); 

}

至此 串口就可以工作起来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值