{
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 { 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个字节数据
上一篇:STM32F103学习笔记(3)——读写内部Flash
下一篇:STM32F103学习笔记(1)——FreeRTOS下模拟I2C
- 热门资源推荐
- 热门放大器推荐
- AZ7045RTR低压指示检测器典型应用电路
- LTM4608AMPY 3V 至 5.5Vin、2.5V/8A 输出 DC/DC 稳压器的典型应用电路
- 使用 L6562A 的恒流反向降压 LED 驱动器
- EP53A7HQI 1A同步降压稳压器典型应用电路
- OP284FSZ 缓冲网络补偿容性负载的典型应用
- EVAL-AD5116SDZ,用于仪表的 AD5116 数字电位器的评估板
- 用于音频的 4 通道 D 类音频功率放大器
- 使用 ON Semiconductor 的 ML4841 的参考设计
- LT3755IUD-1 降压模式 500mA LED 驱动器的典型应用电路,用于 20kHz PWM 调光
- RDR-669 - 使用 LinkSwitch-CV 的 5 W、85-265 VAC、恒压 (CV) 适配器



非常经典的关于LLC的杨波博士论文
LM741L

XC6406PP60DL






京公网安备 11010802033920号