Subversion Repositories FuelGauge

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 6
Line 37... Line 37...
37
            (+++) Declare a DMA handle structure for the Tx/Rx channel.
37
            (+++) Declare a DMA handle structure for the Tx/Rx channel.
38
            (+++) Enable the DMAx interface clock.
38
            (+++) Enable the DMAx interface clock.
39
            (+++) Configure the declared DMA handle structure with the required Tx/Rx parameters.
39
            (+++) Configure the declared DMA handle structure with the required Tx/Rx parameters.
40
            (+++) Configure the DMA Tx/Rx channel.
40
            (+++) Configure the DMA Tx/Rx channel.
41
            (+++) Associate the initialized DMA handle to the USART DMA Tx/Rx handle.
41
            (+++) Associate the initialized DMA handle to the USART DMA Tx/Rx handle.
42
            (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx/Rx channel.
42
            (+++) Configure the priority and enable the NVIC for the transfer
-
 
43
                  complete interrupt on the DMA Tx/Rx channel.
43
 
44
 
44
      (#) Program the Baud Rate, Word Length, Stop Bit, Parity, and Mode
45
      (#) Program the Baud Rate, Word Length, Stop Bit, Parity, and Mode
45
          (Receiver/Transmitter) in the husart handle Init structure.
46
          (Receiver/Transmitter) in the husart handle Init structure.
46
 
47
 
47
      (#) Initialize the USART registers by calling the HAL_USART_Init() API:
48
      (#) Initialize the USART registers by calling the HAL_USART_Init() API:
Line 59... Line 60...
59
    [..]
60
    [..]
60
    The compilation define USE_HAL_USART_REGISTER_CALLBACKS when set to 1
61
    The compilation define USE_HAL_USART_REGISTER_CALLBACKS when set to 1
61
    allows the user to configure dynamically the driver callbacks.
62
    allows the user to configure dynamically the driver callbacks.
62
 
63
 
63
    [..]
64
    [..]
64
    Use Function @ref HAL_USART_RegisterCallback() to register a user callback.
65
    Use Function HAL_USART_RegisterCallback() to register a user callback.
65
    Function @ref HAL_USART_RegisterCallback() allows to register following callbacks:
66
    Function HAL_USART_RegisterCallback() allows to register following callbacks:
66
    (+) TxHalfCpltCallback        : Tx Half Complete Callback.
67
    (+) TxHalfCpltCallback        : Tx Half Complete Callback.
67
    (+) TxCpltCallback            : Tx Complete Callback.
68
    (+) TxCpltCallback            : Tx Complete Callback.
68
    (+) RxHalfCpltCallback        : Rx Half Complete Callback.
69
    (+) RxHalfCpltCallback        : Rx Half Complete Callback.
69
    (+) RxCpltCallback            : Rx Complete Callback.
70
    (+) RxCpltCallback            : Rx Complete Callback.
70
    (+) TxRxCpltCallback          : Tx Rx Complete Callback.
71
    (+) TxRxCpltCallback          : Tx Rx Complete Callback.
Line 74... Line 75...
74
    (+) MspDeInitCallback         : USART MspDeInit.
75
    (+) MspDeInitCallback         : USART MspDeInit.
75
    This function takes as parameters the HAL peripheral handle, the Callback ID
76
    This function takes as parameters the HAL peripheral handle, the Callback ID
76
    and a pointer to the user callback function.
77
    and a pointer to the user callback function.
77
 
78
 
78
    [..]
79
    [..]
79
    Use function @ref HAL_USART_UnRegisterCallback() to reset a callback to the default
80
    Use function HAL_USART_UnRegisterCallback() to reset a callback to the default
80
    weak (surcharged) function.
81
    weak (surcharged) function.
81
    @ref HAL_USART_UnRegisterCallback() takes as parameters the HAL peripheral handle,
82
    HAL_USART_UnRegisterCallback() takes as parameters the HAL peripheral handle,
82
    and the Callback ID.
83
    and the Callback ID.
83
    This function allows to reset following callbacks:
84
    This function allows to reset following callbacks:
84
    (+) TxHalfCpltCallback        : Tx Half Complete Callback.
85
    (+) TxHalfCpltCallback        : Tx Half Complete Callback.
85
    (+) TxCpltCallback            : Tx Complete Callback.
86
    (+) TxCpltCallback            : Tx Complete Callback.
86
    (+) RxHalfCpltCallback        : Rx Half Complete Callback.
87
    (+) RxHalfCpltCallback        : Rx Half Complete Callback.
Line 90... Line 91...
90
    (+) AbortCpltCallback         : Abort Complete Callback.
91
    (+) AbortCpltCallback         : Abort Complete Callback.
91
    (+) MspInitCallback           : USART MspInit.
92
    (+) MspInitCallback           : USART MspInit.
92
    (+) MspDeInitCallback         : USART MspDeInit.
93
    (+) MspDeInitCallback         : USART MspDeInit.
93
 
94
 
94
    [..]
95
    [..]
95
    By default, after the @ref HAL_USART_Init() and when the state is HAL_USART_STATE_RESET
96
    By default, after the HAL_USART_Init() and when the state is HAL_USART_STATE_RESET
96
    all callbacks are set to the corresponding weak (surcharged) functions:
97
    all callbacks are set to the corresponding weak (surcharged) functions:
97
    examples @ref HAL_USART_TxCpltCallback(), @ref HAL_USART_RxHalfCpltCallback().
98
    examples HAL_USART_TxCpltCallback(), HAL_USART_RxHalfCpltCallback().
98
    Exception done for MspInit and MspDeInit functions that are respectively
99
    Exception done for MspInit and MspDeInit functions that are respectively
99
    reset to the legacy weak (surcharged) functions in the @ref HAL_USART_Init()
100
    reset to the legacy weak (surcharged) functions in the HAL_USART_Init()
100
    and @ref HAL_USART_DeInit() only when these callbacks are null (not registered beforehand).
101
    and HAL_USART_DeInit() only when these callbacks are null (not registered beforehand).
101
    If not, MspInit or MspDeInit are not null, the @ref HAL_USART_Init() and @ref HAL_USART_DeInit()
102
    If not, MspInit or MspDeInit are not null, the HAL_USART_Init() and HAL_USART_DeInit()
102
    keep and use the user MspInit/MspDeInit callbacks (registered beforehand).
103
    keep and use the user MspInit/MspDeInit callbacks (registered beforehand).
103
 
104
 
104
    [..]
105
    [..]
105
    Callbacks can be registered/unregistered in HAL_USART_STATE_READY state only.
106
    Callbacks can be registered/unregistered in HAL_USART_STATE_READY state only.
106
    Exception done MspInit/MspDeInit that can be registered/unregistered
107
    Exception done MspInit/MspDeInit that can be registered/unregistered
107
    in HAL_USART_STATE_READY or HAL_USART_STATE_RESET state, thus registered (user)
108
    in HAL_USART_STATE_READY or HAL_USART_STATE_RESET state, thus registered (user)
108
    MspInit/DeInit callbacks can be used during the Init/DeInit.
109
    MspInit/DeInit callbacks can be used during the Init/DeInit.
109
    In that case first register the MspInit/MspDeInit user callbacks
110
    In that case first register the MspInit/MspDeInit user callbacks
110
    using @ref HAL_USART_RegisterCallback() before calling @ref HAL_USART_DeInit()
111
    using HAL_USART_RegisterCallback() before calling HAL_USART_DeInit()
111
    or @ref HAL_USART_Init() function.
112
    or HAL_USART_Init() function.
112
 
113
 
113
    [..]
114
    [..]
114
    When The compilation define USE_HAL_USART_REGISTER_CALLBACKS is set to 0 or
115
    When The compilation define USE_HAL_USART_REGISTER_CALLBACKS is set to 0 or
115
    not defined, the callback registration feature is not available
116
    not defined, the callback registration feature is not available
116
    and weak (surcharged) callbacks are used.
117
    and weak (surcharged) callbacks are used.
Line 313... Line 314...
313
    return HAL_ERROR;
314
    return HAL_ERROR;
314
  }
315
  }
315
 
316
 
316
  /* In Synchronous mode, the following bits must be kept cleared:
317
  /* In Synchronous mode, the following bits must be kept cleared:
317
  - LINEN bit (if LIN is supported) in the USART_CR2 register
318
  - LINEN bit (if LIN is supported) in the USART_CR2 register
318
  - SCEN (if Smartcard is supported), HDSEL and IREN (if IrDA is supported) bits in the USART_CR3 register.
319
  - SCEN (if Smartcard is supported), HDSEL and IREN (if IrDA is supported) bits in the USART_CR3 register.
319
  */
320
  */
320
#if  defined (USART_CR2_LINEN)
321
#if  defined (USART_CR2_LINEN)
321
  husart->Instance->CR2 &= ~USART_CR2_LINEN;
322
  husart->Instance->CR2 &= ~USART_CR2_LINEN;
322
#endif /* USART_CR2_LINEN */
323
#endif /* USART_CR2_LINEN */
323
#if  defined (USART_CR3_SCEN)
324
#if  defined (USART_CR3_SCEN)
Line 533... Line 534...
533
 
534
 
534
  return status;
535
  return status;
535
}
536
}
536
 
537
 
537
/**
538
/**
538
  * @brief  Unregister an UART Callback
539
  * @brief  Unregister an USART Callback
539
  *         UART callaback is redirected to the weak predefined callback
540
  *         USART callaback is redirected to the weak predefined callback
540
  * @param  husart uart handle
541
  * @param  husart usart handle
541
  * @param  CallbackID ID of the callback to be unregistered
542
  * @param  CallbackID ID of the callback to be unregistered
542
  *         This parameter can be one of the following values:
543
  *         This parameter can be one of the following values:
543
  *           @arg @ref HAL_USART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID
544
  *           @arg @ref HAL_USART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID
544
  *           @arg @ref HAL_USART_TX_COMPLETE_CB_ID Tx Complete Callback ID
545
  *           @arg @ref HAL_USART_TX_COMPLETE_CB_ID Tx Complete Callback ID
545
  *           @arg @ref HAL_USART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID
546
  *           @arg @ref HAL_USART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID
Line 561... Line 562...
561
  if (HAL_USART_STATE_READY == husart->State)
562
  if (HAL_USART_STATE_READY == husart->State)
562
  {
563
  {
563
    switch (CallbackID)
564
    switch (CallbackID)
564
    {
565
    {
565
      case HAL_USART_TX_HALFCOMPLETE_CB_ID :
566
      case HAL_USART_TX_HALFCOMPLETE_CB_ID :
566
        husart->TxHalfCpltCallback = HAL_USART_TxHalfCpltCallback;               /* Legacy weak  TxHalfCpltCallback       */
567
        husart->TxHalfCpltCallback = HAL_USART_TxHalfCpltCallback;               /* Legacy weak  TxHalfCpltCallback  */
567
        break;
568
        break;
568
 
569
 
569
      case HAL_USART_TX_COMPLETE_CB_ID :
570
      case HAL_USART_TX_COMPLETE_CB_ID :
570
        husart->TxCpltCallback = HAL_USART_TxCpltCallback;                       /* Legacy weak TxCpltCallback            */
571
        husart->TxCpltCallback = HAL_USART_TxCpltCallback;                       /* Legacy weak TxCpltCallback       */
571
        break;
572
        break;
572
 
573
 
573
      case HAL_USART_RX_HALFCOMPLETE_CB_ID :
574
      case HAL_USART_RX_HALFCOMPLETE_CB_ID :
574
        husart->RxHalfCpltCallback = HAL_USART_RxHalfCpltCallback;               /* Legacy weak RxHalfCpltCallback        */
575
        husart->RxHalfCpltCallback = HAL_USART_RxHalfCpltCallback;               /* Legacy weak RxHalfCpltCallback   */
575
        break;
576
        break;
576
 
577
 
577
      case HAL_USART_RX_COMPLETE_CB_ID :
578
      case HAL_USART_RX_COMPLETE_CB_ID :
578
        husart->RxCpltCallback = HAL_USART_RxCpltCallback;                       /* Legacy weak RxCpltCallback            */
579
        husart->RxCpltCallback = HAL_USART_RxCpltCallback;                       /* Legacy weak RxCpltCallback       */
579
        break;
580
        break;
580
 
581
 
581
      case HAL_USART_TX_RX_COMPLETE_CB_ID :
582
      case HAL_USART_TX_RX_COMPLETE_CB_ID :
582
        husart->TxRxCpltCallback = HAL_USART_TxRxCpltCallback;                   /* Legacy weak TxRxCpltCallback            */
583
        husart->TxRxCpltCallback = HAL_USART_TxRxCpltCallback;                   /* Legacy weak TxRxCpltCallback     */
583
        break;
584
        break;
584
 
585
 
585
      case HAL_USART_ERROR_CB_ID :
586
      case HAL_USART_ERROR_CB_ID :
586
        husart->ErrorCallback = HAL_USART_ErrorCallback;                         /* Legacy weak ErrorCallback             */
587
        husart->ErrorCallback = HAL_USART_ErrorCallback;                         /* Legacy weak ErrorCallback        */
587
        break;
588
        break;
588
 
589
 
589
      case HAL_USART_ABORT_COMPLETE_CB_ID :
590
      case HAL_USART_ABORT_COMPLETE_CB_ID :
590
        husart->AbortCpltCallback = HAL_USART_AbortCpltCallback;                 /* Legacy weak AbortCpltCallback         */
591
        husart->AbortCpltCallback = HAL_USART_AbortCpltCallback;                 /* Legacy weak AbortCpltCallback    */
591
        break;
592
        break;
592
 
593
 
593
 
594
 
594
      case HAL_USART_MSPINIT_CB_ID :
595
      case HAL_USART_MSPINIT_CB_ID :
595
        husart->MspInitCallback = HAL_USART_MspInit;                             /* Legacy weak MspInitCallback           */
596
        husart->MspInitCallback = HAL_USART_MspInit;                             /* Legacy weak MspInitCallback      */
596
        break;
597
        break;
597
 
598
 
598
      case HAL_USART_MSPDEINIT_CB_ID :
599
      case HAL_USART_MSPDEINIT_CB_ID :
599
        husart->MspDeInitCallback = HAL_USART_MspDeInit;                         /* Legacy weak MspDeInitCallback         */
600
        husart->MspDeInitCallback = HAL_USART_MspDeInit;                         /* Legacy weak MspDeInitCallback    */
600
        break;
601
        break;
601
 
602
 
602
      default :
603
      default :
603
        /* Update the error code */
604
        /* Update the error code */
604
        husart->ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
605
        husart->ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
Line 713... Line 714...
713
        (++) HAL_USART_AbortCpltCallback()
714
        (++) HAL_USART_AbortCpltCallback()
714
 
715
 
715
    (#) In Non-Blocking mode transfers, possible errors are split into 2 categories.
716
    (#) In Non-Blocking mode transfers, possible errors are split into 2 categories.
716
        Errors are handled as follows :
717
        Errors are handled as follows :
717
        (++) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is
718
        (++) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is
-
 
719
             to be evaluated by user : this concerns Frame Error,
718
             to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error in Interrupt mode reception .
720
             Parity Error or Noise Error in Interrupt mode reception .
719
             Received character is then retrieved and stored in Rx buffer, Error code is set to allow user to identify error type,
721
             Received character is then retrieved and stored in Rx buffer, Error code is set to allow user to identify
720
             and HAL_USART_ErrorCallback() user callback is executed. Transfer is kept ongoing on USART side.
722
             error type, and HAL_USART_ErrorCallback() user callback is executed.
-
 
723
             Transfer is kept ongoing on USART side.
721
             If user wants to abort it, Abort services should be called by user.
724
             If user wants to abort it, Abort services should be called by user.
722
        (++) Error is considered as Blocking : Transfer could not be completed properly and is aborted.
725
        (++) Error is considered as Blocking : Transfer could not be completed properly and is aborted.
723
             This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode.
726
             This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode.
-
 
727
             Error code is set to allow user to identify error type,
724
             Error code is set to allow user to identify error type, and HAL_USART_ErrorCallback() user callback is executed.
728
             and HAL_USART_ErrorCallback() user callback is executed.
725
 
729
 
726
@endverbatim
730
@endverbatim
727
  * @{
731
  * @{
728
  */
732
  */
729
 
733
 
730
/**
734
/**
731
  * @brief  Simplex send an amount of data in blocking mode.
735
  * @brief  Simplex send an amount of data in blocking mode.
732
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
736
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
733
  *         the sent data is handled as a set of u16. In this case, Size must indicate the number
737
  *         the sent data is handled as a set of u16. In this case, Size must indicate the number
734
  *         of u16 provided through pTxData.
738
  *         of u16 provided through pTxData.
735
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
739
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
736
  *         address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits)
740
  *         address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits)
737
  *         (as sent data will be handled using u16 pointer cast). Depending on compilation chain,
741
  *         (as sent data will be handled using u16 pointer cast). Depending on compilation chain,
738
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData.
742
  *         use of specific alignment compilation directives or pragmas might be required
-
 
743
  *         to ensure proper alignment for pTxData.
739
  * @param  husart USART handle.
744
  * @param  husart USART handle.
740
  * @param  pTxData Pointer to data buffer (u8 or u16 data elements).
745
  * @param  pTxData Pointer to data buffer (u8 or u16 data elements).
741
  * @param  Size Amount of data elements (u8 or u16) to be sent.
746
  * @param  Size Amount of data elements (u8 or u16) to be sent.
742
  * @param  Timeout Timeout duration.
747
  * @param  Timeout Timeout duration.
743
  * @retval HAL status
748
  * @retval HAL status
Line 770... Line 775...
770
    __HAL_LOCK(husart);
775
    __HAL_LOCK(husart);
771
 
776
 
772
    husart->ErrorCode = HAL_USART_ERROR_NONE;
777
    husart->ErrorCode = HAL_USART_ERROR_NONE;
773
    husart->State = HAL_USART_STATE_BUSY_TX;
778
    husart->State = HAL_USART_STATE_BUSY_TX;
774
 
779
 
775
    /* Init tickstart for timeout managment*/
780
    /* Init tickstart for timeout management */
776
    tickstart = HAL_GetTick();
781
    tickstart = HAL_GetTick();
777
 
782
 
778
    husart->TxXferSize = Size;
783
    husart->TxXferSize = Size;
779
    husart->TxXferCount = Size;
784
    husart->TxXferCount = Size;
780
 
785
 
Line 841... Line 846...
841
}
846
}
842
 
847
 
843
/**
848
/**
844
  * @brief Receive an amount of data in blocking mode.
849
  * @brief Receive an amount of data in blocking mode.
845
  * @note   To receive synchronous data, dummy data are simultaneously transmitted.
850
  * @note   To receive synchronous data, dummy data are simultaneously transmitted.
846
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
851
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
847
  *         the received data is handled as a set of u16. In this case, Size must indicate the number
852
  *         the received data is handled as a set of u16. In this case, Size must indicate the number
848
  *         of u16 available through pRxData.
853
  *         of u16 available through pRxData.
849
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
854
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
850
  *         address of user data buffer for storing data to be received, should be aligned on a half word frontier (16 bits)
855
  *         address of user data buffer for storing data to be received, should be aligned on a half word frontier (16 bits)
851
  *         (as received data will be handled using u16 pointer cast). Depending on compilation chain,
856
  *         (as received data will be handled using u16 pointer cast). Depending on compilation chain,
852
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pRxData.
857
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pRxData.
853
  * @param husart USART handle.
858
  * @param husart USART handle.
854
  * @param pRxData Pointer to data buffer (u8 or u16 data elements).
859
  * @param pRxData Pointer to data buffer (u8 or u16 data elements).
Line 885... Line 890...
885
    __HAL_LOCK(husart);
890
    __HAL_LOCK(husart);
886
 
891
 
887
    husart->ErrorCode = HAL_USART_ERROR_NONE;
892
    husart->ErrorCode = HAL_USART_ERROR_NONE;
888
    husart->State = HAL_USART_STATE_BUSY_RX;
893
    husart->State = HAL_USART_STATE_BUSY_RX;
889
 
894
 
890
    /* Init tickstart for timeout managment*/
895
    /* Init tickstart for timeout management */
891
    tickstart = HAL_GetTick();
896
    tickstart = HAL_GetTick();
892
 
897
 
893
    husart->RxXferSize = Size;
898
    husart->RxXferSize = Size;
894
    husart->RxXferCount = Size;
899
    husart->RxXferCount = Size;
895
 
900
 
Line 960... Line 965...
960
  }
965
  }
961
}
966
}
962
 
967
 
963
/**
968
/**
964
  * @brief Full-Duplex Send and Receive an amount of data in blocking mode.
969
  * @brief Full-Duplex Send and Receive an amount of data in blocking mode.
965
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
970
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
966
  *         the sent data and the received data are handled as sets of u16. In this case, Size must indicate the number
971
  *         the sent data and the received data are handled as sets of u16. In this case, Size must indicate the number
967
  *         of u16 available through pTxData and through pRxData.
972
  *         of u16 available through pTxData and through pRxData.
968
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
973
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
969
  *         address of user data buffers containing data to be sent/received, should be aligned on a half word frontier (16 bits)
974
  *         address of user data buffers containing data to be sent/received, should be aligned on a half word frontier (16 bits)
970
  *         (as sent/received data will be handled using u16 pointer cast). Depending on compilation chain,
975
  *         (as sent/received data will be handled using u16 pointer cast). Depending on compilation chain,
971
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData and pRxData.
976
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData and pRxData.
972
  * @param  husart USART handle.
977
  * @param  husart USART handle.
973
  * @param  pTxData pointer to TX data buffer (u8 or u16 data elements).
978
  * @param  pTxData pointer to TX data buffer (u8 or u16 data elements).
Line 1009... Line 1014...
1009
    __HAL_LOCK(husart);
1014
    __HAL_LOCK(husart);
1010
 
1015
 
1011
    husart->ErrorCode = HAL_USART_ERROR_NONE;
1016
    husart->ErrorCode = HAL_USART_ERROR_NONE;
1012
    husart->State = HAL_USART_STATE_BUSY_RX;
1017
    husart->State = HAL_USART_STATE_BUSY_RX;
1013
 
1018
 
1014
    /* Init tickstart for timeout managment*/
1019
    /* Init tickstart for timeout management */
1015
    tickstart = HAL_GetTick();
1020
    tickstart = HAL_GetTick();
1016
 
1021
 
1017
    husart->RxXferSize = Size;
1022
    husart->RxXferSize = Size;
1018
    husart->TxXferSize = Size;
1023
    husart->TxXferSize = Size;
1019
    husart->TxXferCount = Size;
1024
    husart->TxXferCount = Size;
Line 1124... Line 1129...
1124
  }
1129
  }
1125
}
1130
}
1126
 
1131
 
1127
/**
1132
/**
1128
  * @brief  Send an amount of data in interrupt mode.
1133
  * @brief  Send an amount of data in interrupt mode.
1129
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1134
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1130
  *         the sent data is handled as a set of u16. In this case, Size must indicate the number
1135
  *         the sent data is handled as a set of u16. In this case, Size must indicate the number
1131
  *         of u16 provided through pTxData.
1136
  *         of u16 provided through pTxData.
1132
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1137
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1133
  *         address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits)
1138
  *         address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits)
1134
  *         (as sent data will be handled using u16 pointer cast). Depending on compilation chain,
1139
  *         (as sent data will be handled using u16 pointer cast). Depending on compilation chain,
1135
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData.
1140
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData.
1136
  * @param  husart USART handle.
1141
  * @param  husart USART handle.
1137
  * @param  pTxData pointer to data buffer (u8 or u16 data elements).
1142
  * @param  pTxData pointer to data buffer (u8 or u16 data elements).
Line 1202... Line 1207...
1202
}
1207
}
1203
 
1208
 
1204
/**
1209
/**
1205
  * @brief Receive an amount of data in interrupt mode.
1210
  * @brief Receive an amount of data in interrupt mode.
1206
  * @note   To receive synchronous data, dummy data are simultaneously transmitted.
1211
  * @note   To receive synchronous data, dummy data are simultaneously transmitted.
1207
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1212
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1208
  *         the received data is handled as a set of u16. In this case, Size must indicate the number
1213
  *         the received data is handled as a set of u16. In this case, Size must indicate the number
1209
  *         of u16 available through pRxData.
1214
  *         of u16 available through pRxData.
1210
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1215
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1211
  *         address of user data buffer for storing data to be received, should be aligned on a half word frontier (16 bits)
1216
  *         address of user data buffer for storing data to be received, should be aligned on a half word frontier (16 bits)
1212
  *         (as received data will be handled using u16 pointer cast). Depending on compilation chain,
1217
  *         (as received data will be handled using u16 pointer cast). Depending on compilation chain,
1213
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pRxData.
1218
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pRxData.
1214
  * @param  husart USART handle.
1219
  * @param  husart USART handle.
1215
  * @param  pRxData pointer to data buffer (u8 or u16 data elements).
1220
  * @param  pRxData pointer to data buffer (u8 or u16 data elements).
Line 1287... Line 1292...
1287
  }
1292
  }
1288
}
1293
}
1289
 
1294
 
1290
/**
1295
/**
1291
  * @brief Full-Duplex Send and Receive an amount of data in interrupt mode.
1296
  * @brief Full-Duplex Send and Receive an amount of data in interrupt mode.
1292
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1297
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1293
  *         the sent data and the received data are handled as sets of u16. In this case, Size must indicate the number
1298
  *         the sent data and the received data are handled as sets of u16. In this case, Size must indicate the number
1294
  *         of u16 available through pTxData and through pRxData.
1299
  *         of u16 available through pTxData and through pRxData.
1295
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1300
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1296
  *         address of user data buffers containing data to be sent/received, should be aligned on a half word frontier (16 bits)
1301
  *         address of user data buffers containing data to be sent/received, should be aligned on a half word frontier (16 bits)
1297
  *         (as sent/received data will be handled using u16 pointer cast). Depending on compilation chain,
1302
  *         (as sent/received data will be handled using u16 pointer cast). Depending on compilation chain,
1298
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData and pRxData.
1303
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData and pRxData.
1299
  * @param  husart USART handle.
1304
  * @param  husart USART handle.
1300
  * @param  pTxData pointer to TX data buffer (u8 or u16 data elements).
1305
  * @param  pTxData pointer to TX data buffer (u8 or u16 data elements).
Line 1373... Line 1378...
1373
  }
1378
  }
1374
}
1379
}
1375
 
1380
 
1376
/**
1381
/**
1377
  * @brief Send an amount of data in DMA mode.
1382
  * @brief Send an amount of data in DMA mode.
1378
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1383
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1379
  *         the sent data is handled as a set of u16. In this case, Size must indicate the number
1384
  *         the sent data is handled as a set of u16. In this case, Size must indicate the number
1380
  *         of u16 provided through pTxData.
1385
  *         of u16 provided through pTxData.
1381
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1386
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1382
  *         address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits)
1387
  *         address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits)
1383
  *         (as sent data will be handled by DMA from halfword frontier). Depending on compilation chain,
1388
  *         (as sent data will be handled by DMA from halfword frontier). Depending on compilation chain,
1384
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData.
1389
  *         use of specific alignment compilation directives or pragmas might be required
-
 
1390
  *         to ensure proper alignment for pTxData.
1385
  * @param  husart USART handle.
1391
  * @param  husart USART handle.
1386
  * @param  pTxData pointer to data buffer (u8 or u16 data elements).
1392
  * @param  pTxData pointer to data buffer (u8 or u16 data elements).
1387
  * @param  Size amount of data elements (u8 or u16) to be sent.
1393
  * @param  Size amount of data elements (u8 or u16) to be sent.
1388
  * @retval HAL status
1394
  * @retval HAL status
1389
  */
1395
  */
Line 1473... Line 1479...
1473
/**
1479
/**
1474
  * @brief Receive an amount of data in DMA mode.
1480
  * @brief Receive an amount of data in DMA mode.
1475
  * @note   When the USART parity is enabled (PCE = 1), the received data contain
1481
  * @note   When the USART parity is enabled (PCE = 1), the received data contain
1476
  *         the parity bit (MSB position).
1482
  *         the parity bit (MSB position).
1477
  * @note   The USART DMA transmit channel must be configured in order to generate the clock for the slave.
1483
  * @note   The USART DMA transmit channel must be configured in order to generate the clock for the slave.
1478
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1484
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1479
  *         the received data is handled as a set of u16. In this case, Size must indicate the number
1485
  *         the received data is handled as a set of u16. In this case, Size must indicate the number
1480
  *         of u16 available through pRxData.
1486
  *         of u16 available through pRxData.
1481
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1487
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1482
  *         address of user data buffer for storing data to be received, should be aligned on a half word frontier (16 bits)
1488
  *         address of user data buffer for storing data to be received, should be aligned on
1483
  *         (as received data will be handled by DMA from halfword frontier). Depending on compilation chain,
1489
  *         a half word frontier (16 bits) (as received data will be handled by DMA from halfword frontier).
-
 
1490
  *         Depending on compilation chain, use of specific alignment compilation directives or pragmas
1484
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pRxData.
1491
  *         might be required to ensure proper alignment for pRxData.
1485
  * @param  husart USART handle.
1492
  * @param  husart USART handle.
1486
  * @param  pRxData pointer to data buffer (u8 or u16 data elements).
1493
  * @param  pRxData pointer to data buffer (u8 or u16 data elements).
1487
  * @param  Size amount of data elements (u8 or u16) to be received.
1494
  * @param  Size amount of data elements (u8 or u16) to be received.
1488
  * @retval HAL status
1495
  * @retval HAL status
1489
  */
1496
  */
Line 1602... Line 1609...
1602
}
1609
}
1603
 
1610
 
1604
/**
1611
/**
1605
  * @brief Full-Duplex Transmit Receive an amount of data in non-blocking mode.
1612
  * @brief Full-Duplex Transmit Receive an amount of data in non-blocking mode.
1606
  * @note   When the USART parity is enabled (PCE = 1) the data received contain the parity bit.
1613
  * @note   When the USART parity is enabled (PCE = 1) the data received contain the parity bit.
1607
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1614
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1608
  *         the sent data and the received data are handled as sets of u16. In this case, Size must indicate the number
1615
  *         the sent data and the received data are handled as sets of u16. In this case, Size must indicate the number
1609
  *         of u16 available through pTxData and through pRxData.
1616
  *         of u16 available through pTxData and through pRxData.
1610
  * @note   When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1617
  * @note   When USART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
1611
  *         address of user data buffers containing data to be sent/received, should be aligned on a half word frontier (16 bits)
1618
  *         address of user data buffers containing data to be sent/received, should be aligned on a half word frontier
1612
  *         (as sent/received data will be handled by DMA from halfword frontier). Depending on compilation chain,
1619
  *         (16 bits) (as sent/received data will be handled by DMA from halfword frontier). Depending on compilation
1613
  *         use of specific alignment compilation directives or pragmas might be required to ensure proper alignment for pTxData and pRxData.
1620
  *         chain, use of specific alignment compilation directives or pragmas might be required
-
 
1621
  *         to ensure proper alignment for pTxData and pRxData.
1614
  * @param  husart USART handle.
1622
  * @param  husart USART handle.
1615
  * @param  pTxData pointer to TX data buffer (u8 or u16 data elements).
1623
  * @param  pTxData pointer to TX data buffer (u8 or u16 data elements).
1616
  * @param  pRxData pointer to RX data buffer (u8 or u16 data elements).
1624
  * @param  pRxData pointer to RX data buffer (u8 or u16 data elements).
1617
  * @param  Size amount of data elements (u8 or u16) to be received/sent.
1625
  * @param  Size amount of data elements (u8 or u16) to be received/sent.
1618
  * @retval HAL status
1626
  * @retval HAL status
Line 1808... Line 1816...
1808
           (state == HAL_USART_STATE_BUSY_TX_RX))
1816
           (state == HAL_USART_STATE_BUSY_TX_RX))
1809
  {
1817
  {
1810
    /* Clear the Overrun flag before resuming the Rx transfer*/
1818
    /* Clear the Overrun flag before resuming the Rx transfer*/
1811
    __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF);
1819
    __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF);
1812
 
1820
 
1813
    /* Reenable PE and ERR (Frame error, noise error, overrun error) interrupts */
1821
    /* Re-enable PE and ERR (Frame error, noise error, overrun error) interrupts */
1814
    SET_BIT(husart->Instance->CR1, USART_CR1_PEIE);
1822
    SET_BIT(husart->Instance->CR1, USART_CR1_PEIE);
1815
    SET_BIT(husart->Instance->CR3, USART_CR3_EIE);
1823
    SET_BIT(husart->Instance->CR3, USART_CR3_EIE);
1816
 
1824
 
1817
    /* Enable the USART DMA Rx request  before the DMA Tx request */
1825
    /* Enable the USART DMA Rx request  before the DMA Tx request */
1818
    SET_BIT(husart->Instance->CR3, USART_CR3_DMAR);
1826
    SET_BIT(husart->Instance->CR3, USART_CR3_DMAR);
Line 2117... Line 2125...
2117
 
2125
 
2118
  uint32_t errorflags;
2126
  uint32_t errorflags;
2119
  uint32_t errorcode;
2127
  uint32_t errorcode;
2120
 
2128
 
2121
  /* If no error occurs */
2129
  /* If no error occurs */
2122
  errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE));
2130
  errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
2123
  if (errorflags == 0U)
2131
  if (errorflags == 0U)
2124
  {
2132
  {
2125
    /* USART in mode Receiver ---------------------------------------------------*/
2133
    /* USART in mode Receiver ---------------------------------------------------*/
2126
    if (((isrflags & USART_ISR_RXNE) != 0U)
2134
    if (((isrflags & USART_ISR_RXNE) != 0U)
2127
        && ((cr1its & USART_CR1_RXNEIE) != 0U))
2135
        && ((cr1its & USART_CR1_RXNEIE) != 0U))
Line 2171... Line 2179...
2171
      __HAL_USART_CLEAR_IT(husart, USART_CLEAR_OREF);
2179
      __HAL_USART_CLEAR_IT(husart, USART_CLEAR_OREF);
2172
 
2180
 
2173
      husart->ErrorCode |= HAL_USART_ERROR_ORE;
2181
      husart->ErrorCode |= HAL_USART_ERROR_ORE;
2174
    }
2182
    }
2175
 
2183
 
-
 
2184
    /* USART Receiver Timeout interrupt occurred ---------------------------------*/
-
 
2185
    if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
-
 
2186
    {
-
 
2187
      __HAL_USART_CLEAR_IT(husart, USART_CLEAR_RTOF);
-
 
2188
 
-
 
2189
      husart->ErrorCode |= HAL_USART_ERROR_RTO;
-
 
2190
    }
-
 
2191
 
2176
 
2192
 
2177
    /* Call USART Error Call back function if need be --------------------------*/
2193
    /* Call USART Error Call back function if need be --------------------------*/
2178
    if (husart->ErrorCode != HAL_USART_ERROR_NONE)
2194
    if (husart->ErrorCode != HAL_USART_ERROR_NONE)
2179
    {
2195
    {
2180
      /* USART in mode Receiver ---------------------------------------------------*/
2196
      /* USART in mode Receiver ---------------------------------------------------*/
Line 2911... Line 2927...
2911
  uint32_t tickstart;
2927
  uint32_t tickstart;
2912
 
2928
 
2913
  /* Initialize the USART ErrorCode */
2929
  /* Initialize the USART ErrorCode */
2914
  husart->ErrorCode = HAL_USART_ERROR_NONE;
2930
  husart->ErrorCode = HAL_USART_ERROR_NONE;
2915
 
2931
 
2916
  /* Init tickstart for timeout managment*/
2932
  /* Init tickstart for timeout management */
2917
  tickstart = HAL_GetTick();
2933
  tickstart = HAL_GetTick();
2918
 
2934
 
2919
  /* Check if the Transmitter is enabled */
2935
  /* Check if the Transmitter is enabled */
2920
  if ((husart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
2936
  if ((husart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
2921
  {
2937
  {