STM32F103学习笔记(2)——收音机模块TEA5767使用

原文地址::https://leung-manwah.blog.csdn.net/article/details/106926921?spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-12-106926921-blog-8882884.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-12-106926921-blog-8882884.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=13

相关文章

1、STM32驱动TEA5767收音机模块 ----STM32驱动TEA5767收音机模块 - 邓小俊 - 博客园

一、简介


TEA5767是由菲利普公司推出的一款低功耗立体声收音机接收器芯片。频率范围从76-108MHz自动数字调谐。高灵敏度,高稳定性,低噪音,收音模块。一片低功耗电调谐调频立体声收音机电路,其内部集成了中频选频和解调网络,可以做到完全免调。

电源 5V
I2C 总线通讯
可以使用软件进行静音和消除噪音
二、硬件连接
功能口    引脚
SCL    PB.6
SDA    PB.5
三、添加I2C驱动
查看 STM32F103学习笔记(1)——FreeRTOS下模拟I2C

四、移植文件
注意:以下出现缺失common.h文件错误,去除即可。uint8改为uint8_t或unsigned char或自己宏定义
链接:https://pan.baidu.com/s/1KlliOYSGgdlYcb5J52Twrw 提取码:xp0z
将 board_i2c.c、board_i2c.h、board_tea5767.c 、 board_tea5767.h 四个文件加入到工程

4.1 board_tea5767.c
/*********************************************************************
 * INCLUDES
 */
#include "stdlib.h"
#include "stm32f10x.h"

#include "board_i2c.h" 
#include "board_tea5767.h" 
#include "common.h"

/*********************************************************************
 * GLOBAL VARIABLES
 */
unsigned long g_frequency = TEA5767_MIN_KHZ;

/*********************************************************************
 * LOCAL VARIABLES
 */                                     
static uint8 s_radioWriteData[5] = {0x31,0xA0,0x20,0x11,0x00};          // 要写入TEA5767的数据,默认存台的PLL,104.3MHz
static uint8 s_radioReadData[5] = {0};                                  // TEA5767读出的状态
static uint32 s_pll = 0;

/*********************************************************************
 * PUBLIC FUNCTIONS
 */
/**
 @brief 向TEA5767写入5个字节数据
 @param 无
 @return 无
*/
void TEA5767_Write(void)
{        
    uint8 i;
    
    IIC_Start();                                                        // 发送起始信号
    IIC_SendByte(TEA5767_ADDR_W);                                       // TEA5767写地址
    IIC_WaitAck();                                                      // 等待应答
    for(i = 0; i < 5; i++)
    {
        IIC_SendByte(s_radioWriteData[i]);                              // 连续写入5个字节数据
        IIC_Ack();                                                      // 发送应答
    }
    IIC_Stop();                                                         // 发送停止信号   
}

/**
 @brief 读TEA5767状态
 @param 无
 @return 无
*/
void TEA5767_Read(void)
{
    uint8 i;
    uint8 tempLow;
    uint8 tempHigh;
    s_pll = 0;
    
    IIC_Start();
    IIC_SendByte(TEA5767_ADDR_R);                                       // TEA5767读地址
    IIC_WaitAck();
    for(i = 0; i < 5; i++)                                              // 读取5个字节数据
    {
        s_radioReadData[i] = IIC_ReadByte();                            // 读取数据后,发送应答
    }
    IIC_Stop();
    tempLow = s_radioReadData[1];                                       // 得到s_pll低8位 
    tempHigh = s_radioReadData[0];                                      // 得到s_pll高6位
    tempHigh &= 0x3f;
    s_pll = tempHigh * 256 + tempLow;                                   // PLL值 
}

/**
 @brief 由频率计算PLL
 @param 无
 @return 无
*/
void TEA5767_GetPLL(void)
{
    uint8 hlsi;
    hlsi = s_radioWriteData[2] & 0x10;                                  // HLSI位
    if(hlsi)
    {
        s_pll = (uint32)((float)((g_frequency+225)*4)/(float)32.768);   // 频率单位:k
    }
    else
    {
        s_pll = (uint32)((float)((g_frequency-225)*4)/(float)32.768);   // 频率单位:k
    }
}

/**
 @brief 设置频率
 @param frequency -[in] 频率,单位:KHz
 @return 无
*/
void TEA5767_SetFrequency(uint32 frequency)
{
    g_frequency = frequency;
    TEA5767_GetPLL();
    s_radioWriteData[0] = s_pll / 256;
    s_radioWriteData[1] = s_pll % 256;
    s_radioWriteData[2] = 0x20;
    s_radioWriteData[3] = 0x11;
    s_radioWriteData[4] = 0x00;
    
    TEA5767_Write();
}

/**
 @brief 由PLL计算频率
 @param 无
 @return 无
*/
uint32 TEA5767_GetFrequency(void)
{
    uint8 hlsi;
    uint32 pll = 0;
    pll = s_pll;
    hlsi = s_radioWriteData[2] & 0x10;
    if(hlsi)
    {
        g_frequency = (unsigned long)((float)(pll)*(float)8.192-225);   // 频率单位:KHz
    }
    else
    {
        g_frequency = (unsigned long)((float)(pll)*(float)8.192+225);   // 频率单位:KHz
    }
    
    return g_frequency;
}

/**
 @brief 手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD
 @param mode -[in] 搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
 @return 无
*/
void TEA5767_Search(uint8 mode)
{
    TEA5767_Read();                                                     // 读取当前频率值 
    if(mode)                                                            // 向上搜索
    {
        g_frequency += 100;
        if(g_frequency > TEA5767_MAX_KHZ)                               // 频率达到最大值
        {
            g_frequency = TEA5767_MIN_KHZ;
        }
    }
    else
    {
        g_frequency -= 100;
        if(g_frequency < TEA5767_MIN_KHZ)
        {
            g_frequency = TEA5767_MAX_KHZ;
        }
    }          
    TEA5767_GetPLL();                                                   // 计算PLL值
    s_radioWriteData[0] = s_pll / 256;
    s_radioWriteData[1] = s_pll % 256;
    s_radioWriteData[2] = 0x20;
    s_radioWriteData[3] = 0x11;
    s_radioWriteData[4] = 0x00;
    TEA5767_Write();
    TEA5767_Read();
    if(s_radioReadData[0] & 0x80)                                        // 搜台成功,RF=1,可保存其频率值待用
    {
        printf(" frequency=%d\n", (int)g_frequency);
    }    
}

/**
 @brief 自动搜索电台
 @param mode -[in] 搜索方式,mode=1,频率增加搜台,频率值+0.1MHz;mode=0,频率减小搜台
 @return 无
*/
void TEA5767_AutoSearch(uint8 mode)
{
    uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台
    uint8 radioIf = 0;                                                    // 中频计数结果
    uint8 radioLev = 0;                                                    // 信号电平ADC输出
    
    // 直到搜台成功,RF=1,0x31<IF<0x3E
    while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E)))
    {
        if(mode)                                                        // 频率增加搜台
        {
            s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
            g_frequency += 100;
            if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值
            {
                g_frequency = TEA5767_MIN_KHZ;
            }
        }
        else                                                            // 频率减小搜台
        {
            s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0
            g_frequency -= 100;
            if(g_frequency < TEA5767_MIN_KHZ)
            {
                g_frequency = TEA5767_MAX_KHZ;
            }            
        }
        TEA5767_GetPLL();                                                // 转换为PLL值
        s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=1
        s_radioWriteData[1] = s_pll % 256;
        s_radioWriteData[3] = 0x11;
        s_radioWriteData[4] = 0x00;
        TEA5767_Write();                                                // 写入5个字节数据
        TEA5767_Read();                                                    // 读取当前频率值 
        radioRf = s_radioReadData[0] & 0x80;
        radioIf = s_radioReadData[2] & 0x7F;
        radioLev = s_radioReadData[3] >> 4;
        printf(" r=%02x\n", radioRf);
        printf(" i=%02x\n", radioIf);
        printf(" l=%d\n", radioLev);
        printf(" f=%d\n", (int)g_frequency);
    }
    TEA5767_GetPLL();                                                   // 转换为PLL值
    s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=0
    s_radioWriteData[1] = s_pll % 256;
    s_radioWriteData[3] = 0x11;
    s_radioWriteData[4] = 0x00;
    TEA5767_Write();                                                    // 写入5个字节数据
    TEA5767_Read();                                                        // 读取当前频率值 
    printf(" frequency=%d\n", (int)g_frequency);
}

/**
 @brief 静音
 @param mode -[in] 静音方式,mode=1,静音;mode=0,非静音
 @return 无
*/
void TEA5767_Mute(uint8 mode)
{        
    if(mode == TEA5767_MUTE_ON)
    {
        s_radioWriteData[0] = s_radioWriteData[0] | 0x80;
    }
    else
    {
        s_radioWriteData[0] = s_radioWriteData[0] & 0x7F;
    }
    
    TEA5767_Write();
}

/****************************************************END OF FILE****************************************************/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
4.2 board_tea5767.h
#ifndef _BOARD_TEA5767_H_
#define _BOARD_TEA5767_H_

/*********************************************************************
 * INCLUDES
 */
#include "stm32f10x.h"

#include "common.h"

/*********************************************************************
 * DEFINITIONS
 */
#define TEA5767_ADDR_W      0xc0    // TEA5767 写地址
#define TEA5767_ADDR_R      0xc1    // TEA5767 读地址

#define TEA5767_MAX_KHZ     108000  // 最高频率 108M
#define TEA5767_MIN_KHZ     87500   // 最低频率 87.5M

#define TEA5767_MUTE_ON     1       // 非静音
#define TEA5767_MUTE_OFF    0       // 静音

#define TEA5767_SEARCH_UP   1       // 向上搜索
#define TEA5767_SEARCH_DOWN 0       // 向下搜索

/*********************************************************************
 * GLOBAL VARIABLES
 */
extern unsigned long g_frequency;

/*********************************************************************
 * API FUNCTIONS
 */
void TEA5767_Write(void);
void TEA5767_Read(void);
void TEA5767_GetPLL(void);
void TEA5767_SetFrequency(uint32 frequency);
uint32 TEA5767_GetFrequency(void);
void TEA5767_Search(uint8 mode);
void TEA5767_AutoSearch(uint8 mode);
void TEA5767_Mute(uint8 mode);

#endif /* _BOARD_TEA5767_H_ */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
五、API调用
需包含头文件 board_tea5767.h

TEA5767_Write

功能    向TEA5767写入5个字节数据
函数定义    void TEA5767_Write(void)
参数    无
返回    无
TEA5767_Read

功能    读TEA5767状态
函数定义    void TEA5767_Read(void)
参数    无
返回    无
TEA5767_GetPLL

功能    由频率计算PLL
函数定义    void TEA5767_GetPLL(void)
参数    无
返回    无
TEA5767_SetFrequency

功能    设置频率
函数定义    void TEA5767_SetFrequency(uint32 frequency)
参数    frequency:频率,单位:KHz
返回    无
TEA5767_GetFrequency

功能    由PLL计算频率
函数定义    uint32 TEA5767_GetFrequency(void)
参数    无
返回    当前频率
TEA5767_Search

功能    手动搜索电台,不用考虑TEA5767用于搜台的相关位:SM,SUD
函数定义    void TEA5767_Search(uint8 mode)
参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
返回    无
TEA5767_AutoSearch

功能    自动搜索电台
函数定义    void TEA5767_AutoSearch(uint8 mode)
参数    mode:搜索方式,mode=1,向上搜索,频率值+0.1MHz;mode=0,向下搜索,频率值-0.1MHz
返回    无
TEA5767_Mute

功能    静音
函数定义    void TEA5767_Mute(uint8 mode)
参数    mode:静音方式,mode=1,静音;mode=0,非静音
返回    无
六、使用例子
6.1 手动加减台
±0.1MHz,87.5-108MHz,循环增减

TEA5767_Search(1);  // 加台
TEA5767_Search(0);  // 减台
1
2
6.2 自动搜台
由于从IC中读回的频率不准,这里采用静态变量g_frequency来记录当前频率,87.5-108MHz,循环增减

TEA5767_AutoSearch(1);  // 向上搜台
TEA5767_AutoSearch(0);  // 向下搜台
1
2
参考自动搜台流程:


由上面流程可知,决定参数有

rf:1=发现一个电台,0=未找到电台
if:中频计数结果,0x31<IF<0x3E则为符合电台
lev:信号电平ADC输出,可通过写入的5个字节中对应SSLadc的位(查看下面附录),下面SSLadc=7
void TEA5767_AutoSearch(uint8 mode)
{
    uint8 radioRf = 0;                                                    // 1=发现一个电台,0=未找到电台
    uint8 radioIf = 0;                                                    // 中频计数结果
    uint8 radioLev = 0;                                                    // 信号电平ADC输出
    
    // 直到搜台成功,RF=1,0x31<IF<0x3E
    while((radioRf==0) || ((0x31>=radioIf)||(radioIf>=0x3E)))
    {
        if(mode)                                                        // 频率增加搜台
        {
            s_radioWriteData[2] = 0xC0;                                    // SUD=1,SSLadc=7,HLSI=0
            g_frequency += 100;
            if(g_frequency > TEA5767_MAX_KHZ)                            // 频率达到最大值
            {
                g_frequency = TEA5767_MIN_KHZ;
            }
        }
        else                                                            // 频率减小搜台
        {
            s_radioWriteData[2] = 0x40;                                    // SUD=0,SSLadc=7,HLSI=0
            g_frequency -= 100;
            if(g_frequency < TEA5767_MIN_KHZ)
            {
                g_frequency = TEA5767_MAX_KHZ;
            }            
        }
        TEA5767_GetPLL();                                                // 转换为PLL值
        s_radioWriteData[0] = s_pll / 256 + 0xC0;                        // MUTE=1,SM=1
        s_radioWriteData[1] = s_pll % 256;
        s_radioWriteData[3] = 0x11;
        s_radioWriteData[4] = 0x00;
        TEA5767_Write();                                                // 写入5个字节数据
        TEA5767_Read();                                                    // 读取当前频率值 
        radioRf = s_radioReadData[0] & 0x80;
        radioIf = s_radioReadData[2] & 0x7F;
        radioLev = s_radioReadData[3] >> 4;
        printf(" r=%02x\n", radioRf);
        printf(" i=%02x\n", radioIf);
        printf(" l=%d\n", radioLev);
        printf(" f=%d\n", (int)g_frequency);
    }
    TEA5767_GetPLL();                                                   // 转换为PLL值
    s_radioWriteData[0] = s_pll / 256;                                    // MUTE=0,SM=0
    s_radioWriteData[1] = s_pll % 256;
    s_radioWriteData[3] = 0x11;
    s_radioWriteData[4] = 0x00;
    TEA5767_Write();                                                    // 写入5个字节数据
    TEA5767_Read();                                                        // 读取当前频率值 
    printf(" frequency=%d\n", (int)g_frequency);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
6.3 软件静音
TEA5767_Mute(TEA5767_MUTE_ON);      // 收音机静音
TEA5767_Mute(TEA5767_MUTE_OFF);         // 收音机开启收听
1
2
七、附录
7.1 写数据
向TEA5767 写入数据时,地址的最低位是0,即写地址是C0。读出数据时地址的最低位是1,即读地址是C1。TEA5767的控制寄存器要写入5个字节,每次写入数据时必须严格按照下列顺序进行:
地址、字节1、字节2、字节3、字节4、字节5。

每个字节的最高位首先发送。在时钟的下降沿后写入的数据生效。上电复位后,设置为静音,所有其它位均被置低,必须写入控制字初始化芯片。

TEA5767内部有一个5个字节的控制寄存器,在IC上电复位后必须通过总线接口向其中写入适当的控制字,它才能够正常工作。每个数据字节各位的功能含义见表4到表14。

表4 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
MUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8
表5 数据字节1各位的说明

BIT    SYMBOL    说明
7    MUTE    若MUTE=1 左右声道静音;若 MUTE=0 左右声道非静音
6    SM    搜索模式;若SM=1 搜索模式;若 SM=0 非搜索模式
5 to 0    PLL(13:8)    预置或搜索电台的频率数据高6位
表6 数据字节2的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
表7 数据字节2各位的说明

BIT    SYMBOL    说明
7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位
表8 数据字节3的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1
表9 数据字节3各位的说明

BIT    SYMBOL    说明
7    SUD    若 SUD=1 向上搜索;
若 SUD=0 向下搜索
6 and 5    SSL[1:0]    搜索停止电平:见表10-11
4    HLSI    若 HLSI=1 高端本振注入;
若 HLSI=0 低端本振注入
3    MS    若 MS=1 强制单声道;
若 MS=0 开立体声
2    ML    若 ML=1 左声道静音强制单声道;
若 ML=0 左声道非静音
1    MR    若 MR=1 右声道静音强制单声道;
若 MR=0 右声道非静音
0    SWP1    软件可编程输出口1:若 SWP1=1 SWPOR1为高;
若 SWP1=0 SWPOR1为低
表10 搜索停止电平设定

SSL1    SSL0    搜索停止电平
0    0    不搜索
0    1    低电平 ADC output=5
1    0    中电平ADC output=7
1    1    高电平ADC output=10
表11 数据字节4的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI
表12 数据字节4各位的说明

BIT    SYMBOL    说明
7    SWP2    软件可编程输出口2:若 SWP2=1 口2为高;
若 SWP2=0口2为低
6    STBY    若 STBY=1 待机模式;
若 STBY=0 非待机模式
5    BL    若 BL=1 日本FM波段;
若 BL=0 美/欧 FM 波段
4    XTAL    若 XTAL=1 fxtal=32.768KHz;
若 XTAL=0 fxtal=13MHz
3    SMUTE    若SMUTE=1 软件静音开;
若 MUTE=0 软件静音关
2    HCC    若 HCC=1高音切割开;
若 HCC=0高音切割关
1    SNC    若 SNC =1立体声噪声消除开;
若 SNC=0立体声噪声消除关
0    SI    若SI=1 引脚SWPORT1 作ready flag输出标志;
若 SI=0 引脚SWOPRT1 作软件可编程输出口
表13 数据字节5的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLLREF    DTC    -    -    -    -    -    -
表14 数据字节5各位的说明

BIT    SYMBOL    说明
7    PLLREF    若 PLLREF=1 则6.5 MHz 参考频率 PLL可用;
若 PLLREF=0 则6.5 MHz参考频率 PLL不可用
6    DTC    若DTC=1 the 去加重时间常数为75μs;
若 DTC=0 the 去加重时间常数为50μs
5 to 0    -    不用管它
7.2 读数据
和写数据类似,从TEA5767 读出数据时,也要按照“地址、字节1、字节2、字节3、字节4、字节5”这样的顺序读出,读地址是C1。读出的5个字节的含义见表16到表25中的说明。

表15 读模式

数据字节1    数据字节2    数据字节3    数据字节4    数据字节5
表16 数据字节1的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
RF    BLF    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8
表17 数据字节1各位的说明

BIT    SYMBOL    说明
7    RF    若RF=1 则发现了一个电台或搜索到头;
若 RF=0 未找到电台
6    BLF    若BLF=1 搜索到头;
若 BLF=0 未搜索到头
5 to 0    PLL[13:8]    搜索或预置的电台频率值的高6位
表18 数据字节2的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
表19 数据字节2各位的说明

BIT    SYMBOL    说明
7 to 0    PLL(7:0)    预置或搜索电台的频率数据低8位
表20 数据字节3的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
STEREO    IF6    IF5    IF4    IF3    IF2    IF1    IF0
表21 数据字节3各位的说明

BIT    SYMBOL    说明
7    STEREO    若 STEREO=1 为立体声;
若 STEREO=0 为单声道
6 to 0    IF[6:0]    中频计数结果
表22 数据字节4的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
LEV3    LEV2    LEV1    LEV0    CI3    CI2    CI1    CI0
表23 数据字节4各位的说明

BIT    SYMBOL    说明
7 to 4    LEV[3:0]    信号电平ADC 输出
3 to 1    CI[3:1]    芯片标记; 设置为0
0    -    该位为 0
表24 数据字节5的格式

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
0    0    0    0    0    0    0    0
表25 数据字节5各位的说明

BIT    SYMBOL    说明
7 to 0    -    供以后备用的字节;设置为0
7.3 举例
根据上面的算法,以106.8的天津交通台为例,它的PLL为32d1H,第一个字节的BIT7=0非静音,BIT6=0不搜索,第三个字节的BIT4=0低本振,第四个字节的BIT5=0欧美制式,BIT4=1用32768晶振,其余位的设置无所谓,可任意。各字节值见表27~31。

表27字节1:0x32

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
MUTE    SM    PLL13    PLL12    PLL11    PLL10    PLL9    PLL8
0    0    1    1    0    0    1    0
非静音    非搜索    3        2            
表28字节2:0xd1

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLL7    PLL6    PLL5    PLL4    PLL3    PLL2    PLL1    PLL0
1    1    0    1    0    0    0    1
d                1            
表29字节3:0xc0

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SUD    SSL1    SSL0    HLSI    MS    ML    MR    SWP1
1    1    0    0    0    0    0    0
向上搜索    搜索停止中电平        低本振    立体声    非静音        随便
表30字节4:0x17

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
SWP2    STBY    BL    XTAL    SMUTE    HCC    SNC    SI
0    0    0    1    0    1    1    1
任意(不用)    非待机    欧美    32.768    非软件静音    高音切割    除噪声    SWP1=RF
表31字节5:0x00

BIT7(MSB)    BIT6    BIT5    BIT4    BIT3    BIT2    BIT1    BIT0(LSB)
PLLREF    DTC    -    -    -    -    -    -
0    0    0    0    0    0    0    0
不用6.5M    50μs                        
据此给出的控制字是:0x32,0xd1,0xC0,0x17,0x00,将这个控制字写入TEA5767就可以了。

• 由 Leung 写于 2020 年 6 月 23 日

• 参考:STM32驱动TEA5767收音机模块
    TEA5767收音模块介绍
————————————————
版权声明:本文为CSDN博主「Leung_ManWah」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36347513/article/details/106926921

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值