OpenEdv-开源电子网

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

模拟SPI配置问题

[复制链接]

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
发表于 2016-8-15 14:21:03 | 显示全部楼层 |阅读模式
1金钱
void SPI_Config(void)
{
    //声明结构体
    GPIO_InitTypeDef GPIO_InitStructure1;

    //打开相应外设时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

    /******配置SCK与MOSI引脚******/
    GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_11;   //SCK
    GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_Out_PP;       //推挽输出
    GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz;      //输出时钟50MHZ
    GPIO_Init(GPIOA,&GPIO_InitStructure1);                  //初始化


    /******配置MISO引脚*****/
    GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_12;              //MISO
    GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_IPD ;          //xia拉输入
    GPIO_Init(GPIOA,&GPIO_InitStructure1);                //初始化

    /*配置CS为推挽输出*/
    GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_9;              // CS
    GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_Out_PP;       //推挽输出
    GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz;      //输出时钟50MHz
    GPIO_Init(GPIOB,&GPIO_InitStructure1);                  //初始化

    SPI_CS_HIGH();
    SET_SCK();

}

int ReadWrite()
{
    int data_out=0;
    uint8_t i = 0;
    SPI_CS_LOW();
  
    for( i= 0; i <16; i++ )
    {
        data_out<<=1;
         CLEAR_SCK();
        if(GET_ADXL_SDO()==1)
        {
            data_out++;
        }
        else
            data_out&=0xfffe;
      
        SET_SCK();
    }
    //返回读出的数据
    SPI_CS_HIGH() ;
    return data_out;
}
只有上个接口cs、sck、miso,时序图都是下拉。
片选cs先高电平转低电平
然后sck高电平转低电平(我不清楚需不需要人为控制)
读取数据
接着先拉高sck,再拉高CS.
问题在于我不管输入给的是上拉下拉浮空等,都接收不到数据。(时序里的间隙几ns,无需考虑)
QQ图片20160815141904.png

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-15 14:21:04 | 显示全部楼层
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 14:22:27 | 显示全部楼层
这是第二个模拟spi,双方引脚不冲突。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-15 16:19:08 | 显示全部楼层

t5、t6两个延时,一点都没有考虑。


回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 16:20:46 | 显示全部楼层
xuande 发表于 2016-8-15 16:19
t5、t6两个延时,一点都没有考虑。

仅10ns也考虑?
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-15 16:22:23 | 显示全部楼层


你确定手册说10ns?


回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 16:30:21 | 显示全部楼层
xuande 发表于 2016-8-15 16:22
你确定手册说10ns?

0.4*Tsclk
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-15 16:42:36 | 显示全部楼层


我怎么知道Tsclk是多少?


回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 16:45:45 | 显示全部楼层
xuande 发表于 2016-8-15 16:42
我怎么知道Tsclk是多少?

SET_SCK();
CLEAR_SCL();
程序控制的,时间肯定超过0ns
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 16:47:11 | 显示全部楼层
xuande 发表于 2016-8-15 16:42
我怎么知道Tsclk是多少?

之前试过延时都给了50us,没成功
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-15 16:50:47 | 显示全部楼层

要用手册上的数据说话。


回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 16:58:37 | 显示全部楼层
xuande 发表于 2016-8-15 16:50
要用手册上的数据说话。

频率最低20MHz,一个时钟周期是tsclk
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 16:59:46 | 显示全部楼层
xuande 发表于 2016-8-15 16:50
要用手册上的数据说话。

前面程序配置是50MHz
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 17:23:09 | 显示全部楼层
xuande 发表于 2016-8-15 16:50
要用手册上的数据说话。

大哥,可有延时单位为ns的函数
回复

使用道具 举报

11

主题

34

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-8-15
在线时间
22 小时
 楼主| 发表于 2016-8-15 17:29:15 | 显示全部楼层
xuande 发表于 2016-8-15 16:50
要用手册上的数据说话。

大哥搞错了,有些参数最大20ns,我这50MHz再加上一些语句,肯定超了20ns
大哥,模拟SPI能设置50Mhz以上吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 16:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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