OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 163|回复: 2

关于利用AVR硬件SPI驱动NRF905的问题

[复制链接]

  离线 

2

主题

7

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-4-17
在线时间
1 小时
发表于 2018-4-25 20:46:38 | 显示全部楼层 |阅读模式
20金钱
关于利用AVR硬件SPI驱动NRF905的问题

各位大神,本人是一名在读大学生,自学的AVR。最近正在用nrf做一个项目,但是遇到了一个瓶颈,经过两个星期的修改和上网查资料还是没能解决。

具体问题如下:

我利用AVR自带的硬件SPI引脚来向nrf905写入数据时,始终无法写入配置信息(利用示波器测经过初始化之后的nrf的VCLK引脚一直输出的是频率为400KHZ的波);后来实在没办法,用IO口模拟的SPI对nrf905进行操作,居然成功了。稀里糊涂的


下面是我写硬件SPI的初始化部分的程序,请大神抽空帮我看一下,为什么我用硬件SPI驱不起来?
                  相关引脚连接如下:
                                              CD--------------PD2
                                              AM-------------PD3
                                              DR-----------------PD4

                                              CE-----------------PD5
                                              PWR--------------PD6
                                              TWEN-------------PD7

                                              CS-----------------PB4(ss)
                                              MISO--------------PB
(MISO)                                            
                                              SCK-----------------PB7(SCK)
                                              MOSI--------------PB(
MOSI)
#include <asf.h>
#include <util/delay.h>

#define uchar unsigned char
#define uint unsigned int


//*******************定义命令字**********************
#define WC 0x00  // 写配置命令
#define RC 0x10   // 读配置命令
#define WTP 0x20   // 写发送命令。
#define RTP 0x21  //读发送命令
#define WTA 0x22  // 写发送地址
#define RTA 0x23
#define RRP 0x24

uchar Rfconfig[10]={0x4c/*433.3MHZ*/,0x0e,0x44,0x04,0x04,0xe7,0xe7,0xe7,0xe7,0xde};//nrf905初始化

void spi_init(void)
{     
    //配置相应的寄存器
    SPCR = 0x5f; //0b0101 1111
    SPSR = 0x00; //SPI2x=0
}
void spi_write(uint data)        //data占一个字节(8位)
{
    PORTB &= ~(1 << 4);            //使能spi器件(ss引脚拉低,启动通讯)
    SPDR=data;                    //发送数据
    while(!(SPSR & (1<<SPIF))); //等待发送完毕
    PORTB |= (1 << 4);            //禁止spi器件*/
}

void ini_system(void)
{        
    DDRB=0b10111111;   
    PORTB=0b01111111;
    DDRD=0xe3;//1110 0011
    PORTD=0x5f;//0101 1111     
    spi_init();
    spi_write(WC);//写配置命令
    for(uchar i=0;i<10;i++)
    {
        spi_write(Rfconfig);
    }
}

void main()
{
    board_init();
    ini_system();
    while(1)
    {        
    }
}


回复

使用道具 举报

  离线 

2

主题

7

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-4-17
在线时间
1 小时
 楼主| 发表于 2018-4-25 20:48:49 | 显示全部楼层
问题还未解决,求大佬施以援手
回复

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128161
金钱
128161
注册时间
2010-12-1
在线时间
1132 小时
发表于 2018-4-27 01:54:33 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-6-20 17:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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