找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7966|回复: 15
打印 上一主题 下一主题
收起左侧

众拳STM8的RDA5807收音机实验资料 附代码

  [复制链接]
跳转到指定楼层
楼主

一. 控制接口
RDA5807 提供了 I2C 作为控制接口.

    在该接口下,有两中读写方式,分别是连续读写方式和带寄存器地址的标准 I2C 方式,两种方式通过I2C 的器件地址来区分实现,读写方式和器件地址详细描述如下:

1、连续读写方式:
    在该模式下,寄存器的地址是不可见的,即有一个固定的起始寄存器地址(写操作时为 02H,读操作时为 0AH),并有一个内部递增计数器,I2C 器件地址为 0010000B,加上读写标志,即 I2C 器件地址为0x20(写操作)和 0x21(读操作)

(1)、 写操作: 写操作默认起始寄存器为 02H, 即所有写操作都是默认从 02H开始,即使只写如 03H 或者 05H,都必须从 02H 写起,MCU 写入寄存器的顺序如下:02H 的高字节,02H 的低字节,03H 的高字节,……,直到结束。芯片在 MCU 写入每个字节后都会返回一个 ACK。MCU 会给出 STOP 来结束操作。

(2)、 读操作: 读操作默认起始寄存器为 0AH, 即所有读操作都是默认从 0AH开始。在对芯片进行读操作时,MCU 给出命令字节后,RDA5807HP 会送出数据字节,顺序如下:0AH 高字节,0AH 低字节,0BH 高字节,……,直到芯片接收到从 MCU 发出的 NACK, MCU 送出 STOP,读操作结束。除了最后一个字节, MCU 在读到每个字节后都要给出 ACK, 在读到最后一个字节后, MCU给出 NACK,使芯片把总线交给 MCU,然后 MCU 发出 STOP,结束整个操作。
2、标准 I2C 读写方式:
    该模式是与标准 I2C 读写方式一致,即带寄存器地址的方式,I2C 器件地址为 0010001B,加上读写标志位,即为 0x22(写操作)和 0x23(读操作),读写方式的格式如下:



二. 状态转换


RDA5807HP 中有 5 种状态: 复位初始化(Reset&Initial),设置频点(Tune), 搜台(Seek),工作(Working),休眠(Sleep)。

    在芯片上电和复位后,软件通过编写 ENABLE(02H,bit 0)寄存器,将其置为 1,即可使RDA5807HP 进入上电状态。 软件通过编程相应寄存器, 即可使 RDA5807HP 进入 Tune 或 Seek状态,这些操作之后,RDA5807HP 进入正常工作状态(Working)。软件通过将 ENABLE 置为 0,可使 RDA5807HP 进入睡眠状态,此时所有寄存器值保持不变(与未睡眠之前相同)。在睡眠状态时,软件可通过编写 ENABLE 为 1,即可将 RDA5807HP 回到正常工作(Working)状态。进入工作模式后,软件需要重新设置所需要的频点,即重新进行一次 Tune 操作。

单片机源程序如下:
  1. /****************************************************************************************
  2. *   说    明: FM收音机固定频率实验
  3. *   开发平台: 剑齿虎STM8开发板        
  4. *   作    者: 刘洋 张殿东
  5. *   版    本: V1.0
  6. ****************************************************************************************/
  7. #include "pbdata.h"

  8. void BSP_Configuration(void);

  9. /****************************************************************************************
  10. *   函 数 名: main
  11. *   功能说明: c程序入口
  12. *   形    参:无
  13. *   返 回 值: 错误代码(无需处理)
  14. ****************************************************************************************/
  15. int main(void)
  16. {   
  17.     u16 time=0;
  18.     u8 key=0;
  19.   
  20.     BSP_Configuration();
  21.      
  22.     while(1)
  23.     {
  24.       key=TM1650_Key();
  25.       
  26.       switch(key)
  27.       {
  28.         case 0x64: //上搜台
  29.         {            
  30.             RDA_Seek_Direction(1);
  31.             RXFreq=RDA_Search_Freq();
  32.             RDA_Freq_View(RXFreq);
  33.             while(TM1650_Key()==key);
  34.         }
  35.         break;
  36.         case 0x5C:// 下搜台
  37.         {
  38.             RDA_Seek_Direction(0);
  39.             RXFreq=RDA_Search_Freq();
  40.             RDA_Freq_View(RXFreq);
  41.             while(TM1650_Key()==key);
  42.         }
  43.         break;
  44.         case 0x54:// 左小声
  45.         {
  46.             RDA_Vol_Small();
  47.             while(TM1650_Key()==key);
  48.         }
  49.         break;
  50.         case 0x44://右大声
  51.         {
  52.             RDA_Vol_Big();
  53.             while(TM1650_Key()==key);
  54.         }
  55.         break;
  56.         case 0x4C://  确定键  开关
  57.         {                       
  58.             RDA_Enable();
  59.             while(TM1650_Key()==key);                        
  60.         }
  61.         break;        
  62.       }
  63.       
  64.       if(KEY_Down(K1_PORT,K1_PIN)==true)//向下微调
  65.       {   
  66.           RDA_Freq_Down();
  67.       }
  68.    
  69.       if(KEY_Down(TOUCH_PORT, TOUCH_PIN)==true)//向上微调
  70.       {            
  71.           RDA_Freq_Up();
  72.       }
  73.       
  74.       time++;
  75.       delay_ms(1);
  76.       if(time>1000)
  77.       {
  78.         time=0;      
  79.         printf("频率:%d\r\n",RXFreq);
  80.         printf("信号:%d\r\n",RDA_RSSI());
  81.         printf("音量:%d\r\n",Vol);
  82.         printf("\r\n");
  83.       }
  84.     }
  85. }
  86. /****************************************************************************************
  87. *   函 数 名: BSP_Configuration
  88. *   功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
  89. *   形    参:无
  90. *   返 回 值: 无
  91. ****************************************************************************************/
  92. void BSP_Configuration(void)
  93. {
  94.     CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);   
  95. ……………………

  96. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:

【众拳】剑齿虎STM8开发板的实验代码下载:

众拳RDA5807收音机实验程序.zip (1.92 MB, 下载次数: 166)
资料.zip (869.77 KB, 下载次数: 98)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:280790 发表于 2018-1-29 23:39 | 只看该作者
学习了
回复

使用道具 举报

板凳
ID:276663 发表于 2018-1-31 10:18 | 只看该作者
谢谢分享,真的是无私奉献。
回复

使用道具 举报

地板
ID:102293 发表于 2018-9-30 18:10 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
ID:370231 发表于 2018-10-13 16:31 | 只看该作者
51hei论坛有你更精彩 谢谢分享
回复

使用道具 举报

6#
ID:116683 发表于 2019-3-25 16:48 | 只看该作者
感谢分享
回复

使用道具 举报

7#
ID:102293 发表于 2019-3-30 21:20 | 只看该作者
谢谢分享。辛苦了!
回复

使用道具 举报

8#
ID:262352 发表于 2019-7-23 17:22 | 只看该作者
有你更精彩
回复

使用道具 举报

9#
ID:425204 发表于 2019-8-12 21:54 | 只看该作者
谢谢分享,真的是无私奉献。
回复

使用道具 举报

10#
ID:425204 发表于 2019-8-12 22:00 | 只看该作者
谢谢分享,收藏了
回复

使用道具 举报

11#
ID:371458 发表于 2019-9-4 11:43 | 只看该作者
请教个问题:在读取0BH寄存器时发现FM_TRUE位恒为0,没办法判断当前通道是否为station,请问各位大佬遇到过吗?怎么解决的?
回复

使用道具 举报

12#
ID:229821 发表于 2019-10-19 15:56 | 只看该作者
谢谢分享啊。好东西。谢谢了。十分感谢。
回复

使用道具 举报

13#
ID:655165 发表于 2019-12-20 14:24 来自手机 | 只看该作者
好东西
回复

使用道具 举报

14#
ID:65880 发表于 2020-4-23 11:10 | 只看该作者
谢谢分享,真的是无私奉献。
回复

使用道具 举报

15#
ID:475993 发表于 2020-4-23 17:30 | 只看该作者
用了一下,没成功。
初始化都不加个判断是否初始化成功的吗。即使不连接也能运行下去。
用了搜台功能,函数里有个while,不过不知道为什么一下子就过去了,一直返回常数。
难受。
回复

使用道具 举报

16#
ID:669677 发表于 2020-8-7 11:39 | 只看该作者
谢谢分享,真的是无私奉献
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表