[应用相关] 数字化收音机制作学习分享

[复制链接]
1293|9
 楼主| gaoyang9992006 发表于 2023-11-13 11:03 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2023-11-13 11:14 编辑

收音机曾经是一个很重要的信息获取设备,如今已经沦落为情怀了,然而它作为无线电传输设备,将会长久的 存在于历史舞台。接下来根据以下ST板块相关帖子或许开发它的知识吧。通常这些收音机模块都是I2C接口的,有的公用版的I2C协议,有的是变种协议,因此要学习的知识点有:i2C协议,如何通过IO模拟I2C时序,剩下的就是要深刻理解芯片手册关于寄存器各个位的描述,如果使用别人写好的驱动库,那就简单多了,只需要学会程序移植即可。
  1. /*
  2. I2C Start
  3. 起始信号:时钟信号在高电平状态时候,数据线产生一个下降沿表示开始信号
  4. */
  5. void I2C_Start()
  6. {
  7.         IO_SCL_SET_H();
  8.         
  9.         IO_SDA_SET_H();
  10.         IO_SDA_SET_L();        
  11. }

  12. /*
  13. I2C Stop
  14. 停止信号:时钟信号在高电平状态时候,数据线产生一个上升沿表示停止
  15. */
  16. void I2C_Stop()
  17. {
  18.         IO_SCL_SET_H();
  19.         
  20.         IO_SDA_SET_L();
  21.         IO_SDA_SET_H();        
  22. }

  23. /*
  24. I2C ACK/NACK
  25. 应答信号:第九个时钟周期的时钟高电平时候读取SDA数据,如果SDA此时为0,则表示应答,如果为1则表示非应答。
  26. */
  27. void I2C_ACK()
  28. {
  29.         IO_SDA_SET_H();
  30.         
  31.         IO_SCL_SET_H();
  32.         if(Get_IO_SDA()==0)
  33.         IO_SCL_SET_L();
  34.         else
  35.         while(Get_IO_SDA()==1);
  36.         IO_SCL_SET_L();
  37. }

  38. /*
  39. I2C 上发送一个字节数据
  40. 发送字节:发送字节是时钟信号的低电平时候修改数据,。
  41. */
  42. void Write_I2C_Byte(unsigned char I2C_Byte)
  43. {
  44.         unsigned char i;
  45.         
  46.         for(i=0;i<8;i++)
  47.         {
  48.                 IO_SCL_SET_L();
  49.                
  50.                 if((I2C_Byte<<i)&0x80)
  51.                         IO_SDA_SET_H();
  52.                 else
  53.                         IO_SDA_SET_L();
  54.                
  55.                 IO_SCL_SET_H();               
  56.         }
  57.         IO_SCL_SET_L();
  58. }
  59. /*
  60. add:7位地址;
  61. rwbit:读写位,1表示读,0表示写
  62. dat:数据字节
  63. 命令或数据:1表示发送的字节是数据,0表示发送的字节是命令
  64.         
  65. */
  66. void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
  67. {
  68.         I2C_Start();
  69.         Write_I2C_Byte(0x78);
  70.         I2C_ACK();
  71.         if(cmd)
  72.                 Write_I2C_Byte(0x40);
  73.         else
  74.                 Write_I2C_Byte(0x00);
  75.         I2C_ACK();
  76.         Write_I2C_Byte(dat);
  77.         I2C_ACK();        
  78.         I2C_Stop();
  79. }


游客,如果您要查看本帖隐藏内容请回复
[payamount]1.00[/payamount]

评论

下载  发表于 2024-2-22 17:17
step3 发表于 2024-2-22 17:18 | 显示全部楼层
下载下载
oufuqiang 发表于 2024-6-3 18:38 | 显示全部楼层
这个是对应哪个接收IC的
caigang13 发表于 2024-6-3 19:19 来自手机 | 显示全部楼层
二姨家也开始搞付费才能看贴了吗?
chenjun89 发表于 2024-6-4 08:02 来自手机 | 显示全部楼层
完犊子了,还有付费才能看帖子内容。
 楼主| gaoyang9992006 发表于 2024-6-4 09:30 | 显示全部楼层
chenjun89 发表于 2024-6-4 08:02
完犊子了,还有付费才能看帖子内容。

不用看了,没啥内容。参加论坛活动呢,突然跟我说不能参加,我就设置成这样了。
rzjvv 发表于 2024-8-31 17:57 | 显示全部楼层
你提到的将收音机模块与STM32结合,涉及到的知识点包括I2C协议、如何模拟I2C时序、以及理解芯片手册中的寄存器描述。
发顺丰更大nc 发表于 2024-9-29 13:23 | 显示全部楼层
如果有现成的I2C驱动库,利用它们能大大简化开发过程。确保熟悉库的API和使用方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部