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

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

一、简介

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

  • 电源 5V

  • I2C 总线通讯

  • 可以使用软件进行静音和消除噪音

二、硬件连接

功能口引脚
SCLPB.6
SDAPB.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=%dn', (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    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)                           // 频率达到最大值

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

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

推荐阅读最新更新时间:2026-03-25 11:46

单片机驱动TEA5767 FM立体声收音机C51通用源码
TEA5767 FM立体声收音机,C51单片机通用的源码。 模块某宝上也就2元以内。 推荐使用 Keil uVision5 编译,我是用这个版本编译通过的。 电路原理图如下: 单片机源程序如下: #include REG52.H #include Radio.H #include Key_Handle.H #include Volume_Handle.H extern void Delay_ms(unsigned int i); /********** System inition *************/ void System_Init(void) { Key_Input=0xFF; BEEP_
[单片机]
单片机驱动<font color='red'>TEA5767</font> FM立体声<font color='red'>收音机</font>C51通用源码
TEA5767的简单收音机设计
TEA5767是飞利浦公司生产的一款收音机芯片,很多手机,MP3、MP4里的收音机功能都是于他实现的。   TEA5767HN 基本资料:    高灵敏、低噪声高频放大器,    收音频率:87.6MHz~108MHz,(支持频率范围在76MHz~87.5MHz 之间的校园收音频道),    LC 调谐振荡器使成本更低,RF AGC 电路    内置调频中频选择 ,I2C 总线控制    内置FM 立体声解调器 ,PLL 合成调谐解码器    两个可编程端口 ,软静音,SNC(立体声噪声消除)    自适应立体声解码,自动搜索功能    等待模式,需要一个32.768KHz 晶体    40 脚LQFP 封装 CPU:STC8
[单片机]
51单片机驱动TEA5767调频收音机芯片C程序
完整的源代码下载地址: http://www.51hei.com/bbs/dpj-19294-1.html 下面是程序的主要部分: /*----------- TEA5767 驱动-----------*/ /*------ 外部 晶振 为 12MHz-------*/ /*--------最后修改2011.02.26-------*/ #include STC12C5620AD.H #include IIC.H #include delay.h #include Radio.H #include Channel_Handle.H #define Max_Fre
[单片机]
51单片机驱动<font color='red'>TEA5767</font>调频<font color='red'>收音机</font>芯片C程序
我用洞洞板做的TEA5767数字调频立体声收音机
//本程序使用数码管显示频率,晶振是用12M,已通过测试, 已用万能板做好成品, //在我的QQ空间里有万能板做的照片,高清的照片可以进QQ相册看,本人空间未加密。 //为了方便电子爱好者自制,本程序将所有的端口进行了宏定义,方便初学者自行修改,并且加了很多注释 // 陈永飞 先生写于2011年2月19号,QQ:49204743,邮箱: baiyni888@163.com . //地址:江苏省南京市鼓楼区虎踞路180号苏宁电器售后服务中心草场门网点 //本收音机的频率调节是用计算的方法,将显示的频率算好后写到TEA5767芯片里面实现调节的 //使用MCS-51单片机进行控制,两个按键实现自加或自减频率,加了连续加减功能!
[单片机]
我用洞洞板做的<font color='red'>TEA5767</font>数字调频立体声<font color='red'>收音机</font>
基于STM32F103的AS5600磁编码器角度数据采集
一、AS5600简介 AS5600 是一款易于使用的磁性旋转位置传感器,提供高分辨率12位或PWM输出。该非接触式系统能够测量径向磁化同轴磁体的绝对角度。AS5600 专为非接触式应用设计,其坚固的结构可有效消除外部杂散磁场的影响。通过I²C接口,用户可以轻松编程非易失性参数,无需专用编程器。默认输出范围为0至360度,用户还可以通过编程零角度(起始位置)和最大角度(停止位置)来定义更小的输出范围。AS5600 还具备智能低功耗模式,可自动降低功耗。输入引脚(DIR)用于根据旋转方向选择输出极性:当DIR接地时,输出值随顺时针旋转而增加;当DIR连接至VDD时,输出值随逆时针旋转而增加。其特性包括非接触式角度测量、可编程最大角度
[嵌入式]
基于<font color='red'>STM32F103</font>的AS5600磁编码器角度数据采集
STM32F103C8T6开发板+GY521制作无刷四轴飞控详细图文教程
前言 前几天改造Skye无人机( Skye无人机刷betaflight详细图文教程 ),对betaflight开源飞控有了一定的了解,产生了自制飞控板的念头,网上一番查资料发现可行,现把制作过程记录如下。 1.材料清单 CH340串口下载模块1个(2.5元) STM32F103C8T6黑色开发板1个(11.5元) GY-521加速度计模块1个(3.8元) ams1117-3.3电压转换芯片1个(0.38元) 5V有源蜂鸣器1个(0.43元) 5cm*7cm洞洞板1个(0.45元) 1N5819肖特基二极管2个 SS8050三极管2个 1k电阻2个,10k电阻1个 22uf电容1个 还有线材、
[单片机]
STM32F103C8T6引脚定义详解
1、常用引脚及功能 STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,它具有许多GPIO引脚,每个引脚都可以配置为不同的功能。以下是STM32F103C8T6常用引脚的功能整理: PA0-PA15: 16个通用I/O引脚,可用于输入/输出、外部中断、模拟输入等。 PB0-PB15: 16个通用I/O引脚,可用于输入/输出、外部中断、模拟输入等。 PC13-PC15: 3个通用I/O引脚,可用于输入/输出、外部中断等。 PD0-PD2: 3个通用I/O引脚,可用于输入/输出、外部中断等。 PE0-PE5: 6个通用I/O引脚,可用于输入/输出、外部中断等。 PF0-PF1: 2个通用I/O引脚
[单片机]
<font color='red'>STM32F103</font>C8T6引脚定义详解
STM32F103 KEIL 工程
stm32f103vet6 + stlink-v2 第一步: 第二步: 第三步: 第四步: F7 编译下载
[单片机]
<font color='red'>STM32F103</font> KEIL 工程
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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