OpenEdv-开源电子网

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

SPI不运行

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2013-10-12
在线时间
1 小时
发表于 2014-3-18 17:22:50 | 显示全部楼层 |阅读模式

我的配置如下,为什么不运行 
void SPI1_Init(void)
{
    /*定义结构体,下面NSS配置时也要用到GPIO所以这里一起定义*/
SPI_InitTypeDef   SPI_InitStructure;
GPIO_InitTypeDef  GPIO_InitStructure;


/* 使能 SPI1 & GPIOA &GPIOB时钟 */
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1|RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);
  RCC->APB2ENR |= (1<<0); //AFIO
 RCC->APB2ENR |= (1<<3); //GPIOB 
 RCC->APB2ENR |= (1<<4); //GPIOC
 RCC->APB2ENR |= (1<<12); //SPI

/* Configure GDO0 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);

/* Configure SPI1 pins:  SCK and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure SPI1 pins:  MISO ---------------------------------------*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

//SPI1 NSS for   PA4                   
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); 


   
/* SPI1 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; //SPI1设置为一线发送
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                    //设置SPI1为主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                //串行时钟在不操作时,时钟为低电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                //第一个时钟沿开始采样数据
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由软件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; //定义波特率预分频的值:波特率预分频值为8
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;    //数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7;    //CRC值计算的多项式
SPI_Init(SPI1, &SPI_InitStructure); 
/* Enable SPI1  */
SPI_Cmd(SPI1, ENABLE); //使能SPI1外设
SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE |SPI_I2S_IT_RXNE, ENABLE);   //使用发送空,接收非空中断
 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-18 17:42:43 | 显示全部楼层
软仿,看寄存器状态,找问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-19 08:46:48 | 显示全部楼层
1、你用硬件的SPI,CLK MISO,MOSI要设置成复用推挽输出吧
2、GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;这个模式应该是这个吧GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2013-10-12
在线时间
1 小时
 楼主| 发表于 2014-3-19 09:32:11 | 显示全部楼层
还是不行,


配置的都我写的一样
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2013-10-12
在线时间
1 小时
 楼主| 发表于 2014-3-19 09:33:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
还是不行,我仿真了,看了配置
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-19 18:00:55 | 显示全部楼层
那不会是你外设有问题吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 16:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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