stm32F407-RDA5820N模块的使用

发布者:心灵舞者最新更新时间:2022-08-08 来源: csdn关键字:stm32F407 手机看文章 扫描二维码
随时随地手机看文章

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  //写RDA5820

 

u8 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 =0X5820

printf("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;     //GAIN

RDA5820_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;     //GAIN

RDA5820_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 chan=(freq-fbtm)/spc; //得到CHAN应该写入的值

chan&=0X3FF; //取低10位   

temp|=chan<<6;

temp|=1<<4; //TONE ENABLE      

RDA5820_WR_Reg(0X03,temp) ; //设置频率

delay_ms(20); //等待20ms

while((RDA5820_RD_Reg(0X0B)&(1<<7))==0);//等待FM_READY

}

 

u16 RDA5820_Freq_Get(void)

{

u16 temp;

u8 spc=0,band=0;

u16 fbtm,chan;

temp=RDA5820_RD_Reg(0X03); //读取0X03的内容

chan=temp>>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,所以就不放出来了,而且那个主函数太多冗余的东西了。

关键字:stm32F407 引用地址:stm32F407-RDA5820N模块的使用

上一篇:stm32F407--AD7606模块串行使用
下一篇:STM32学习之CAN控制器简介

推荐阅读最新更新时间:2024-11-18 10:09

MISUMI车用FM多元调制器FE3621
  MISUMI 的 调制器 用接收调频广播和输出包括数字日期在内的复合信号,如调频广播交通信息多元化。FE3621由于表面装配而且小尺寸器件上已装上电压控制震荡器晶体而适合于回流焊。-40℃到85℃的使用温度范围。电压范围为3.3V±0.3V(最大额定电压4.3V/25℃),VICS接收频率范围为76MHz到90MHz,检测输出电压.390mVrns(mod.1kHz)。S/N=3dB敏感度:35dBuV max.   产品特征:   1, 由于采用高密度封装设计使得结构小而低调。相比常规产品(RE348)安装面积减小到81.3%,体积减小到90.8%。   2, 由于表面装配设计,适合回流焊。   3, Full-
[模拟电子]
简单的FM调频发射制作实验
目前,适合自己动手制作的发射实验当数无线话筒等调频器材,虽然各种报刊上这类文章较多,但是报刊缺乏交互式手段,爱好者制作过程中遇到问题很不方便与作者、其他读者进行交流。再者,报刊编辑部选登的制作文章不一定都能经过验证,因此,有些作者构想出来的制作给初学者带来困难。   这是一个比较简单的实用型制作,本文打算从简到繁一步步深入,你若是愿意同步动手实验,不久你将能够制作适合正式场合使用的调频发射机。当然,实验还是从最简单的做起,下图是一个最简单的振荡器,它是调频发射的基础。      图中的线圈用1.0mm的漆包线在3.2mm的钻头上绕6-8圈,可覆盖88-108MHz,7圈时在100MHz附近。按上图连接好,其实就已经是一个
[模拟电子]
简单的<font color='red'>FM</font>调频发射制作实验
再次调试STM32F407+DP83848
早在还没有毕业前,就调试过STM32F407+DP83848,这次又调试了一次,居然花了2天时间。STM32支持两种工业级标准的接口,来与外部物理层 PHY模块相连,分别是独立于介质的接口(MII)和简化的独立于接口的接口(RMII)。之前PHY芯片使用的MII模式,现在的这次调试是使用的RMII模式(参考了各方原理图,主要还是以官方开发板的MB786为主)。我还是以一个ST官方手册上的图来说说我的使用情况吧。 1.如果我们按照这个图上来画原理图,这个肯定没有错,但是对于一般使用(我们用的都是全双工的),CRS和COL这两根线使用的不多,至于为什么,我也说的不是很清楚,了解的同学们,可以补充下。 2.对于连接 DP83
[单片机]
再次调试STM32F407+DP83848
轻松搞懂STM32F407之中断及NVIC与EXTI
什么是中断和异常: 首先要了解什么是内核,什么是外设。内核就如Cortex_M4,是ARM公司开发的。ST公司在拿到这个内核后,做了一些东西,如GPIO和RTC以及USART等等等等,都是外设。 那么异常是对所有能打断程序正常执行的统称,中断属于一种异常。在内核中,异常就叫异常,而在外设中,异常被称为中断。(下面统称中断); 中断的概念与组成: 现在我们把单片机看做是一个正在做饭的少妇。他正在做饭(去除食物,放入锅里,煎炒...),就在这时,他的孩子发出了一声啼哭,并且这时她发现家里的盐所剩不多了,他不得不放下手头的铲子去哄孩子睡觉,并记住她做饭做到哪里了。等她哄完孩子后,再去超市买盐回来,又继续做饭。 如果把
[单片机]
轻松搞懂<font color='red'>STM32F407</font>之中断及NVIC与EXTI
stm32f407 内部flash保存数据
#include stm32f4xx.h //FLASH起始地址 #define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址 #define FLASH_SAVE_ADDR 0x080A0000 //保存地址 //FLASH 扇区的起始地址 #define ADDR_FLASH_SECTOR_0 ((u32)0x08000000) //扇区0起始地址, 16 Kbytes #define ADDR_FLASH_SECTOR_1 ((u32)0x08004000) //扇区1起始地址, 16 Kbytes #define ADDR_FLASH_S
[单片机]
STM32F407--芯片解读
注:博主使用的是STM32F4探索者 一、参考资料 1、STM32F4数据手册:STM32F407ZGT6.pdf 2、STM32F4中文手册:STM32F4xx中文参考手册.pdf 3、开发板原理图:Explorer STM32F4_Vxx_SCH.pdf 二、芯片内部资源 1、芯片实物图片 2、芯片对应的参数表 3、内核 (1)32位 高性能ARM Cortex-M4处理器 (2)时钟: 高达168MHz,实际还可以超频一点点 (3)支持FPU(浮点运算)和DSP指令 4、IO口 (1)STM32F407ZGT6:144引脚 114个IO口 (2)大部分IO口都耐
[单片机]
STM32F407--芯片解读
Spansion为其FM4系列增添96款面向工业物联网应用的新产品
200MHz高性能、新的接口及协议、2M存储和5V I/O共同打造易用、同类最佳的MCU。 2014年10月30日,中国北京 –——全球行业领先的嵌入式市场闪存解决方案创新厂商 Spansion 公司(NYSE:CODE)今日为其Spansion® FM4 MCU系列增添了96款新产品。新款MCU基于ARM® Cortex®-M4F内核,工作频率高达200MHz,并支持各种可实现增强型人机接口(HMI)和机器间(M2M)通信的片上外设。丰富的外设和大容量存储可为一系列广泛的应用提供单芯片解决方案 ,其中包括工厂自动化、工业物联网、电机控制、办公自动化、楼宇管理系统、智能电表、数码相机和多功能打印机。 Spansio
[物联网]
STM32F407定时器编码器模式简介
void encoder_left_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//开启TIM3时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);//开启GPIOB时钟 GPIO_PinAFConfig(GPIOD,
[单片机]
<font color='red'>STM32F407</font>定时器编码器模式简介
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved