STM32F0 UART中断程序

本文详细介绍了STM32F0中USART发送数据的中断处理,特别是发送完成(TC)标志的使用。在STM32F0中,USART的TC标志在没有数据发送时可能无法正常清除,因此需要在中断处理程序中特别处理。文章通过示例代码展示了如何正确配置和响应USART的TXE和TC中断,确保数据的顺利发送和中断的及时响应。
摘要由CSDN通过智能技术生成

STM32F0的USART发送数据的标志位TC貌似和F1不太一样,在没有数据发送的情况下无法清除掉。
所以中断处理程序应如下:
 

//USART1中断处理
void USART1_IRQHandler(void)
{
  uint16_t isr=USART1->ISR;
  uint8_t c;
  
  //接收到一个字节
  if((isr & USART_FLAG_RXNE) == USART_FLAG_RXNE)
  {
    c=(uint8_t)(USART1->RDR);
    USART_ClearITPendingBit(USART1,USART_FLAG_RXNE);
    if(g_RxFlag==0)//没有接收数据包
    {
      g_RxBuffer[g_RxIndex++]=c;
      UartTimerEnable();
    }
    return ;
  }
  
  //发送处理
  if((isr & USART_FLAG_TXE) == USART_FLAG_TXE)//发送寄存器空
  {
    if(g_TxSize > g_TxIndex)
       USART_SendData(USART1, g_TxBuffer[g_TxIndex++]);
    else
    {
      USART_ITConfig( USART1, USART_IT_TXE, DISABLE );//发送寄存器空中断禁止
      USART_ITConfig( USART1, USART_IT_TC, ENABLE );  //发送完成中断使能
    }
  }

  //发送完成处理
  isr=USART1->ISR;//重新读标志位
  if((isr & USART_FLAG_TC) == USART_FLAG_TC)//发送完成
  {
    USART_ITConfig( USART1, USART_IT_TC, DISABLE );  //发送完成中断使能
    RS485_RX_SEL;
    USART_ClearITPendingBit(USART1,USART_FLAG_TC);
    g_TxFlag=0;
  }    
}

阅读原文icon-default.png?t=L892http://www.chipart.cn/ar_list.asp?id=185

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值