STM32G474xx HAL 用户手册
stm32g4xx_hal_sai.h
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_hal_sai.h
00004   * @author  MCD 应用团队
00005   * @brief   SAI HAL 模块的头文件。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * 版权所有 (c) 2019 STMicroelectronics。
00010   * 保留所有权利。
00011   *
00012   * 本软件根据可在 LICENSE 文件中找到的条款进行许可
00013   * 位于本软件组件的根目录中。
00014   * 如果本软件没有附带 LICENSE 文件,则按“AS-IS”提供。
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* 定义防止递归包含 -------------------------------------*/
00020 #ifndef STM32G4xx_HAL_SAI_H
00021 #define STM32G4xx_HAL_SAI_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* 包含 ------------------------------------------------------------------*/
00028 #include "stm32g4xx_hal_def.h"
00029 
00030 /** @addtogroup STM32G4xx_HAL_Driver
00031   * @{
00032   */
00033 
00034 #if defined(SAI1)
00035 
00036 /** @addtogroup SAI
00037   * @{
00038   */
00039 
00040 /* 导出的类型 ------------------------------------------------------------*/
00041 /** @defgroup SAI_Exported_Types SAI 导出的类型
00042   * @{
00043   */
00044 
00045 /**
00046   * @brief  HAL 状态结构定义
00047   */
00048 typedef enum
00049 {
00050   HAL_SAI_STATE_RESET   = 0x00U, /*!< SAI 尚未初始化或已禁用  */
00051   HAL_SAI_STATE_READY   = 0x01U, /*!< SAI 已初始化并准备好使用    */
00052   HAL_SAI_STATE_BUSY    = 0x02U, /*!< SAI 内部处理正在进行中      */
00053   HAL_SAI_STATE_BUSY_TX = 0x12U, /*!< 数据传输处理正在进行中 */
00054   HAL_SAI_STATE_BUSY_RX = 0x22U, /*!< 数据接收处理正在进行中    */
00055 } HAL_SAI_StateTypeDef;
00056 
00057 /**
00058   * @brief  SAI 回调函数原型
00059   */
00060 typedef void (*SAIcallback)(void);
00061 
00062 /** @defgroup SAI_PDM_Structure_definition SAI PDM 结构定义
00063   * @brief  SAI PDM 初始化结构定义
00064   * @{
00065   */
00066 typedef struct
00067 {
00068   FunctionalState  Activation;  /*!< 启用/禁用 PDM 接口 */
00069   uint32_t         MicPairsNbr; /*!< 指定使用的麦克风对数。
00070                                      此参数必须是一个介于 Min_Data = 1 和 Max_Data = 3 之间的数字。 */
00071   uint32_t         ClockEnable; /*!< 指定必须启用哪个时钟。
00072                                      此参数可以是 @ref SAI_PDM_ClockEnable 中值的组合 */
00073 } SAI_PdmInitTypeDef;
00074 /**
00075   * @}
00076   */
00077 
00078 /** @defgroup SAI_Init_Structure_definition SAI 初始化结构定义
00079   * @brief  SAI 初始化结构定义
00080   * @{
00081   */
00082 typedef struct
00083 {
00084   uint32_t AudioMode;           /*!< 指定 SAI 块的音频模式。
00085                                      此参数可以是 @ref SAI_Block_Mode 中的一个值 */
00086 
00087   uint32_t Synchro;             /*!< 指定 SAI 块的同步
00088                                      此参数可以是 @ref SAI_Block_Synchronization 中的一个值 */
00089 
00090   uint32_t SynchroExt;          /*!< 指定 SAI 外部输出同步,此设置对于 BlockA 和 BlockB 是通用的
00091                                      此参数可以是 @ref SAI_Block_SyncExt 中的一个值
00092                                      @注意 如果使用同一 SAI 的两个音频块,此参数必须
00093                                            为每个音频块设置为相同的值 */
00094 
00095 
00096   uint32_t MckOutput;           /*!< 指定是否生成主时钟输出。
00097                                      此参数可以是 @ref SAI_Block_MckOutput 中的一个值 */
00098 
00099   uint32_t OutputDrive;         /*!< 指定 SAI 块输出何时被驱动。
00100                                      此参数可以是 @ref SAI_Block_Output_Drive 中的一个值
00101                                      @注意 该值必须在启用音频块之前设置,但应在音频块配置之后设置。 */
00102 
00103 
00104   uint32_t NoDivider;           /*!< 指定主时钟是否被分频。
00105                                      此参数可以是 @ref SAI_Block_NoDivider 中的一个值
00106                                      @注意 如果 SAI_xCR1 寄存器中的 NODIV 位被清除,帧长度
00107                                            应对齐到等于 2 的幂的数字,范围从 8 到 256。
00108                                            如果 SAI_xCR1 寄存器中的 NODIV 位被设置,帧长度可以
00109                                            取 8 到 256 中的任何值。 */
00110 
00111   uint32_t FIFOThreshold;       /*!< 指定 SAI 块的 FIFO 阈值。
00112                                      此参数可以是 @ref SAI_Block_Fifo_Threshold 中的一个值 */
00113 
00114   uint32_t AudioFrequency;      /*!< 指定音频频率采样。
00115                                      此参数可以是 @ref SAI_Audio_Frequency 中的一个值 */
00116 
00117   uint32_t Mckdiv;              /*!< 指定主时钟分频器。
00118                                      此参数必须是一个介于 Min_Data = 0 和 Max_Data = 63 之间的数字。
00119                                      @注意 仅当 AudioFrequency 设置为
00120                                            SAI_AUDIO_FREQUENCY_MCKDIV 时使用此参数,否则由内部计算。 */
00121 
00122   uint32_t MckOverSampling;     /*!< 指定主时钟过采样。
00123                                      此参数可以是 @ref SAI_Block_Mck_OverSampling 中的一个值 */
00124 
00125   uint32_t MonoStereoMode;      /*!< 指定选择单声道或立体声模式。
00126                                      此参数可以是 @ref SAI_Mono_Stereo_Mode 中的一个值 */
00127 
00128   uint32_t CompandingMode;      /*!< 指定压扩模式类型。
00129                                      此参数可以是 @ref SAI_Block_Companding_Mode 中的一个值 */
00130 
00131   uint32_t TriState;            /*!< 指定压扩模式类型。
00132                                      此参数可以是 @ref SAI_TRIState_Management 中的一个值 */
00133 
00134   SAI_PdmInitTypeDef PdmInit;   /*!< 指定 PDM 配置。 */
00135 
00136   /* 如果您使用高级初始化函数 HAL_SAI_InitProtocol,这部分结构将自动填充 */
00137 
00138 
00139   uint32_t Protocol;        /*!< 指定 SAI 块协议。
00140                                  此参数可以是 @ref SAI_Block_Protocol 中的一个值 */
00141 
00142   uint32_t DataSize;        /*!< 指定 SAI 块的数据大小。
00143                                  此参数可以是 @ref SAI_Block_Data_Size 中的一个值 */
00144 
00145   uint32_t FirstBit;        /*!< 指定数据传输是从 MSB 还是 LSB 位开始。
00146                                  此参数可以是 @ref SAI_Block_MSB_LSB_transmission 中的一个值 */
00147 
00148   uint32_t ClockStrobing;   /*!< 指定 SAI 块时钟选通边沿灵敏度。
00149                                  此参数可以是 @ref SAI_Block_Clock_Strobing 中的一个值 */
00150 } SAI_InitTypeDef;
00151 /**
00152   * @}
00153   */
00154 
00155 /** @defgroup SAI_Frame_Structure_definition SAI 帧结构定义
00156   * @brief  SAI 帧初始化结构定义
00157   * @note   对于 SPDIF 和 AC97 协议,不使用这些参数(由硬件设置)。
00158   * @{
00159   */
00160 typedef struct
00161 {
00162 
00163   uint32_t FrameLength;        /*!< 指定帧长度,即每个音频帧的 SCK 时钟数。
00164                                     此参数必须是一个介于 Min_Data = 8 和 Max_Data = 256 之间的数字。
00165                                     @注意 如果主时钟 MCLK_x 引脚被声明为输出,帧长度
00166                                           应对齐到等于 2 的幂的数字,以便在音频帧中保持
00167                                           每个位时钟具有整数个 MCLK 脉冲。 */
00168 
00169   uint32_t ActiveFrameLength;  /*!< 指定帧同步有效电平长度。
00170                                     此参数指定在音频帧中,FS 信号有效电平的位时钟 (SCK + 1) 长度。
00171                                     此参数必须是一个介于 Min_Data = 1 和 Max_Data = 128 之间的数字 */
00172 
00173 
00174   uint32_t FSDefinition;       /*!< 指定帧同步定义。
00175                                     此参数可以是 @ref SAI_Block_FS_Definition 中的一个值 */
00176