- 积分
- 1097
- 在线时间
- 689 小时
- 最后登录
- 2026-7-28
- 阅读权限
- 70
- 精华
- 0
 
- UID
- 971156
- 帖子
- 950
- 精华
- 0
- 经验
- 1097 点
- 金钱
- 904 ¥
- 注册时间
- 2022-6-18
|
本帖最后由 HuBin168 于 2026-3-4 15:37 编辑
这是我写的基于嵌入式(STM32 )的ES9039Q2M 驱动代码
/* ES9039Q2M驱动头文件 */
#ifndef ES9039Q2M_H
#define ES9039Q2M_H
#include "stm32f4xx_hal.h"
#define ES9039Q2M_ADDR 0x90 // ES9039Q2M的I2C地址
// 函数声明
HAL_StatusTypeDef ES9039Q2M_WriteRegister(uint8_t reg_addr, uint8_t data);
HAL_StatusTypeDef ES9039Q2M_ReadRegister(uint8_t reg_addr, uint8_t *data);
void ES9039Q2M_Init(void);
void ES9039Q2M_DeInit(void);
#endif
/* ES9039Q2M驱动源文件 */
#include "es9039q2m.h"
I2C_HandleTypeDef *hi2c_es9039q2m; // I2C句柄
// 初始化ES9039Q2M
void ES9039Q2M_Init(I2C_HandleTypeDef *hi2c)
{
hi2c_es9039q2m = hi2c; // 保存I2C句柄
// 等待芯片稳定(建议等待100ms以上)
HAL_Delay(100);
// 复位芯片(如果有复位引脚)
// HAL_GPIO_WritePin(ES9039Q2M_RESET_GPIO_Port, ES9039Q2M_RESET_Pin, GPIO_PIN_RESET);
// HAL_Delay(10);
// HAL_GPIO_WritePin(ES9039Q2M_RESET_GPIO_Port, ES9039Q2M_RESET_Pin, GPIO_PIN_SET);
// HAL_Delay(100);
// 配置基本寄存器
ES9039Q2M_WriteRegister(0x00, 0x42); // 系统配置:S/PDIF输入
ES9039Q2M_WriteRegister(0x01, 0xBF); // 控制寄存器1:异步模式,启用S/PDIF、DoP、DSD
ES9039Q2M_WriteRegister(0x42, 0x08); // GPIO配置:输入模式
ES9039Q2M_WriteRegister(0x0C, 0x0F); // ASRC/DPLL:高带宽
ES9039Q2M_WriteRegister(0x0E, 0x0A); // 软启动:正常启动,时间10
// 配置其他必要的寄存器
ES9039Q2M_WriteRegister(0x59, 0x64); // 寄存器89的配置
// 等待初始化完成
HAL_Delay(100);
}
// 向ES9039Q2M写入寄存器
HAL_StatusTypeDef ES9039Q2M_WriteRegister(uint8_t reg_addr, uint8_t data)
{
uint8_t tx_data[2];
tx_data[0] = reg_addr;
tx_data[1] = data;
return HAL_I2C_Master_Transmit(hi2c_es9039q2m, ES9039Q2M_ADDR << 1, tx_data, 2, 100);
}
// 从ES9039Q2M读取寄存器
HAL_StatusTypeDef ES9039Q2M_ReadRegister(uint8_t reg_addr, uint8_t *data)
{
return HAL_I2C_Mem_Read(hi2c_es9039q2m, ES9039Q2M_ADDR << 1, reg_addr,
I2C_MEMADD_SIZE_8BIT, data, 1, 100);
}
// 反初始化ES9039Q2M
void ES9039Q2M_DeInit(void)
{
// 关闭芯片(如果支持)
ES9039Q2M_WriteRegister(0x01, 0x00); // 关闭所有功能
}
|
|