99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

關于stm32 hal庫usart HAL_UART_Transmit_IT函數解析

1、原因

最近在看安富萊的bsp教程,關于usart的部分使用了fifo的管理,但是安富萊的教程中,FIFO管理部分都是自己寫的,而stm32官方的hal庫里面,關于usart發送部分是有HAL_UART_Transmit_IT可以以中斷的方式發送數據的。我現在的疑惑就是,我只使用安富萊的fifo管理部分,將發送部分交給hal庫的函數進行處理,可不可是實現和安富萊bsp教程相同的功能。

2、函數解析

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
{
  /* Check that a Tx process is not already ongoing */
  if (huart->gState == HAL_UART_STATE_READY)
  {
    if ((pData == NULL) || (Size == 0U))
    {
      return HAL_ERROR;
    }

    /* Process Locked */
    __HAL_LOCK(huart);

    huart->pTxBuffPtr = pData;
    huart->TxXferSize = Size;
    huart->TxXferCount = Size;

    huart->ErrorCode = HAL_UART_ERROR_NONE;
    huart->gState = HAL_UART_STATE_BUSY_TX;

    /* Process Unlocked */
    __HAL_UNLOCK(huart);

    /* Enable the UART Transmit data register empty Interrupt */
    __HAL_UART_ENABLE_IT(huart, UART_IT_TXE);

    return HAL_OK;
  }
  else
  {
    return HAL_BUSY;
  }
}

該段代碼是stm32f4的HAL_UART_Transmit_IT函數代碼。再該段代碼中,1、先判斷了發送是否處于忙。2、進行上鎖。3、設置隊列,并設置相關參數4、解鎖5、開始發送通過上面一段代碼,可以知道該函數是非阻塞的發送方式,其方式是在串口中斷中進行管理實現的隊列數據發送。詳細說明如下:

void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
{
  /* UART in mode Transmitter ------------------------------------------------*/
  if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET))
  {
    UART_Transmit_IT(huart);
    return;
  }

  /* UART in mode Transmitter end --------------------------------------------*/
  if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET))
  {
    UART_EndTransmit_IT(huart);
    return;
  }
}

在函數里面由這兩段代碼進行判斷,其中標志位說明如下

由標志位我們可以知道,當一組數據未傳輸完成時,TXE數據會置1,如果開啟了中斷,那么tc也會置1,但是根據if語句的先后順序,會先執行UART_Transmit_IT(huart);函數,在該函數路面,會再次對dr寄存器進行數據寫入。寫入完成后,會對tc位置0。當所有的數據都發送完成之后,UART_Transmit_IT(huart);不會再次寫入dr寄存器,程序進入UART_EndTransmit_IT(huart);函數,觸發HAL_UART_TxCpltCallback(huart);中斷。

修改思路

接下來的問題就簡單了,我們只需要在安富萊的發送開始函數改成HAL_UART_Transmit_IT()即可,然后在發送中斷里面寫fifo的發送即可。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 6
收藏 4
關注 11
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 视频一区视频二区视频三区视频四区国产 | 亚洲欧美日韩综合在线丁香 | 91av视频免费在线观看 | 女人久久久 | 亚洲精品无码久久久久SM | 爆乳放荡的女教师bd | 少妇高潮av久久久久久 | 国产外围在线观看 | 男人肌肌捅女人肌肌视频 | 污污汅18禁在线无遮挡免费观看 | 成人影院亚洲 | 久草免费在线视频观看 | 日韩爱情动作片 | 亚洲中文字幕aⅴ无码天堂 成人黄网视频在线观看 | 色呦呦免费看 | 国产精品无码天天爽视频 | 全免费a级毛片免费看 | 久久久久久国产精品无码超碰 | 色视频网站在线观看 | 精品欧美а∨无码黑人文章 | 在线观看中文字幕国产 | 国产大陆亚洲精品国产 | 漂亮人妻被中出中文字幕 | 伊人久久在线观看 | 成年人国产网站 | 国产性网 | 日韩精品一二区 | 18无遮挡啪啪无码网站免费看 | 国产高清在线 | 国产不卡一区二区视频 | 最新国产精品视频 | 91桃色在线 | 精品少妇的一区二区三区四区 | 亚洲国产成在人网站天堂 | 人妻在卧室被老板疯狂进入 | 九九视频免费观看视频精品 | 免费黄av | 国产免费视屏 | 午夜精品一区二区三区福利视频 | 国内精品一区二区 | 九九在线免费视频 |