OpenEdv-开源电子网

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

用51模拟IO让NRF2401A收发正常,移植到STM32也是IO口模拟,却收不到?疑问

[复制链接]

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1154
金钱
1154
注册时间
2012-3-4
在线时间
80 小时
发表于 2013-11-9 22:37:43 | 显示全部楼层 |阅读模式
现在用的51在发射,STM32写接收程序,怎么都收不到,只是把51上的程序移过来,怎么会出问题呢?我注意了IO方向的,都弄好了。不知道是什么问题呢?延时函数都对了一遍,子函数都弄了。好烦,一下午一晚上了。请教大家。<br />
<br />
<div>int main(void)</div>
<div>{<span class="Apple-tab-span" style="white-space:pre;">                </span></div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>u8 t=0,temp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>&nbsp;</div>
<div>&nbsp; <span class="Apple-tab-span" style="white-space:pre;">        </span>Stm32_Clock_Init(9);//系统时钟设置</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>delay_init(72);<span class="Apple-tab-span" style="white-space:pre;">                </span>//延时初始化 &nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>LED_Init();</div>
<div>&nbsp; &nbsp;&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>configIO();//配置IO默认是DAT输出</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>/*无线模块设置*/</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>ower_up();//wireless上电</div>
<div><br />
</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>LED1=0;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>delay_ms(500);</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>LED1=1;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>Nrf2401Init();</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>delay_ms(500);</div>
<div><br />
</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>DATin();//DAT上拉输入读数据</div>
<div>&nbsp; <span class="Apple-tab-span" style="white-space:pre;">        </span>while(1)&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>{ &nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>temp = ReceiveData();</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp; <span class="Apple-tab-span" style="white-space:pre;">        </span>if(temp==1)</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>LED1=0;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>delay_ms(500);</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>LED1=1;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>delay_ms(500);</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div>
<div>&nbsp; <span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp; &nbsp; &nbsp;<span class="Apple-tab-span" style="white-space:pre;">                                        </span>&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp; &nbsp;<span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre;">        </span>}<span class="Apple-tab-span" style="white-space:pre;">                                                                                        </span> &nbsp; &nbsp;</div>
<div>}</div>
<br />
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

557

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165051
金钱
165051
注册时间
2010-12-1
在线时间
2103 小时
发表于 2013-11-9 23:24:26 | 显示全部楼层
也是模拟SPI?
<br>检查IO设置正常不吧!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1154
金钱
1154
注册时间
2012-3-4
在线时间
80 小时
 楼主| 发表于 2013-11-10 00:14:14 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>这个是我写的
<br>#define&nbspOW_UP        PBout(9)
<br>#define&nbsp;CE                PBout(12)
<br>#define&nbsp;CS                PBout(11)
<br>#define&nbsp;DR1                PBin(10)
<br>#define&nbsp;SCK                PBout(13)
<br>#define&nbsp;DATout        PBout(15)
<br>#define&nbsp;DATin        PBin(15)
<br>
<br>
<br>/*配置普通IO口来初始化NRF2401A,防止SPI出错*/
<br>void&nbsp;configIO(void)
<br>{
<br>&nbsp;&nbsp;&nbsp;&nbsp;RCC-&gt;APB2ENR|=1&lt;&lt;3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PORTB时钟使能
<br>        GPIOB-&gt;CRH&=0X0F00000F;
<br>        GPIOB-&gt;CRH|=0X30333830;//PB9&nbsp;10(in)&nbsp;11&nbsp;12&nbsp;13&nbsp;15推挽输出&nbsp;
<br>        GPIOB-&gt;ODR=1&lt;&lt;2;//10输入上拉        &nbsp;&nbsp;&nbsp;&nbsp;
<br>       
<br>}
<br>
<br>void&nbspDATin(void)
<br>&nbsp;&nbsp;&nbsp;&nbsp;{
<br>        GPIOB-&gt;CRH&=0X0FFFFFFF;
<br>        GPIOB-&gt;CRH|=0X80000000;//PB15&nbsp;输入
<br>        GPIOB-&gt;ODR=1&lt;&lt;7;//15输入上拉&nbsp;DAT
<br>        }
<br>void&nbspDATout(void)
<br>&nbsp;&nbsp;&nbsp;&nbsp;{
<br>        GPIOB-&gt;CRH&=0X0FFFFFFF;
<br>        GPIOB-&gt;CRH|=0X30000000;//PB15&nbsp;推挽输出&nbsp;
<br>        }
回复 支持 反对

使用道具 举报

557

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165051
金钱
165051
注册时间
2010-12-1
在线时间
2103 小时
发表于 2013-11-10 00:30:28 | 显示全部楼层
回复【3楼】l1234564555:
<br>---------------------------------
<br>这配置没问题.检查其他地方是否有问题.
<br>可以用示波器看看IO波形,就最好了,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1154
金钱
1154
注册时间
2012-3-4
在线时间
80 小时
 楼主| 发表于 2013-11-10 01:12:18 | 显示全部楼层
回复【4楼】正点原子:
<br>---------------------------------
<br>知道问题了,无论是发送还是接收必须写数据(配置模式),所以OUT&nbsp;IN应该在读写字节的子函数里打开,我才开始以为接收就不需要写。现在遇到一个超级奇怪的问题,DR1口是1通道收到数据高电平。但是同一个程序51可以反复循环灯闪烁,而stm32这个板子就只收到一个数据,经测试,死在这里。
<br>
<br>U8&nbsp;ReceiveData(void)
<br>{
<br>        U8&nbsp;i=0;
<br>        SetRxMode();
<br>        CE&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;
<br>       
<br>                                       
<br>        while(DR1&nbsp;==&nbsp;0);//也就是收到一次数据后,DR1竟然一直是0了,然而这个不科学。
<br>       
<br>                LED1=0;
<br>                &nbsp;delay_ms(500);
<br>        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED1=1;
<br>                &nbsp;delay_ms(500);
<br>        i&nbsp;=&nbsp;0;
<br>        while(DR1)
<br>        {       
<br>                RxBuf&nbsp;=&nbsp;ReadByte();
<br>                i++;
<br>                if&nbsp;(i&nbsp;==&nbsp;4)
<br>                break;
<br>        }
<br>       
<br>        CE&nbsp;=&nbsp;0;
<br>        return&nbsp;1;
<br>}
回复 支持 反对

使用道具 举报

雾霭 该用户已被删除
发表于 2016-12-2 22:53:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-30 20:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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