STM32 RDS解码

本文介绍了如何在STM32系统中实现RDS解码,使用RDS解码芯片TDA7478接收空中广播信号,并通过中断处理读取数据。STM32配置RDS相关端口,当时钟信号到来时,存储数据并进行同步校验,最终将正确数据传给主CPU解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       RDS(Radio Data System)无线数据广播系统是在调频广播发射信号中利用副载波把电台名称、节目类型、节目内容及其它信息以数字形式发送出去。通过具有RDS功能的调谐器就可以识别这些数字信号,变成字符显示在显示屏上。在收到节目的同时,通过RDS可知道接收到的是那个电台,它的发射频率,并给出该电台其余的频率,由此再使用“切换频率”钮来保证所接收的信号为最强的频率。RDS无线数据广播文件可显示接收到的节目名称及其它资料。RDS功能可按节目类型决定取舍,寻找到符合你要求的电台。RDS还能用来自动控制接收机,使流动工作的汽车收音机一直保持最佳接收状态,及时收到紧急交通报告,有利交通安全。

       最近需要在我们的车载设备中集成RDS功能,这里需要用到一个专门的RDS解码芯片(这里使用ST的TDA7478), 通过RDS解码芯片,可以将空中的RDS广播信号解调出来输出给STM32,共有3路输出,分别是QUAL(信号质量)、RDCL(时钟信号)、RDDA(RDS数据)输出,STM32在RDS时钟到来是读取RDS数据并存入到buffer中,当buffer中的数据校验成功时,认为收到正确的RDS数据。

       STM32具体操作流程如下:

1.配置QUAL、RDCL、RDDA为输入端口,并设置RDCL为上升沿中断;

2.在RDCL产生中断时,读取RDDA数据,并将数据存入到buffer中;

3.每收到一块(26位)RDS数据后,做一次同步校验,若同步失败,则继续做同步,若同步成功,则继续接收下一块数据;

4.当接收到连续的ABCD四块数据并校验无误后,将四块数据拼接成一组,发送给主CPU做进一步的解析处理(需参考RDS标准,如国标、欧洲标准,美洲标准)。

参考代码如下:

//********************************************************************
//filename:  RDS.cpp
//created: 2012-04-24
//author:  firehood
//purpose: RDS解码
//*********************************************************************
#include "RDS.h"
// 同步校验码(由偏置字*H矩阵计算得到)
const static int32u SYNCODE_A  = 0x03D8;
const static int32u SYNCODE_B  = 0x03D4;
const static int32u SYNCODE_C  = 0x025C;
const static int32u SYNCODE_C2 = 0x03CC;
const static int32u SYNCODE_D  = 0x0258;

static Boolean g_bRDSExist = FALSE;    // RDS是否存在
static Boolean g_bRDSEnable = FALSE;   // RDS功能使能标志
static BLOCK   g_block = 0;			   // RDS数据块
static BLOCK   g_blockA = 0,g_blockB = 0,g_blockC = 0,g_blockD = 0;
static int32u  g_bRevBitCount = 0;	   
static Boolean g_bSyncFlag = FALSE;    // 是否同步标志
static Boolean g_nSyncLevel = 0;       // 同步级数
static Bo
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值