OpenEdv-开源电子网

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

spi初始化的问题

[复制链接]

10

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2012-2-21
在线时间
1 小时
发表于 2014-4-13 18:41:59 | 显示全部楼层 |阅读模式
下面是spi的初始化函数,按照某些资料PA6在主模式下本应该配置成浮空输入的,怎么配置成复用推挽输出也行,就是想不通,有谁能解答,谢谢!
 void SPIx_Init(void)
 { 
 SPI_InitTypeDef  SPI_InitStructure;
 GPIO_InitTypeDef GPIO_InitStructure;
 //RCC->APB2ENR|=1<<2;       //PORTA时钟使能  
 //RCC->APB2ENR|=1<<12;      //SPI1时钟使能
 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE ); 
   
 //这里只针对SPI口初始化
 //GPIOA->CRL&=0X000FFFFF;
 //GPIOA->CRL|=0XBBB00000;//PA5.6.7复用     
 //GPIOA->ODR|=0X7<<5;    //PA5.6.7上拉
 /* Configure SPI1 pins: SCK, MISO and MOSI */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 /* Configure I/O for Flash Chip select */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  //SPI CS
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 
 /* Deselect the FLASH: Chip Select high */
 GPIO_SetBits(GPIOA,GPIO_Pin_2);
 
 //SPI1->CR1|=0<<10;//全双工模式 
 //SPI1->CR1|=1<<9; //软件nss管理
 //SPI1->CR1|=1<<8; 
 
 //SPI1->CR1|=1<<2; //SPI主机
 //SPI1->CR1|=0<<11;//8bit数据格式 
 //SPI1->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1
 //SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1 
 //SPI1->CR1|=7<<3; //Fsck=Fcpu/256
 //SPI1->CR1|=0<<7; //MSBfirst  
 /* SPI1 configuration */
 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;  //设置SPI工作模式:设置为主SPI
 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;  //设置SPI的数据大小:SPI发送接收8位帧结构
 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;  //选择了串行时钟的稳态:时钟悬空高
 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿
 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;  //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;  //定义波特率预分频的值:波特率预分频值为256
 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式
 SPI_Init(SPI1, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
 
 //SPI1->CR1|=1<<6; //SPI设备使能
 /* Enable SPI1  */
 SPI_Cmd(SPI1, ENABLE); //使能SPI外设
 
 SPIx_ReadWriteByte(0xff);//启动传输  
 }

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-13 21:03:43 | 显示全部楼层
看IO基本结构图,目测,除了推挽输出,其他任何输出/输入方式,都是可以用来作为MISO输入的。



我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2012-2-21
在线时间
1 小时
 楼主| 发表于 2014-4-27 19:57:28 | 显示全部楼层
当我们把一个输入输出脚设置成输出时也可读取它的状态,是不是因为这样的原因输出引脚也可以当输入引脚使用。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-27 20:31:11 | 显示全部楼层
回复【3楼】ZXCZKY8181:
---------------------------------
你作为推挽输出的时候,外部可不那么容易改变你的IO状态的....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
发表于 2014-4-27 22:35:57 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
越看越纳闷了,怎么 SPI1 pins: SCK, MISO and MOSI 都配置成输出了?什么道理?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-28 00:38:52 | 显示全部楼层
回复【5楼】308709362:
---------------------------------
SCK,MOSI,设置复用输出,很好理解吧?
MISO,因为我在1楼贴出来的图,就算设置复用输出,输入通路(红色线条标注),也是可以正常工作的,所以也可以正常工作。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-11 08:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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