|
STM32G474xx HAL 用户手册
|
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