stm32F407-RDA5820N模块的使用

         RDA5820N是一款广播FM接受或发射模块,支持50M~115M频段FM和RDS/RBDS接收和发射,支持电源范围为1.8-5.5V。更多详细介绍请看数据手册。

        RDA5820N模块是在做2018年电赛无线话筒扩音系统时使用的发射模块,接收模块用的使TEA5767,当然RDA5820N也是可以的,但是当时考虑到价格,所以用了TEA5767,本篇文章主要分享RDA5820N的.c和.h文件。

rda5820.h

#ifndef __RDA5820_H
#define __RDA5820_H	 
#include "sys.h"
#include "myiic.h"   #define RDA5820_R00		0X00  //读出16个位的ID =0X5820
#define RDA5820_R02		0X02  //寄存器地址的具体意义详见数据手册第13页#define RDA5820_READ    0X23  //读RDA5820
#define RDA5820_WRITE	0X22  //写RDA5820u8 RDA5820_Init(void);					//初始化		 				    
void RDA5820_WR_Reg(u8 addr,u16 val);	//写RDA5820寄存器
u16 RDA5820_RD_Reg(u8 addr);			//读RDA5820寄存器
void RDA5820_RX_Mode(void);				//设置RDA5820为RX模式
void RDA5820_TX_Mode(void);				//设置RDA5820为TX模式
u8 RDA5820_Rssi_Get(void);              //得到信号强度
void RDA5820_Mute_Set(u8 mute);         //静音设置
void RDA5820_Rssi_Set(u8 rssi);         //设置灵敏度
void RDA5820_Vol_Set(u8 vol);           //设置音量
void RDA5820_TxPAG_Set(u8 gain);        //设置TX发送功率
void RDA5820_TxPGA_Set(u8 gain);        //设置TX 输入信号增益
void RDA5820_Band_Set(u8 band);         //设置RDA5820的工作频段
void RDA5820_Space_Set(u8 spc);         //设置RDA5820的步进频率
void RDA5820_Freq_Set(u16 freq);        //设置RDA5820的频率
u16 RDA5820_Freq_Get(void);             //得到当前频率#endif

rda5820.c

下列函数我在使用rda5820N时,并未全部使用,函数前有注释的是我在主函数中直接调用过的。

#include "usart.h"
#include "rda5820.h"
#include "delay.h"//初始化,引脚的初始化在IIC_Init()中,IIC文件即正点原子提供的myiic
u8 RDA5820_Init(void)
{u16 id;IIC_Init();						//初始化IIC口	id=RDA5820_RD_Reg(RDA5820_R00);	//读取ID =0X5820printf("ID=%x  ",id);           //通过串口查看读取的id是否正确if(id==0X5820)					//读取ID正确{RDA5820_WR_Reg(RDA5820_R02,0x0002);	//软复位delay_ms(50);RDA5820_WR_Reg(RDA5820_R02,0xC001);	//立体声,上电delay_ms(600);						//等待时钟稳定 }else return 1;//初始化失败return 0;
}		void RDA5820_WR_Reg(u8 addr,u16 val)
{IIC_Start();  			   IIC_Send_Byte(RDA5820_WRITE);	//发送写命令   	 IIC_Wait_Ack();	   IIC_Send_Byte(addr);   			//发送地址IIC_Wait_Ack(); 	 										  		   IIC_Send_Byte(val>>8);     		//发送高字节							   IIC_Wait_Ack();  		    	   IIC_Send_Byte(val&0XFF);     	//发送低字节							   IIC_Wait_Ack();  		    	   IIC_Stop();						//产生一个停止条件 	 
}u16 RDA5820_RD_Reg(u8 addr)
{u16 res;IIC_Start();  			   IIC_Send_Byte(RDA5820_WRITE);	//发送写命令   	 IIC_Wait_Ack();	   IIC_Send_Byte(addr);   			//发送地址IIC_Wait_Ack(); 	 										  		   IIC_Start();  			   IIC_Send_Byte(RDA5820_READ);    //发送读命令							   IIC_Wait_Ack();  		    	   res=IIC_Read_Byte(1);     		//读高字节,发送ACK	  res<<=8;res|=IIC_Read_Byte(0);     		//读低字节,发送NACK							   IIC_Stop();						//产生一个停止条件 return res;						//返回读到的数据
}			//设置RDA5820为RX模式(接收模式)
void RDA5820_RX_Mode(void)
{u16 temp;temp=RDA5820_RD_Reg(0X40);		//读取0X40的内容temp&=0xfff0;					//RX 模式   RDA5820_WR_Reg(0X40,temp) ;		//FM RX模式 
}			//设置RDA5820为TX模式(发送模式)
void RDA5820_TX_Mode(void)
{u16 temp;temp=RDA5820_RD_Reg(0X40);		//读取0X40的内容temp&=0xfff0;temp|=0x0001;				    //TX 模式RDA5820_WR_Reg(0X40,temp) ;		//FM TM 模式 
}u8 RDA5820_Rssi_Get(void)
{u16 temp;temp=RDA5820_RD_Reg(0X0B);		//读取0X0B的内容return temp>>9;                 //返回信号强度
}//设置音量,vol:0~15;
void RDA5820_Vol_Set(u8 vol)
{u16 temp;temp=RDA5820_RD_Reg(0X05);		//读取0X05的内容temp&=0XFFF0;temp|=vol&0X0F;				   		 RDA5820_WR_Reg(0X05,temp) ;		//设置音量	
}void RDA5820_Mute_Set(u8 mute)
{u16 temp;temp=RDA5820_RD_Reg(0X02);		//读取0X02的内容if(mute)temp|=1<<14;else temp&=~(1<<14);	    		   		 RDA5820_WR_Reg(0X02,temp) ;		//设置MUTE	
}void RDA5820_Rssi_Set(u8 rssi)
{u16 temp;temp=RDA5820_RD_Reg(0X05);		//读取0X05的内容temp&=0X80FF;temp|=(u16)rssi<<8;				   		 RDA5820_WR_Reg(0X05,temp) ;		//设置RSSI	
}//设置TX发送功率,gain:0~63
void RDA5820_TxPAG_Set(u8 gain)
{u16 temp;temp=RDA5820_RD_Reg(0X41);		//读取0X42的内容temp&=0XFFC0;temp|=gain;				   		//GAINRDA5820_WR_Reg(0X41,temp) ;		//设置PA的功率
}//设置TX 输入信号增益,gain:0~7
void RDA5820_TxPGA_Set(u8 gain)
{u16 temp;temp=RDA5820_RD_Reg(0X68);		//读取0X42的内容temp&=0XE3FF;temp|=gain<<10;			    	//GAINRDA5820_WR_Reg(0X68,temp) ;		//设置PGA
}//band:0,87~108Mhz;1,76~91Mhz;2,76~108Mhz;3,65-76MHz or 50-65MHz
void RDA5820_Band_Set(u8 band)
{u16 temp;temp=RDA5820_RD_Reg(0X03);		//读取0X03的内容temp&=0XFFF3;temp|=band<<2;			     RDA5820_WR_Reg(0X03,temp) ;		//设置BAND
}//设置RDA5820的步进频率,space:0,100Khz;1,200Khz;2,50Khz;3,25KHz
void RDA5820_Space_Set(u8 spc)
{u16 temp;temp=RDA5820_RD_Reg(0X03);		//读取0X03的内容temp&=0XFFFC;temp|=spc;			     RDA5820_WR_Reg(0X03,temp) ;		//设置BAND
}//设置RDA5820的频率,freq:频率值(单位为10Khz),比如10805,表示108.05Mhz
void RDA5820_Freq_Set(u16 freq)
{u16 temp;u8 spc=0,band=0;u16 fbtm,chan;temp=RDA5820_RD_Reg(0X03);	//读取0X03的内容temp&=0X001F;band=(temp>>2)&0x03;		//得到频带spc=temp&0x03; 				//得到分辨率if(spc==0)spc=10;else if(spc==1)spc=20;else spc=5;if(band==0)fbtm=8700;else if(band==1||band==2)fbtm=7600;else {fbtm=RDA5820_RD_Reg(0X53);//得到bottom频率fbtm*=10;}if(freq>6;   band=(temp>>2)&0x03;		//得到频带spc=temp&0x03; 				//得到分辨率if(spc==0)spc=10;else if(spc==1)spc=20;else spc=5;if(band==0)fbtm=8700;else if(band==1||band==2)fbtm=7600;else {fbtm=RDA5820_RD_Reg(0X53);//得到bottom频率fbtm*=10;}temp=fbtm+chan*spc;				 return temp;//返回频率值
}			    

        主函数就只需初始化,然后设置RX或TX模式,在设置对应的频率等,应该就可以了。我当时的主程序用了2个rda5820N,所以就不放出来了,而且那个主函数太多冗余的东西了。

        本人刚学习stm32不到半年,如果有错误请多多指教。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部