``` STM32G474xx HAL 用户手册: IO操作函数
STM32G474xx HAL 用户手册
函数
IO操作函数
IRDA 导出的函数

IRDA 发送和接收函数。 更多...

函数

HAL_StatusTypeDef HAL_IRDA_Transmit (IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
 在阻塞模式下发送一定量的数据。
HAL_StatusTypeDef HAL_IRDA_Receive (IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
 在阻塞模式下接收一定量的数据。
HAL_StatusTypeDef HAL_IRDA_Transmit_IT (IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size)
 在中断模式下发送一定量的数据。
HAL_StatusTypeDef HAL_IRDA_Receive_IT (IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
 在中断模式下接收一定量的数据。
HAL_StatusTypeDef HAL_IRDA_Transmit_DMA (IRDA_HandleTypeDef *hirda, const uint8_t *pData, uint16_t Size)
 在DMA模式下发送一定量的数据。
HAL_StatusTypeDef HAL_IRDA_Receive_DMA (IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
 在DMA模式下接收一定量的数据。
HAL_StatusTypeDef HAL_IRDA_DMAPause (IRDA_HandleTypeDef *hirda)
 暂停DMA传输。
HAL_StatusTypeDef HAL_IRDA_DMAResume (IRDA_HandleTypeDef *hirda)
 恢复DMA传输。
HAL_StatusTypeDef HAL_IRDA_DMAStop (IRDA_HandleTypeDef *hirda)
 停止DMA传输。
HAL_StatusTypeDef HAL_IRDA_Abort (IRDA_HandleTypeDef *hirda)
 中止正在进行的传输(阻塞模式)。
HAL_StatusTypeDef HAL_IRDA_AbortTransmit (IRDA_HandleTypeDef *hirda)
 中止正在进行的发送传输(阻塞模式)。
HAL_StatusTypeDef HAL_IRDA_AbortReceive (IRDA_HandleTypeDef *hirda)
 中止正在进行的接收传输(阻塞模式)。
HAL_StatusTypeDef HAL_IRDA_Abort_IT (IRDA_HandleTypeDef *hirda)
 中止正在进行的传输(中断模式)。
HAL_StatusTypeDef HAL_IRDA_AbortTransmit_IT (IRDA_HandleTypeDef *hirda)
 中止正在进行的发送传输(中断模式)。
HAL_StatusTypeDef HAL_IRDA_AbortReceive_IT (IRDA_HandleTypeDef *hirda)
 中止正在进行的接收传输(中断模式)。
void HAL_IRDA_IRQHandler (IRDA_HandleTypeDef *hirda)
 处理IRDA中断请求。
__weak void HAL_IRDA_TxCpltCallback (IRDA_HandleTypeDef *hirda)
 Tx传输完成回调函数。
__weak void HAL_IRDA_TxHalfCpltCallback (IRDA_HandleTypeDef *hirda)
 Tx半传输完成回调函数。
__weak void HAL_IRDA_RxCpltCallback (IRDA_HandleTypeDef *hirda)
 Rx传输完成回调函数。
__weak void HAL_IRDA_RxHalfCpltCallback (IRDA_HandleTypeDef *hirda)
 Rx半传输完成回调函数。
__weak void HAL_IRDA_ErrorCallback (IRDA_HandleTypeDef *hirda)
 IRDA错误回调函数。
__weak void HAL_IRDA_AbortCpltCallback (IRDA_HandleTypeDef *hirda)
 IRDA中止完成回调函数。
__weak void HAL_IRDA_AbortTransmitCpltCallback (IRDA_HandleTypeDef *hirda)
 IRDA中止完成回调函数。
__weak void HAL_IRDA_AbortReceiveCpltCallback (IRDA_HandleTypeDef *hirda)
 IRDA中止接收完成回调函数。

详细描述

IRDA 发送和接收函数。

 ===============================================================================
                         ##### IO操作函数 #####
 ===============================================================================
  [..]
    本小节提供了一组用于管理IRDA数据传输的函数。

  [..]
    IrDA是一个半双工通信协议。如果发送器忙碌,IrDA解码器将忽略IrDA接收线上的任何数据;
    如果接收器忙碌,从USART到IrDA的TX上的数据将不会被IrDA编码。接收数据时应避免
    发送,因为要发送的数据可能会被损坏。

  [..]
    (#) 有两种传输模式:
        (++) 阻塞模式:通信采用轮询方式执行。所有数据处理完成后的HAL状态由同一函数在
             传输结束后返回。
        (++) 非阻塞模式:通信通过中断或DMA执行,这些API返回HAL状态。
             数据处理结束时将通过专用IRDA IRQ(使用中断模式时)或DMA IRQ(使用
             DMA模式时)指示。
             在发送或接收过程结束时,将分别执行HAL_IRDA_TxCpltCallback()、
             HAL_IRDA_RxCpltCallback()用户回调函数。检测到通信错误时,将执行
             HAL_IRDA_ErrorCallback()用户回调函数。

    (#) 阻塞模式API包括:
        (++) HAL_IRDA_Transmit()
        (++) HAL_IRDA_Receive()

    (#) 使用中断的非阻塞模式API包括:
        (++) HAL_IRDA_Transmit_IT()
        (++) HAL_IRDA_Receive_IT()
        (++) HAL_IRDA_IRQHandler()

    (#) 使用DMA的非阻塞模式函数包括:
        (++) HAL_IRDA_Transmit_DMA()
        (++) HAL_IRDA_Receive_DMA()
        (++) HAL_IRDA_DMAPause()
        (++) HAL_IRDA_DMAResume()
        (++) HAL_IRDA_DMAStop()

    (#) 非阻塞模式下提供了一组传输完成回调函数:
        (++) HAL_IRDA_TxHalfCpltCallback()
        (++) HAL_IRDA_TxCpltCallback()
        (++) HAL_IRDA_RxHalfCpltCallback()
        (++) HAL_IRDA_RxCpltCallback()
        (++) HAL_IRDA_ErrorCallback()

    (#) 非阻塞模式传输可使用中止API中止:
        (++) HAL_IRDA_Abort()
        (++) HAL_IRDA_AbortTransmit()
        (++) HAL_IRDA_AbortReceive()
        (++) HAL_IRDA_Abort_IT()
        (++) HAL_IRDA_AbortTransmit_IT()
        (++) HAL_IRDA_AbortReceive_IT()

    (#) 对于基于中断的中止服务(HAL_IRDA_Abortxxx_IT),提供了一组中止完成回调函数:
        (++) HAL_IRDA_AbortCpltCallback()
        (++) HAL_IRDA_AbortTransmitCpltCallback()
        (++) HAL_IRDA_AbortReceiveCpltCallback()

    (#) 在非阻塞模式传输中,可能的错误分为2类。错误处理如下:
        (++) 错误被视为可恢复且非阻塞:传输可进行到底,但错误严重性需由用户评估:
             这涉及中断模式接收中的帧错误、奇偶校验错误或噪声错误。
             接收到的字符随后被检索并存储在Rx缓冲区中,设置错误代码以便用户
             识别错误类型,并执行HAL_IRDA_ErrorCallback()用户回调函数。
             传输在IRDA端继续进行。如果用户希望中止传输,应由用户调用中止服务。
        (++) 错误被视为阻塞:传输无法正确完成并被中止。
             这涉及中断模式接收中的溢出错误以及DMA模式中的所有错误。
             设置错误代码以便用户识别错误类型,并执行
             HAL_IRDA_ErrorCallback()用户回调函数。


函数文档

HAL_StatusTypeDef HAL_IRDA_Abort ( IRDA_HandleTypeDef hirda)

中止正在进行的传输(阻塞模式)。

参数:
hirda指向IRDA_HandleTypeDef结构的指针,该结构包含指定UART模块的配置信息。
注意:
此过程可用于中止任何在中断或DMA模式下启动的正在进行的传输。此过程执行以下操作:
  • 禁用IRDA中断(Tx和Rx)
  • 禁用外设寄存器中的DMA传输(如果已启用)
  • 通过调用HAL_DMA_Abort中止DMA传输(如果传输在DMA模式下)
  • 将句柄状态设置为READY
此过程在阻塞模式下执行:退出函数时,中止被视为已完成。
返回值:
HAL状态

定义位于文件stm32g4xx_hal_irda.c的第1393行。

引用了 __HAL_IRDA_CLEAR_FLAG, __IRDA_HandleTypeDef::ErrorCode, __IRDA_HandleTypeDef::gState, HAL_DMA_Abort(), HAL_DMA_ERROR_TIMEOUT, HAL_DMA_GetError(), HAL_IRDA_ERROR_DMA, HAL_IRDA_ERROR_NONE, HAL_IRDA_STATE_READY, __IRDA_HandleTypeDef::hdmarx,