SI4702 驱动 基于STC单片机

本文介绍了如何基于STC8单片机驱动Si4702模块,包括模块的连接注意事项、复位时序、2线模式选择,以及提供了相关代码示例。
摘要由CSDN通过智能技术生成

基于STC8单片机的Si4702驱动

简介

某宝随便买的,以为开发起来会很顺利没想到还是掉坑了,主要是因为没有详细阅读其数据手册导致。
模块就是
没有示例代码也只有这么一张图,通过比对数据手册猜测这是一个2线通信的模块,而9脚的置位使能端其实就是芯片RST#引脚。
在这里插入图片描述
按上图的引脚定义连接到单片机就行了,注意每个引脚都需要串一个电阻,作用有两个:

第一下面的STC评估板在断电重启时不会断开上层扩展板电源,这导致有可能发生IO间的电流灌入导致无法成功烧录。STC烧录时需要冷重启,且所有IO不能灌入太大的电流,否则将失败。

第二个作用主要是因为模块是3.3V供电,而STC这边是5V,数据线电平不一致我又懒得上电平转换电路,所以串连1K电阻限制一下电流。
在这里插入图片描述

复位时序及2线模式选择

模式选择直接看表9就可以了,因为是模块那些IO已经给设置好了。
千万不要被这里SEN#带坑里,这里不是模块的置位使能端
在这里插入图片描述
然后这附近的说明要仔细看
在这里插入图片描述

复位时序总结下来就是:
SCL拉高
SDA拉高
RST拉低
延时等一下
RST拉高
SDA拉高
接着启用振荡器器,07H寄存器里的XOSCEN位使能,重点bit13:0=0x0100,这里的说明一定要仔细看
把寄存器数据更新一下等待振荡器稳定,经过我的测试大约需要500ms,建议不低于此时长。
启动后进行上电操作,即:
02H[bit 0]ENABLE=1
07H[bits13:0]=0x3C04
其他设置看代码吧。

/**
 * @brief 初始化
 * 
 */
void si4702_init() {
   
    si4702_delay_100ms();
    SI_RST_PIN_INIT;
    soft_i2c_init();

    SOFT_I2C_SCL = 1;
    SOFT_I2C_SDA = 0;
    SI_RST = 0;
    si4702_delay_200us();

    SI_RST = 1;
    si4702_delay_200us();

    SOFT_I2C_SDA = 1;
    si4702_delay_200us();

    //启用晶振
    siRegData[SI_REG_07H] = SI_XOSCEN | SI_07H_13_0_EN0; //当0x02H bit0 ENABLE = 0 时 bits 13:0 要设置为 0x0100
    si4702_update();
    //等待振荡器稳定
    si4702_delay_100ms();
    si4702_delay_100ms();
    si4702_delay_100ms();
    si4702_delay_100ms();
    si4702_delay_100ms();

    //初始化配置
    siRegData[SI_REG_02H] |= SI_DSMUTE | SI_DMUTE | SI_ENABLE; //禁用软静音,禁用静音,启用电源; 软静音可减弱没有信号时的白噪声
    siRegData[SI_REG_03H] = 0x0000;
    siRegData[SI_REG_04H] |= SI_DE;                      // 50us预加重 与增益有关,预加重电路
    siRegData[SI_REG_05H] |= SI_BAND | SI_SPACE | 8;   // 波段 信道间隔 音量 默认为8 范围0-15
    siRegData[SI_REG_07H] = SI_XOSCEN | SI_07H_13_0_EN1; //当0x02H bit0 ENABLE = 0 时 bits 13:0 要设置为 0x3C04
    si4702_update();
    //等待上电
    si4702_delay_100ms();
    si4702_delay_100ms();

}

完整的代码

main.c

/**
 * @file main.c
 * @author WangBo
 * @brief STC8G2K64S2-48PIN @ 11.0592Mhz 使用Keil 5编译
 * @version 0.1
 * @date 2022-05-21
 *
 * @copyright Copyright (c) 2022
 *
 * @note 随便写的测试代码
 *
 */

#include "STC8G.H"
#include "INTRINS.H"
#include "io.h"
#include "uart.h"

#include "si4702.h"

unsigned char uartBuf[16];
unsigned char uartBufIdx = 0;
bit uartRecvFlag = 0;

unsigned char vol = 8;
unsigned int freq = 917;


void main() {
   
    si4702_init();
    si4702_set_vol(vol);
    si4702_set_freq(freq);
    
    while (1) {
   
    }
}

si4702.h

#ifndef __SI4702_H__
#define __SI4702_H__

#include "STC8G.H"
#include "INTRINS.H"
#include "software_i2c.h"

#define SI_ADDR_WRITE 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值