OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4665|回复: 12

使用原子大哥的RDA5820程序做收音机,程序死在了设置频率部分

[复制链接]

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
发表于 2017-6-15 16:50:08 | 显示全部楼层 |阅读模式
1金钱
使用原子大哥的RDA5820程序做收音机,程序死在了设置频率部分

[mw_shl_code=c,true]        freqset=9750;                                //ĬèÏÎa93.6Mhz
        RDA5820_Freq_Set(freqset);        //éèÖÃÆμÂê[/mw_shl_code]


跟踪进去之后发现程序死在了while((RDA5820_RD_Reg(0X0B)&(1<<7))==0);这句话
仿真发现RDA5820_RD_Reg(0X0B)返回的结果为0



[mw_shl_code=c,true]//éè&#214;&#195;RDA5820μ&#196;&#198;μ&#194;ê
//freq:&#198;μ&#194;ê&#214;μ(μ¥&#206;&#187;&#206;a10Khz),±èè&#231;10805,±íê&#190;108.05Mhz
void RDA5820_Freq_Set(u16 freq)
{
        u16 temp;
        u8 spc=0,band=0;
        u16 fbtm,chan;
        temp=RDA5820_RD_Reg(0X03);        //&#182;áè&#161;0X03μ&#196;&#196;úèY
        temp&=0X001F;
        band=(temp>>2)&0x03;                //μ&#195;μ&#189;&#198;μ′&#248;
        spc=temp&0x03;                                 //μ&#195;μ&#189;·&#214;±&#230;&#194;ê
        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);//μ&#195;μ&#189;bottom&#198;μ&#194;ê
                fbtm*=10;
        }
        if(freq<fbtm)return;
        chan=(freq-fbtm)/spc;                //μ&#195;μ&#189;CHANó|&#184;&#195;D′è&#235;μ&#196;&#214;μ
        chan&=0X3FF;                                //è&#161;μí10&#206;&#187;          
        temp|=chan<<6;
        temp|=1<<4;                                        //TONE ENABLE                             
        RDA5820_WR_Reg(0X03,temp) ;        //éè&#214;&#195;&#198;μ&#194;ê
        delay_ms(20);                                //μè′y20ms
        while((RDA5820_RD_Reg(0X0B)&(1<<7))==0);//μè′yFM_READY
       
}[/mw_shl_code]

有没有哪位大哥遇见过?

硬件入门,初学软件,请多多指教
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2017-6-15 16:55:18 | 显示全部楼层
正常情况下 RDA5820_RD_Reg(0X0B)返回的结果为 0x4ECF,两块板子一块是 PBout(10) //SCL   PBout(11) //SDA         另一块是PBout(6) //SCL    PBout(7) //SDA         
硬件入门,初学软件,请多多指教
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2017-6-15 16:56:02 | 显示全部楼层
黄俊 发表于 2017-6-15 16:55
正常情况下 RDA5820_RD_Reg(0X0B)返回的结果为 0x4ECF,两块板子一块是 PBout(10) //SCL   PBout(11) //SDA ...

PB10 PB11的那块板子是正常的
硬件入门,初学软件,请多多指教
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2017-6-15 16:57:52 | 显示全部楼层
[mw_shl_code=c,true]//IO方向设置
#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}
//IO方向设置
#define SDA_IN1()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=0x80000000;}
#define SDA_OUT1() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=0x30000000;}

//IO操作函数
#define IIC_SCL    PBout(10) //SCL
#define IIC_SDA    PBout(11) //SDA         
#define READ_SDA   PBin(11)  //输入SDA

#define IIC_SCL1    PBout(6) //SCL
#define IIC_SDA1    PBout(7) //SDA         
#define READ_SDA1   PBin(7)  //输入SDA [/mw_shl_code]
硬件入门,初学软件,请多多指教
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2017-6-15 16:58:34 | 显示全部楼层
[mw_shl_code=c,true]         RCC->APB2ENR|=1<<3;//&#207;èê1&#196;üíaéèIO PORTBê±&#214;ó                                                          
        GPIOB->CRH&=0XFFFF00FF;//PB1/11 í&#198;íìê&#228;3&#246;
        GPIOB->CRH|=0X00003300;          
       
        GPIOB->CRL&=0X00FFFFFF;//PB1/11 í&#198;íìê&#228;3&#246;
        GPIOB->CRL|=0X33000000;          [/mw_shl_code]
硬件入门,初学软件,请多多指教
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-6-15 21:29:09 | 显示全部楼层
你试试读写寄存器正常不,可能访问有问题,可能芯片有问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 2017-6-16 10:00:43 | 显示全部楼层
模拟I2C读写函数有没有问题?我也做了FM-RDS接收部分,只不过用的是QN8025
我是可以什么都不说 ,但不可以什么都不做。
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2017-6-26 14:28:35 | 显示全部楼层
正点原子 发表于 2017-6-15 21:29
你试试读写寄存器正常不,可能访问有问题,可能芯片有问题

搞了几天,最后发现是手工焊接的可靠性不行,现在QN8027了
硬件入门,初学软件,请多多指教
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-10-31
在线时间
40 小时
 楼主| 发表于 2017-6-26 14:29:59 | 显示全部楼层
super910906 发表于 2017-6-16 10:00
模拟I2C读写函数有没有问题?我也做了FM-RDS接收部分,只不过用的是QN8025

不知道兄弟你有没有用过QN8027   QN8035?
硬件入门,初学软件,请多多指教
回复

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 2017-6-27 16:05:55 | 显示全部楼层
黄俊 发表于 2017-6-26 14:29
不知道兄弟你有没有用过QN8027   QN8035?

用过,QN8025是接收端用的。QN8027用在发射端了。
我是可以什么都不说 ,但不可以什么都不做。
回复

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-6-16
在线时间
29 小时
发表于 2017-6-27 17:55:55 来自手机 | 显示全部楼层
正点原子 发表于 2017-6-15 21:29
你试试读写寄存器正常不,可能访问有问题,可能芯片有问题

原子哥原来是湘潭的,老乡啊,好崇拜啊|)っ ,学好stm32能找到好工作吗
回复

使用道具 举报

21

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2017-10-21
在线时间
83 小时
发表于 2018-5-21 20:40:20 | 显示全部楼层
黄俊 发表于 2017-6-15 16:58
[mw_shl_code=c,true]         RCC->APB2ENR|=1CRH|=0X00003300;          
       
        GPIOB->CRL&=0X00FFFFFF;//PB1/11 í&#19 ...

老哥,程序能否参考一下,谢谢了
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2014-12-30
在线时间
11 小时
发表于 2019-11-22 21:41:52 | 显示全部楼层
在实验的时候也发现会被锁死,后来将设置频率当中的这一句改动了一下,基本没有出现锁死的情况了
RDA5820_WR_Reg(0X03,temp) ;        //
改为:RDA5820_WR_Reg(0X03,temp|0x0018) ;        //

0X0018 是对03寄存器 的设置,使用不同波段和步进的需要根据你的情况更改.
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 11:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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