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

发布者:快乐时刻最新更新时间:2025-02-21 来源: jianshu关键字:STM32F103  收音机模块  TEA5767 手机看文章 扫描二维码
随时随地手机看文章

            {

                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=%02xn', radioRf);

        printf(' i=%02xn', radioIf);

        printf(' l=%dn', radioLev);

        printf(' f=%dn', (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=%dn', (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****************************************************/


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_ */


五、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);  // 减台

6.2 自动搜台

由于从IC中读回的频率不准,这里采用静态变量g_frequency来记录当前频率,87.5-108MHz,循环增减


TEA5767_AutoSearch(1);  // 向上搜台TEA5767_AutoSearch(0);  // 向下搜台

参考自动搜台流程:


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

  • rf:1=发现一个电台,0=未找到电台

  • if:中频计数结果,0x31

  • 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    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个字节数据

[1] [2] [3]
关键字:STM32F103  收音机模块  TEA5767 引用地址:STM32F103学习笔记(2)——收音机模块TEA5767使用

上一篇:STM32F103学习笔记(3)——读写内部Flash
下一篇:STM32F103学习笔记(1)——FreeRTOS下模拟I2C

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved