一、简介

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=%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 { if(mode) // 频率增加搜台 { s_radioWriteData[2] = 0xC0; // SUD=1,SSLadc=7,HLSI=0 g_frequency += 100; if(g_frequency > TEA5767_MAX_KHZ) // 频率达到最大值
上一篇:STM32F103学习笔记(3)——读写内部Flash
下一篇:STM32F103学习笔记(1)——FreeRTOS下模拟I2C
推荐阅读最新更新时间:2026-03-25 11:46
- 用于 7VIN 至 16VIN、1.5V 和 1.2V 输出的 LTM4628EV DC/DC 模块稳压器的典型应用电路
- 使用 Analog Devices 的 LTC3728LIGN 的参考设计
- DER-406 - 适用于 A19 灯的 5.76 W 高 PF 非隔离降压-升压型 TRIAC 调光 LED 驱动器
- ADR5045B 5V 输出精密微功率并联模式电压基准的典型应用
- LT3970EDDB-3.42 2.5V 降压转换器的典型应用
- MC78M08BDTG 8V 电流调节器的典型应用
- LT1021DCN8-5 精密电压基准的典型应用
- DER-282 - 100W, 扁平(11 mm), LLC DC-DC转换器
- REF193 低压差开尔文连接电压基准的典型应用电路
- LT3088EM 线性稳压器用于添加软启动的典型应用
- 英特尔创始人、“摩尔定律”提出者戈登·摩尔去世
- 本周机器人行业大事件TOP5
- G20周刊|埃斯顿与北自所达成战略合作、海康机器人发布光伏组件汇流带视觉检测解决方案
- 14家工业智能企业入选《上海市智能机器人标杆企业与应用场景推荐目录》
- 大声量 | 2023机器视觉技术与应用峰会议程新鲜出炉!
- Allegro MicroSystems推出面向车辆安全和 ADAS应用的无PCB 3D磁性传感器
- 敏捷开发失败的五个原因以及解决方案
- Digi-Key Electronics 庆祝双11购物节, 无条件为中国客户提供免费送货服务
- 英特尔推出 NUC 13 Extreme,为迷你电脑性能设立新标杆
- 绿芯将在慕尼黑2022电子展上展示用于工业、网络和交通运输应用的固态硬盘和存储卡



STM32F103中文参考手册
FDC2214 4路微小电容检测电路
电赛2024H设计报告(stm32版本)
现代雷达系统的信号设计
BFR340T






京公网安备 11010802033920号