STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f7xx_hal_irda.c
Go to the documentation of this file.
1 
127 /* Includes ------------------------------------------------------------------*/
128 #include "stm32f7xx_hal.h"
129 
138 #ifdef HAL_IRDA_MODULE_ENABLED
139 
140 /* Private typedef -----------------------------------------------------------*/
141 /* Private define ------------------------------------------------------------*/
145 #define TEACK_REACK_TIMEOUT 1000U
146 #define HAL_IRDA_TXDMA_TIMEOUTVALUE 22000U
147 #define IRDA_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE \
148  | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE))
149 
152 /* Private macro -------------------------------------------------------------*/
153 /* Private variables ---------------------------------------------------------*/
154 /* Private function prototypes -----------------------------------------------*/
158 static void IRDA_DMATransmitCplt(DMA_HandleTypeDef *hdma);
159 static void IRDA_DMATransmitHalfCplt(DMA_HandleTypeDef *hdma);
160 static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma);
161 static void IRDA_DMAReceiveHalfCplt(DMA_HandleTypeDef *hdma);
162 static void IRDA_DMAError(DMA_HandleTypeDef *hdma);
163 static void IRDA_DMAAbortOnError(DMA_HandleTypeDef *hdma);
164 static void IRDA_EndTxTransfer(IRDA_HandleTypeDef *hirda);
165 static void IRDA_EndRxTransfer(IRDA_HandleTypeDef *hirda);
166 static void IRDA_SetConfig (IRDA_HandleTypeDef *hirda);
167 static HAL_StatusTypeDef IRDA_CheckIdleState(IRDA_HandleTypeDef *hirda);
168 static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout);
169 static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda);
170 static HAL_StatusTypeDef IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda);
171 static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda);
175 /* Exported functions --------------------------------------------------------*/
220 {
221  /* Check the IRDA handle allocation */
222  if(hirda == NULL)
223  {
224  return HAL_ERROR;
225  }
226 
227  /* Check the USART/UART associated to the IRDA handle */
229 
230  if(hirda->gState == HAL_IRDA_STATE_RESET)
231  {
232  /* Allocate lock resource and initialize it */
233  hirda->Lock = HAL_UNLOCKED;
234  /* Init the low level hardware : GPIO, CLOCK, CORTEX */
235  HAL_IRDA_MspInit(hirda);
236  }
237 
238  hirda->gState = HAL_IRDA_STATE_BUSY;
239 
240  /* Disable the Peripheral to update the configuration registers */
241  __HAL_IRDA_DISABLE(hirda);
242 
243  /* Set the IRDA Communication parameters */
244  IRDA_SetConfig(hirda);
245 
246  /* In IRDA mode, the following bits must be kept cleared:
247  - LINEN, STOP and CLKEN bits in the USART_CR2 register,
248  - SCEN and HDSEL bits in the USART_CR3 register.*/
251 
252  /* set the UART/USART in IRDA mode */
254 
255  /* Enable the Peripheral */
256  __HAL_IRDA_ENABLE(hirda);
257 
258  /* TEACK and/or REACK to check before moving hirda->State to Ready */
259  return (IRDA_CheckIdleState(hirda));
260 }
261 
269 {
270  /* Check the IRDA handle allocation */
271  if(hirda == NULL)
272  {
273  return HAL_ERROR;
274  }
275 
276  /* Check the parameters */
278 
279  hirda->gState = HAL_IRDA_STATE_BUSY;
280 
281  /* DeInit the low level hardware */
282  HAL_IRDA_MspDeInit(hirda);
283  /* Disable the Peripheral */
284  __HAL_IRDA_DISABLE(hirda);
285 
287  hirda->gState = HAL_IRDA_STATE_RESET;
288  hirda->RxState = HAL_IRDA_STATE_RESET;
289 
290  /* Release Lock */
291  __HAL_UNLOCK(hirda);
292 
293  return HAL_OK;
294 }
295 
302 __weak void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda)
303 {
304  /* Prevent unused argument(s) compilation warning */
305  UNUSED(hirda);
306 
307  /* NOTE : This function Should not be modified, when the callback is needed,
308  the HAL_IRDA_MspInit could be implemented in the user file
309  */
310 }
311 
318 __weak void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda)
319 {
320  /* Prevent unused argument(s) compilation warning */
321  UNUSED(hirda);
322 
323  /* NOTE : This function Should not be modified, when the callback is needed,
324  the HAL_IRDA_MspDeInit could be implemented in the user file
325  */
326 }
327 
393 HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
394 {
395  uint16_t* tmp;
396  uint32_t tickstart = 0U;
397 
398  /* Check that a Tx process is not already ongoing */
399  if(hirda->gState == HAL_IRDA_STATE_READY)
400  {
401  if((pData == NULL) || (Size == 0U))
402  {
403  return HAL_ERROR;
404  }
405 
406  /* Process Locked */
407  __HAL_LOCK(hirda);
410 
411  /* Init tickstart for timeout managment*/
412  tickstart = HAL_GetTick();
413 
414  hirda->TxXferSize = Size;
415  hirda->TxXferCount = Size;
416  while(hirda->TxXferCount > 0U)
417  {
418  hirda->TxXferCount--;
419 
420  if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)
421  {
422  return HAL_TIMEOUT;
423  }
424  if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE))
425  {
426  tmp = (uint16_t*) pData;
427  hirda->Instance->TDR = (*tmp & (uint16_t)0x01FFU);
428  pData +=2;
429  }
430  else
431  {
432  hirda->Instance->TDR = (*pData++ & (uint8_t)0xFFU);
433  }
434  }
435 
436  if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK)
437  {
438  return HAL_TIMEOUT;
439  }
440 
441  /* At end of Tx process, restore hirda->gState to Ready */
442  hirda->gState = HAL_IRDA_STATE_READY;
443 
444  /* Process Unlocked */
445  __HAL_UNLOCK(hirda);
446 
447  return HAL_OK;
448  }
449  else
450  {
451  return HAL_BUSY;
452  }
453 }
454 
464 HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
465 {
466  uint16_t* tmp;
467  uint16_t uhMask;
468  uint32_t tickstart = 0U;
469 
470  /* Check that a Rx process is not already ongoing */
471  if(hirda->RxState == HAL_IRDA_STATE_READY)
472  {
473  if((pData == NULL) || (Size == 0U))
474  {
475  return HAL_ERROR;
476  }
477 
478  /* Process Locked */
479  __HAL_LOCK(hirda);
482 
483  /* Init tickstart for timeout managment*/
484  tickstart = HAL_GetTick();
485 
486  hirda->RxXferSize = Size;
487  hirda->RxXferCount = Size;
488 
489  /* Computation of the mask to apply to the RDR register
490  of the UART associated to the IRDA */
491  IRDA_MASK_COMPUTATION(hirda);
492  uhMask = hirda->Mask;
493 
494  /* Check data remaining to be received */
495  while(hirda->RxXferCount > 0U)
496  {
497  hirda->RxXferCount--;
498 
499  if(IRDA_WaitOnFlagUntilTimeout(hirda, IRDA_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK)
500  {
501  return HAL_TIMEOUT;
502  }
503  if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE))
504  {
505  tmp = (uint16_t*) pData ;
506  *tmp = (uint16_t)(hirda->Instance->RDR & uhMask);
507  pData +=2;
508  }
509  else
510  {
511  *pData++ = (uint8_t)(hirda->Instance->RDR & (uint8_t)uhMask);
512  }
513  }
514 
515  /* At end of Rx process, restore hirda->RxState to Ready */
516  hirda->RxState = HAL_IRDA_STATE_READY;
517 
518  /* Process Unlocked */
519  __HAL_UNLOCK(hirda);
520 
521  return HAL_OK;
522  }
523  else
524  {
525  return HAL_BUSY;
526  }
527 }
528 
537 HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
538 {
539  /* Check that a Tx process is not already ongoing */
540  if(hirda->gState == HAL_IRDA_STATE_READY)
541  {
542  if((pData == NULL) || (Size == 0U))
543  {
544  return HAL_ERROR;
545  }
546 
547  /* Process Locked */
548  __HAL_LOCK(hirda);
549 
550  hirda->pTxBuffPtr = pData;
551  hirda->TxXferSize = Size;
552  hirda->TxXferCount = Size;
553 
556 
557  /* Process Unlocked */
558  __HAL_UNLOCK(hirda);
559 
560  /* Enable the IRDA Transmit Complete Interrupt */
562 
563  return HAL_OK;
564  }
565  else
566  {
567  return HAL_BUSY;
568  }
569 }
570 
579 HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
580 {
581  /* Check that a Rx process is not already ongoing */
582  if(hirda->RxState == HAL_IRDA_STATE_READY)
583  {
584  if((pData == NULL) || (Size == 0U))
585  {
586  return HAL_ERROR;
587  }
588 
589  /* Process Locked */
590  __HAL_LOCK(hirda);
591 
592  hirda->pRxBuffPtr = pData;
593  hirda->RxXferSize = Size;
594  hirda->RxXferCount = Size;
595 
596  /* Computation of the mask to apply to the RDR register
597  of the UART associated to the IRDA */
598  IRDA_MASK_COMPUTATION(hirda);
599 
602 
603  /* Process Unlocked */
604  __HAL_UNLOCK(hirda);
605 
606  /* Enable the IRDA Parity Error Interrupt */
608 
609  /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
610  SET_BIT(hirda->Instance->CR3, USART_CR3_EIE);
611 
612  /* Enable the IRDA Data Register not empty Interrupt */
614 
615  return HAL_OK;
616  }
617  else
618  {
619  return HAL_BUSY;
620  }
621 }
622 
631 HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
632 {
633  uint32_t *tmp;
634 
635  /* Check that a Tx process is not already ongoing */
636  if(hirda->gState == HAL_IRDA_STATE_READY)
637  {
638  if((pData == NULL) || (Size == 0U))
639  {
640  return HAL_ERROR;
641  }
642 
643  /* Process Locked */
644  __HAL_LOCK(hirda);
645 
646  hirda->pTxBuffPtr = pData;
647  hirda->TxXferSize = Size;
648  hirda->TxXferCount = Size;
649 
652 
653  /* Set the IRDA DMA transfer complete callback */
654  hirda->hdmatx->XferCpltCallback = IRDA_DMATransmitCplt;
655 
656  /* Set the IRDA DMA half transfer complete callback */
657  hirda->hdmatx->XferHalfCpltCallback = IRDA_DMATransmitHalfCplt;
658 
659  /* Set the DMA error callback */
660  hirda->hdmatx->XferErrorCallback = IRDA_DMAError;
661 
662  /* Set the DMA abort callback */
663  hirda->hdmatx->XferAbortCallback = NULL;
664 
665  /* Enable the IRDA transmit DMA channel */
666  tmp = (uint32_t*)&pData;
667  HAL_DMA_Start_IT(hirda->hdmatx, *(uint32_t*)tmp, (uint32_t)&hirda->Instance->TDR, Size);
668 
669  /* Clear the TC flag in the SR register by writing 0 to it */
671 
672  /* Process Unlocked */
673  __HAL_UNLOCK(hirda);
674 
675  /* Enable the DMA transfer for transmit request by setting the DMAT bit
676  in the IRDA CR3 register */
678 
679  return HAL_OK;
680  }
681  else
682  {
683  return HAL_BUSY;
684  }
685 }
686 
696 HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
697 {
698  uint32_t *tmp;
699 
700  /* Check that a Rx process is not already ongoing */
701  if(hirda->RxState == HAL_IRDA_STATE_READY)
702  {
703  if((pData == NULL) || (Size == 0U))
704  {
705  return HAL_ERROR;
706  }
707 
708  /* Process Locked */
709  __HAL_LOCK(hirda);
710 
711  hirda->pRxBuffPtr = pData;
712  hirda->RxXferSize = Size;
713 
716 
717  /* Set the IRDA DMA transfer complete callback */
718  hirda->hdmarx->XferCpltCallback = IRDA_DMAReceiveCplt;
719 
720  /* Set the IRDA DMA half transfer complete callback */
721  hirda->hdmarx->XferHalfCpltCallback = IRDA_DMAReceiveHalfCplt;
722 
723  /* Set the DMA error callback */
724  hirda->hdmarx->XferErrorCallback = IRDA_DMAError;
725 
726  /* Set the DMA abort callback */
727  hirda->hdmarx->XferAbortCallback = NULL;
728 
729  /* Enable the DMA channel */
730  tmp = (uint32_t*)&pData;
731  HAL_DMA_Start_IT(hirda->hdmarx, (uint32_t)&hirda->Instance->RDR, *(uint32_t*)tmp, Size);
732 
733  /* Process Unlocked */
734  __HAL_UNLOCK(hirda);
735 
736  /* Enable the IRDA Parity Error Interrupt */
738 
739  /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
740  SET_BIT(hirda->Instance->CR3, USART_CR3_EIE);
741 
742  /* Enable the DMA transfer for the receiver request by setting the DMAR bit
743  in the USART CR3 register */
745 
746  return HAL_OK;
747  }
748  else
749  {
750  return HAL_BUSY;
751  }
752 }
753 
761 {
762  /* Process Locked */
763  __HAL_LOCK(hirda);
764 
765  if((hirda->gState == HAL_IRDA_STATE_BUSY_TX)&&
767  {
768  /* Disable the UART DMA Tx request */
770  }
771  if((hirda->RxState == HAL_IRDA_STATE_BUSY_RX)&&
773  {
774  /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
777 
778  /* Disable the UART DMA Rx request */
780  }
781 
782  /* Process Unlocked */
783  __HAL_UNLOCK(hirda);
784 
785  return HAL_OK;
786 }
787 
795 {
796  /* Process Locked */
797  __HAL_LOCK(hirda);
798 
799  if(hirda->gState == HAL_IRDA_STATE_BUSY_TX)
800  {
801  /* Enable the UART DMA Tx request */
803  }
804  if(hirda->RxState == HAL_IRDA_STATE_BUSY_RX)
805  {
806  /* Clear the Overrun flag before resuming the Rx transfer*/
808 
809  /* Reenable PE and ERR (Frame error, noise error, overrun error) interrupts */
811  SET_BIT(hirda->Instance->CR3, USART_CR3_EIE);
812 
813  /* Enable the UART DMA Rx request */
815  }
816 
817  /* Process Unlocked */
818  __HAL_UNLOCK(hirda);
819 
820  return HAL_OK;
821 }
822 
830 {
831  /* The Lock is not implemented on this API to allow the user application
832  to call the HAL IRDA API under callbacks HAL_IRDA_TxCpltCallback() / HAL_IRDA_RxCpltCallback() /
833  HAL_IRDA_TxHalfCpltCallback / HAL_IRDA_RxHalfCpltCallback:
834  indeed, when HAL_DMA_Abort() API is called, the DMA TX/RX Transfer or Half Transfer complete
835  interrupt is generated if the DMA transfer interruption occurs at the middle or at the end of
836  the stream and the corresponding call back is executed. */
837 
838  /* Stop IRDA DMA Tx request if ongoing */
839  if ((hirda->gState == HAL_IRDA_STATE_BUSY_TX) &&
841  {
843 
844  /* Abort the IRDA DMA Tx channel */
845  if(hirda->hdmatx != NULL)
846  {
847  HAL_DMA_Abort(hirda->hdmatx);
848  }
849  IRDA_EndTxTransfer(hirda);
850  }
851 
852  /* Stop IRDA DMA Rx request if ongoing */
853  if ((hirda->RxState == HAL_IRDA_STATE_BUSY_RX) &&
855  {
857 
858  /* Abort the IRDA DMA Rx channel */
859  if(hirda->hdmarx != NULL)
860  {
861  HAL_DMA_Abort(hirda->hdmarx);
862  }
863  IRDA_EndRxTransfer(hirda);
864  }
865  return HAL_OK;
866 }
867 
874 static void IRDA_DMAAbortOnError(DMA_HandleTypeDef *hdma)
875 {
876  IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
877  hirda->RxXferCount = 0U;
878  hirda->TxXferCount = 0U;
879 
880  HAL_IRDA_ErrorCallback(hirda);
881 }
882 
890 {
891  uint32_t isrflags, cr1its, cr3its, errorflags;
892 
893  isrflags = READ_REG(hirda->Instance->ISR);
894  cr1its = READ_REG(hirda->Instance->CR1);
895  cr3its = READ_REG(hirda->Instance->CR3);
896 
897  /* If no error occurs */
898  errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE));
899  if (errorflags == RESET)
900  {
901  /* IRDA in mode Receiver ---------------------------------------------------*/
902  if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))
903  {
904  IRDA_Receive_IT(hirda);
905  /* Clear RXNE interrupt flag */
907  }
908  }
909 
910  /* If some errors occur */
911  if((errorflags != RESET) && ((cr3its & (USART_CR3_EIE | USART_CR1_PEIE)) != RESET))
912  {
913  /* IRDA parity error interrupt occurred -------------------------------------*/
914  if(((isrflags & USART_ISR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET))
915  {
917  hirda->ErrorCode |= HAL_IRDA_ERROR_PE;
918  }
919 
920  /* IRDA frame error interrupt occurred --------------------------------------*/
921  if(((isrflags & USART_ISR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET))
922  {
924  hirda->ErrorCode |= HAL_IRDA_ERROR_FE;
925  }
926 
927  /* IRDA noise error interrupt occurred --------------------------------------*/
928  if(((isrflags & USART_ISR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET))
929  {
931  hirda->ErrorCode |= HAL_IRDA_ERROR_NE;
932  }
933 
934  /* IRDA Over-Run interrupt occurred -----------------------------------------*/
935  if(((isrflags & USART_ISR_ORE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET))
936  {
938  hirda->ErrorCode |= HAL_IRDA_ERROR_ORE;
939  }
940 
941  /* Call IRDA Error Call back function if need be --------------------------*/
942  if(hirda->ErrorCode != HAL_IRDA_ERROR_NONE)
943  {
944  /* IRDA in mode Receiver ---------------------------------------------------*/
945  if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))
946  {
947  IRDA_Receive_IT(hirda);
948  }
949 
950  /* If Overrun error occurs, or if any error occurs in DMA mode reception,
951  consider error as blocking */
952  if (((hirda->ErrorCode & HAL_UART_ERROR_ORE) != RESET) ||
954  {
955  /* Blocking error : transfer is aborted
956  Set the IRDA state ready to be able to start again the process,
957  Disable Rx Interrupts, and disable Rx DMA request, if ongoing */
958  IRDA_EndRxTransfer(hirda);
959 
960  /* Disable the IRDA DMA Rx request if enabled */
962  {
964 
965  /* Abort the IRDA DMA Rx channel */
966  if(hirda->hdmarx != NULL)
967  {
968  /* Set the IRDA DMA Abort callback :
969  will lead to call HAL_IRDA_ErrorCallback() at end of DMA abort procedure */
970  hirda->hdmarx->XferAbortCallback = IRDA_DMAAbortOnError;
971 
972  /* Abort DMA RX */
973  if(HAL_DMA_Abort_IT(hirda->hdmarx) != HAL_OK)
974  {
975  /* Call Directly hirda->hdmarx->XferAbortCallback function in case of error */
976  hirda->hdmarx->XferAbortCallback(hirda->hdmarx);
977  }
978  }
979  else
980  {
981  /* Call user error callback */
982  HAL_IRDA_ErrorCallback(hirda);
983  }
984  }
985  else
986  {
987  /* Call user error callback */
988  HAL_IRDA_ErrorCallback(hirda);
989  }
990  }
991  else
992  {
993  /* Non Blocking error : transfer could go on.
994  Error is notified to user through user error callback */
995  HAL_IRDA_ErrorCallback(hirda);
997  }
998  }
999  return;
1000 
1001  } /* End if some error occurs */
1002 
1003  /* IRDA in mode Transmitter ------------------------------------------------*/
1004  if(((isrflags & USART_ISR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET))
1005  {
1006  IRDA_Transmit_IT(hirda);
1007  return;
1008  }
1009 
1010  /* IRDA in mode Transmitter (transmission end) -----------------------------*/
1011  if(((isrflags & USART_ISR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET))
1012  {
1013  IRDA_EndTransmit_IT(hirda);
1014  return;
1015  }
1016 }
1017 
1023 static void IRDA_EndTxTransfer(IRDA_HandleTypeDef *hirda)
1024 {
1025  /* Disable TXEIE and TCIE interrupts */
1026  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE));
1027 
1028  /* At end of Tx process, restore hirda->gState to Ready */
1029  hirda->gState = HAL_IRDA_STATE_READY;
1030 }
1031 
1037 static void IRDA_EndRxTransfer(IRDA_HandleTypeDef *hirda)
1038 {
1039  /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
1040  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));
1041  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
1042 
1043  /* At end of Rx process, restore huart->RxState to Ready */
1044  hirda->RxState = HAL_IRDA_STATE_READY;
1045 }
1046 
1054 {
1055  /* Prevent unused argument(s) compilation warning */
1056  UNUSED(hirda);
1057 
1058  /* NOTE : This function should not be modified, when the callback is needed,
1059  the HAL_IRDA_TxHalfCpltCallback can be implemented in the user file
1060  */
1061 }
1062 
1069 __weak void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
1070 {
1071  /* Prevent unused argument(s) compilation warning */
1072  UNUSED(hirda);
1073 
1074  /* NOTE : This function should not be modified, when the callback is needed,
1075  the HAL_IRDA_TxCpltCallback can be implemented in the user file
1076  */
1077 }
1078 
1086 {
1087  /* Prevent unused argument(s) compilation warning */
1088  UNUSED(hirda);
1089 
1090  /* NOTE : This function should not be modified, when the callback is needed,
1091  the HAL_IRDA_RxHalfCpltCallback can be implemented in the user file
1092  */
1093 }
1094 
1101 __weak void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
1102 {
1103  /* Prevent unused argument(s) compilation warning */
1104  UNUSED(hirda);
1105 
1106  /* NOTE : This function should not be modified, when the callback is needed,
1107  the HAL_IRDA_RxCpltCallback can be implemented in the user file
1108  */
1109 }
1110 
1117 __weak void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
1118 {
1119  /* Prevent unused argument(s) compilation warning */
1120  UNUSED(hirda);
1121 
1122  /* NOTE : This function should not be modified, when the callback is needed,
1123  the HAL_IRDA_ErrorCallback can be implemented in the user file
1124  */
1125 }
1126 
1153 {
1154  uint32_t temp1 = 0x00U, temp2 = 0x00U;
1155  temp1 = hirda->gState;
1156  temp2 = hirda->RxState;
1157 
1158  return (HAL_IRDA_StateTypeDef)(temp1 | temp2);
1159 }
1160 
1167 uint32_t HAL_IRDA_GetError(IRDA_HandleTypeDef *hirda)
1168 {
1169  uint32_t temp1 = 0x00U, temp2 = 0x00U;
1170  temp1 = hirda->gState;
1171  temp2 = hirda->RxState;
1172 
1173  return (HAL_IRDA_StateTypeDef)(temp1 | temp2);
1174 }
1175 
1185 static void IRDA_SetConfig(IRDA_HandleTypeDef *hirda)
1186 {
1187  uint32_t tmpreg = 0x00000000U;
1188  uint32_t clocksource = 0x00000000U;
1189 
1190  /* Check the communication parameters */
1197  /*-------------------------- USART CR1 Configuration -----------------------*/
1198  /* Configure the IRDA Word Length, Parity and transfer Mode:
1199  Set the M bits according to hirda->Init.WordLength value
1200  Set PCE and PS bits according to hirda->Init.Parity value
1201  Set TE and RE bits according to hirda->Init.Mode value */
1202  tmpreg = (uint32_t)hirda->Init.WordLength | hirda->Init.Parity | hirda->Init.Mode ;
1203 
1204  MODIFY_REG(hirda->Instance->CR1, IRDA_CR1_FIELDS, tmpreg);
1205 
1206  /*-------------------------- USART CR3 Configuration -----------------------*/
1207  MODIFY_REG(hirda->Instance->CR3, USART_CR3_IRLP, hirda->Init.PowerMode);
1208 
1209  /*-------------------------- USART GTPR Configuration ----------------------*/
1210  MODIFY_REG(hirda->Instance->GTPR, (uint32_t)USART_GTPR_PSC, hirda->Init.Prescaler);
1211 
1212  /*-------------------------- USART BRR Configuration -----------------------*/
1213  IRDA_GETCLOCKSOURCE(hirda, clocksource);
1214  switch (clocksource)
1215  {
1217  hirda->Instance->BRR = (uint16_t)((HAL_RCC_GetPCLK1Freq() + (hirda->Init.BaudRate/2))/ hirda->Init.BaudRate);
1218  break;
1220  hirda->Instance->BRR = (uint16_t)((HAL_RCC_GetPCLK2Freq() + (hirda->Init.BaudRate/2))/ hirda->Init.BaudRate);
1221  break;
1222  case IRDA_CLOCKSOURCE_HSI:
1223  hirda->Instance->BRR = (uint16_t)((HSI_VALUE + (hirda->Init.BaudRate/2))/ hirda->Init.BaudRate);
1224  break;
1226  hirda->Instance->BRR = (uint16_t)((HAL_RCC_GetSysClockFreq() + (hirda->Init.BaudRate/2))/ hirda->Init.BaudRate);
1227  break;
1228  case IRDA_CLOCKSOURCE_LSE:
1229  hirda->Instance->BRR = (uint16_t)((LSE_VALUE + (hirda->Init.BaudRate/2))/ hirda->Init.BaudRate);
1230  break;
1231  default:
1232  break;
1233  }
1234 }
1235 
1242 static HAL_StatusTypeDef IRDA_CheckIdleState(IRDA_HandleTypeDef *hirda)
1243 {
1244  uint32_t tickstart = 0U;
1245 
1246  /* Initialize the IRDA ErrorCode */
1247  hirda->ErrorCode = HAL_IRDA_ERROR_NONE;
1248 
1249  /* Init tickstart for timeout managment*/
1250  tickstart = HAL_GetTick();
1251 
1252  /* Check if the Transmitter is enabled */
1253  if((hirda->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
1254  {
1255  /* Wait until TEACK flag is set */
1256  if(IRDA_WaitOnFlagUntilTimeout(hirda, USART_ISR_TEACK, RESET, tickstart, TEACK_REACK_TIMEOUT) != HAL_OK)
1257  {
1258  return HAL_TIMEOUT;
1259  }
1260  }
1261  /* Check if the Receiver is enabled */
1262  if((hirda->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
1263  {
1264  if(IRDA_WaitOnFlagUntilTimeout(hirda, USART_ISR_REACK, RESET, tickstart, TEACK_REACK_TIMEOUT) != HAL_OK)
1265  {
1266  return HAL_TIMEOUT;
1267  }
1268  }
1269  /* Process Unlocked */
1270  __HAL_UNLOCK(hirda);
1271 
1272  /* Initialize the IRDA state*/
1273  hirda->gState= HAL_IRDA_STATE_READY;
1274  hirda->RxState= HAL_IRDA_STATE_READY;
1275 
1276  return HAL_OK;
1277 }
1278 
1289 static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
1290 {
1291  /* Wait until flag is set */
1292  while((__HAL_IRDA_GET_FLAG(hirda, Flag) ? SET : RESET) == Status)
1293  {
1294  /* Check for the Timeout */
1295  if(Timeout != HAL_MAX_DELAY)
1296  {
1297  if((Timeout == 0)||((HAL_GetTick() - Tickstart ) > Timeout))
1298  {
1299  /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
1300  CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));
1301  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
1302 
1303  hirda->gState= HAL_IRDA_STATE_READY;
1304  hirda->RxState= HAL_IRDA_STATE_READY;
1305 
1306  /* Process Unlocked */
1307  __HAL_UNLOCK(hirda);
1308 
1309  return HAL_TIMEOUT;
1310  }
1311  }
1312  }
1313  return HAL_OK;
1314 }
1315 
1322 static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda)
1323 {
1324  uint16_t* tmp;
1325 
1326  /* Check that a Tx process is ongoing */
1327  if(hirda->gState == HAL_IRDA_STATE_BUSY_TX)
1328  {
1329  if(hirda->Init.WordLength == IRDA_WORDLENGTH_9B)
1330  {
1331  tmp = (uint16_t*) hirda->pTxBuffPtr;
1332  hirda->Instance->RDR = (uint16_t)(*tmp & (uint16_t)0x01FFU);
1333  if(hirda->Init.Parity == IRDA_PARITY_NONE)
1334  {
1335  hirda->pTxBuffPtr += 2U;
1336  }
1337  else
1338  {
1339  hirda->pTxBuffPtr += 1U;
1340  }
1341  }
1342  else
1343  {
1344  hirda->Instance->RDR = (uint8_t)(*hirda->pTxBuffPtr++ & (uint8_t)0x00FFU);
1345  }
1346 
1347  if(--hirda->TxXferCount == 0U)
1348  {
1349  /* Disable the IRDA Transmit Data Register Empty Interrupt */
1350  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TXEIE);
1351 
1352  /* Enable the IRDA Transmit Complete Interrupt */
1353  SET_BIT(hirda->Instance->CR1, USART_CR1_TCIE);
1354  }
1355 
1356  return HAL_OK;
1357  }
1358  else
1359  {
1360  return HAL_BUSY;
1361  }
1362 }
1363 
1370 static HAL_StatusTypeDef IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda)
1371 {
1372  /* Disable the IRDA Transmit Complete Interrupt */
1374 
1375  /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
1376  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
1377 
1378  /* Tx process is ended, restore hirda->gState to Ready */
1379  hirda->gState = HAL_IRDA_STATE_READY;
1380 
1381  HAL_IRDA_TxCpltCallback(hirda);
1382 
1383  return HAL_OK;
1384 }
1385 
1394 static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda)
1395 {
1396  uint16_t* tmp;
1397  uint16_t uhdata;
1398  uint16_t uhMask = hirda->Mask;
1399 
1400  if(hirda->RxState == HAL_IRDA_STATE_BUSY_RX)
1401  {
1402  uhdata = (uint16_t) READ_REG(hirda->Instance->RDR);
1403  if ((hirda->Init.WordLength == IRDA_WORDLENGTH_9B) && (hirda->Init.Parity == IRDA_PARITY_NONE))
1404  {
1405  tmp = (uint16_t*) hirda->pRxBuffPtr ;
1406  *tmp = (uint16_t)(uhdata & uhMask);
1407  hirda->pRxBuffPtr +=2U;
1408  }
1409  else
1410  {
1411  *hirda->pRxBuffPtr++ = (uint8_t)(uhdata & (uint8_t)uhMask);
1412  }
1413 
1414  if(--hirda->RxXferCount == 0U)
1415  {
1416  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_RXNEIE);
1417 
1418  /* Disable the IRDA Parity Error Interrupt */
1419  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_PEIE);
1420 
1421  /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */
1422  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
1423 
1424  /* Rx process is completed, restore hirda->RxState to Ready */
1425  hirda->RxState = HAL_IRDA_STATE_READY;
1426 
1427  HAL_IRDA_RxCpltCallback(hirda);
1428 
1429  return HAL_OK;
1430  }
1431  return HAL_OK;
1432  }
1433  else
1434  {
1435  /* Clear RXNE interrupt flag */
1437  return HAL_BUSY;
1438  }
1439 }
1440 
1447 static void IRDA_DMATransmitCplt(DMA_HandleTypeDef *hdma)
1448 {
1449  IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1450 
1451  /* DMA Normal mode*/
1452  if((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U)
1453  {
1454  hirda->TxXferCount = 0U;
1455 
1456  /* Disable the DMA transfer for transmit request by setting the DMAT bit
1457  in the IRDA CR3 register */
1459 
1460  /* Enable the IRDA Transmit Complete Interrupt */
1461  SET_BIT(hirda->Instance->CR1, USART_CR1_TCIE);
1462  }
1463  /* DMA Circular mode */
1464  else
1465  {
1466  HAL_IRDA_TxCpltCallback(hirda);
1467  }
1468 }
1469 
1476 static void IRDA_DMATransmitHalfCplt(DMA_HandleTypeDef *hdma)
1477 {
1478  IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1479 
1481 }
1482 
1488 static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
1489 {
1490  IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1491 
1492  /* DMA Normal mode */
1493  if((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U)
1494  {
1495  hirda->RxXferCount = 0U;
1496 
1497  /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
1498  CLEAR_BIT(hirda->Instance->CR1, USART_CR1_PEIE);
1499  CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE);
1500 
1501  /* Disable the DMA transfer for the receiver request by setting the DMAR bit
1502  in the IRDA CR3 register */
1504 
1505  /* At end of Rx process, restore hirda->RxState to Ready */
1506  hirda->RxState = HAL_IRDA_STATE_READY;
1507  }
1508 
1509  HAL_IRDA_RxCpltCallback(hirda);
1510 }
1511 
1518 static void IRDA_DMAReceiveHalfCplt(DMA_HandleTypeDef *hdma)
1519 {
1520  IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1521 
1523 }
1524 
1530 static void IRDA_DMAError(DMA_HandleTypeDef *hdma)
1531 {
1532  IRDA_HandleTypeDef* hirda = ( IRDA_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1533 
1534  hirda->RxXferCount = 0U;
1535  hirda->TxXferCount = 0U;
1536 
1537  /* Stop IRDA DMA Tx request if ongoing */
1538  if ( (hirda->gState == HAL_IRDA_STATE_BUSY_TX)
1539  &&(HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) )
1540  {
1541  IRDA_EndTxTransfer(hirda);
1542  }
1543 
1544  /* Stop IRDA DMA Rx request if ongoing */
1545  if ( (hirda->RxState == HAL_IRDA_STATE_BUSY_RX)
1546  &&(HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAR)) )
1547  {
1548  IRDA_EndRxTransfer(hirda);
1549  }
1550 
1551  hirda->ErrorCode |= HAL_IRDA_ERROR_DMA;
1552 
1553  HAL_IRDA_ErrorCallback(hirda);
1554 }
1555 
1564 #endif /* HAL_IRDA_MODULE_ENABLED */
1565 
1570 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
1571 
__IO uint32_t GTPR
Definition: stm32f745xx.h:934
#define CLEAR_BIT(REG, BIT)
Definition: stm32f7xx.h:180
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
Definition: stm32f7xx.h:190
#define IRDA_FLAG_TC
#define USART_CR1_PEIE
Definition: stm32f745xx.h:7414
#define USART_CR1_TCIE
Definition: stm32f745xx.h:7412
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
__IO HAL_IRDA_StateTypeDef RxState
#define assert_param(expr)
Include module's header file.
#define IRDA_CLEAR_OREF
#define __HAL_IRDA_DISABLE(__HANDLE__)
Disable UART/USART associated to IRDA Handle.
#define USART_CR2_CLKEN
Definition: stm32f745xx.h:7446
#define IS_IRDA_TX_RX_MODE(__MODE__)
#define HSI_VALUE
Internal High Speed oscillator (HSI) value. This value is used by the RCC HAL module to compute the s...
#define IRDA_CLEAR_NEF
HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda)
Definition: stm32f7xx.h:155
void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda)
#define USART_ISR_REACK
Definition: stm32f745xx.h:7528
HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
#define __HAL_UNLOCK(__HANDLE__)
void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
HAL_IRDA_StateTypeDef
HAL IRDA State structures definition.
uint32_t HAL_IRDA_GetError(IRDA_HandleTypeDef *hirda)
#define IS_IRDA_WORD_LENGTH(LENGTH)
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
__IO uint32_t TDR
Definition: stm32f745xx.h:940
#define USART_CR1_TXEIE
Definition: stm32f745xx.h:7413
__IO uint32_t BRR
Definition: stm32f745xx.h:933
#define IS_IRDA_PRESCALER(__PRESCALER__)
Ensure that IRDA prescaler value is strictly larger than 0.
#define USART_CR3_HDSEL
Definition: stm32f745xx.h:7467
IRDA_InitTypeDef Init
#define USART_ISR_TC
Definition: stm32f745xx.h:7513
HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
#define HAL_IRDA_ERROR_DMA
#define USART_ISR_TEACK
Definition: stm32f745xx.h:7527
HAL_StatusTypeDef HAL_IRDA_Init(IRDA_HandleTypeDef *hirda)
#define USART_CR1_TE
Definition: stm32f745xx.h:7409
HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
DMA_HandleTypeDef * hdmarx
HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
#define USART_ISR_FE
Definition: stm32f745xx.h:7508
DMA_HandleTypeDef * hdmatx
#define USART_CR1_RXNEIE
Definition: stm32f745xx.h:7411
void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda)
#define USART_CR3_IRLP
Definition: stm32f745xx.h:7466
HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda)
IRDA handle Structure definition.
#define IS_IRDA_BAUDRATE(__BAUDRATE__)
Ensure that IRDA Baud rate is less or equal to maximum value.
#define __HAL_IRDA_GET_FLAG(__HANDLE__, __FLAG__)
Check whether the specified IRDA flag is set or not.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
#define __HAL_LOCK(__HANDLE__)
#define HAL_IRDA_ERROR_PE
#define NULL
Definition: usbd_def.h:53
#define DMA_SxCR_CIRC
Definition: stm32f745xx.h:3313
uint32_t HAL_RCC_GetPCLK1Freq(void)
#define HAL_MAX_DELAY
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
#define IRDA_GETCLOCKSOURCE(__HANDLE__, __CLOCKSOURCE__)
Reports the IRDA clock source.
#define __HAL_IRDA_CLEAR_IT(__HANDLE__, __IT_CLEAR__)
Clear the specified IRDA ISR flag, in setting the proper ICR register flag.
FlagStatus
Definition: stm32f7xx.h:152
#define IRDA_CLEAR_FEF
#define USART_CR2_STOP
Definition: stm32f745xx.h:7447
#define IRDA_PARITY_NONE
This file contains all the functions prototypes for the HAL module driver.
#define HAL_UART_ERROR_ORE
#define USART_ISR_PE
Definition: stm32f745xx.h:7507
#define IRDA_CLEAR_PEF
__IO uint32_t CR1
Definition: stm32f745xx.h:930
DMA_Stream_TypeDef * Instance
uint32_t HAL_RCC_GetSysClockFreq(void)
#define USART_ISR_RXNE
Definition: stm32f745xx.h:7512
#define LSE_VALUE
External Low Speed oscillator (LSE) value.
#define USART_ISR_TXE
Definition: stm32f745xx.h:7514
#define __HAL_IRDA_ENABLE(__HANDLE__)
Enable UART/USART associated to IRDA Handle.
HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout)
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
#define HAL_IRDA_ERROR_ORE
#define HAL_IRDA_ERROR_NONE
__IO HAL_IRDA_StateTypeDef gState
__IO uint32_t CR
Definition: stm32f745xx.h:392
#define UNUSED(x)
#define USART_CR3_DMAT
Definition: stm32f745xx.h:7471
#define USART_GTPR_PSC
Definition: stm32f745xx.h:7491
#define IS_IRDA_POWERMODE(__MODE__)
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
#define IRDA_RXDATA_FLUSH_REQUEST
#define IRDA_FLAG_RXNE
void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda)
#define SET_BIT(REG, BIT)
Definition: stm32f7xx.h:178
#define IS_IRDA_PARITY(__PARITY__)
#define IRDA_WORDLENGTH_9B
#define IRDA_MASK_COMPUTATION(__HANDLE__)
Reports the mask to apply to retrieve the received data according to the word length and to the parit...
#define HAL_IS_BIT_SET(REG, BIT)
void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda)
#define HAL_IRDA_ERROR_NE
#define READ_REG(REG)
Definition: stm32f7xx.h:188
#define USART_ISR_ORE
Definition: stm32f745xx.h:7510
DMA handle Structure definition.
__IO uint32_t RDR
Definition: stm32f745xx.h:939
#define IS_IRDA_INSTANCE(__INSTANCE__)
Definition: stm32f745xx.h:9213
void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda)
HAL_StatusTypeDef HAL_IRDA_DeInit(IRDA_HandleTypeDef *hirda)
HAL_IRDA_StateTypeDef HAL_IRDA_GetState(IRDA_HandleTypeDef *hirda)
#define __HAL_IRDA_SEND_REQ(__HANDLE__, __REQ__)
Set a specific IRDA request flag.
__IO uint32_t CR3
Definition: stm32f745xx.h:932
void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda)
__IO uint32_t ISR
Definition: stm32f745xx.h:937
#define HAL_IRDA_ERROR_FE
#define IRDA_FLAG_TXE
HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda)
#define USART_CR1_RE
Definition: stm32f745xx.h:7408
USART_TypeDef * Instance
HAL_StatusTypeDef
HAL Status structures definition.
#define USART_CR3_IREN
Definition: stm32f745xx.h:7465
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
HAL_LockTypeDef Lock
uint32_t HAL_RCC_GetPCLK2Freq(void)
#define USART_CR3_EIE
Definition: stm32f745xx.h:7464
HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size)
#define USART_CR3_SCEN
Definition: stm32f745xx.h:7469
#define USART_ISR_NE
Definition: stm32f745xx.h:7509
#define USART_CR2_LINEN
Definition: stm32f745xx.h:7450
#define USART_CR3_DMAR
Definition: stm32f745xx.h:7470