参加2020年智能车竞赛的声音信标组 奋战了一个月 可惜并没有获得奖项,正巧该车的收发Chirp波的模块为RDA5807,闲暇之余,参考了RDA5807的数据手册,制作了一个通过STM32作为主控的RDA5807 收音机
rda5807.c
#include<stdio.h>
#include<sys.h>
#include<delay.h>
#include<RDA5807.h>
#include<lcd.h>
u16 RXFreq=0;
u8 Vol=0;
u8 RDA_State=0;
//初始化I2C
void rda5807_i2c_init(void)
{
IIC_Init();
}
void RDA_ReadReg(u8 regAddr)
{
u16 buf;
IIC_Start();
IIC_Send_Byte(RDA_WRITE);//发送芯片地址 方向为写
IIC_Wait_Ack();
IIC_Send_Byte(regAddr);//发送寄存器地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(RDA_READ);//发送芯片地址 方向为读
IIC_Wait_Ack();
buf = IIC_Read_Byte(1);
buf = buf<<8;
buf =buf|IIC_Read_Byte(0);
IIC_Stop();
return buf;
}
void RDA_WriteReg(u8 regAddr,u16 val)
{
IIC_Start();
IIC_Send_Byte(RDA_WRITE); //发送芯片地址 方向为写
IIC_Wait_Ack();
IIC_Send_Byte(regAddr); //发送寄存器地址
IIC_Wait_Ack();
IIC_Send_Byte(val>>8);
IIC_Wait_Ack();
IIC_Send_Byte(val&0xFF);
IIC_Wait_Ack();
IIC_Stop();
}
void RDA_Vol(u8 vol)
{
u16 temp=0;
if(RDA_State==1)
{
temp=RDA_ReadReg(RDA_R05);
temp&=0xfff0;
RDA_WriteReg(RDA_R05,temp|vol);
}
}
//信号强度获取 0~127
u16 RDA_RSSI(void)
{
u16 temp=0;
if(RDA_State==1)
{
temp=RDA_ReadReg(RDA_R0B);
temp=(temp>>9)&0x7f;
}
if(temp<30)
{
LED0=0;
LED1=0;
}
else if(temp>=30 && temp<50)
{
LED0=0;
LED1=1;
}
else if(temp>=50 && temp<70)
{
LED0=1;
LED1=0;
}
else if(temp>=70)
{
LED0=1;
LED1=1;
}
return temp;
}
//搜台方向 1向上搜索 0向下搜