STM32的SPI启动不了,苦呀……

2019-12-20 21:41发布

  1. //------------------------------SPI2------------------------------
  2.         
  3.     SPI_Cmd(SPI2, DISABLE);                                            //必须先禁能,才能改变MODE
  4.     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //两线全双工
  5.     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;            //主
  6.     SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;       //8bit
  7.     SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;              //时钟悬空为低
  8.     SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;            //数据捕获于第1个时钟沿
  9.     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;               
  10.     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;//主频64分步
  11.     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;      ////高位在前
  12.     SPI_InitStructure.SPI_CRCPolynomial = 7;
  13.     SPI_Init(SPI2,&SPI_InitStructure);

  14.     SPI_Cmd(SPI2,ENABLE);
复制代码
  1. unsigned char SPI_WriteByte(unsigned char data)
  2. {
  3.     unsigned char Data = 0;
  4.    
  5.     //Wait until the transmit buffer is empty
  6.     while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
  7.     // Send the byte
  8.     SPI_I2S_SendData(SPI2,data);
  9.    
  10.     //Wait until a data is received
  11.     while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
  12.     // Get the received data
  13.     Data = SPI_I2S_ReceiveData(SPI2);
  14.    
  15.     // Return the shifted data
  16.     return Data;
  17. }
复制代码
  1.     GPIO_InitStructure.GPIO_Pin = SPI2_CS_PIN | SPI2_SCK_PIN | SPI2_MISO_PIN | SPI2_MOSI_PIN;
  2.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  3.     GPIO_Init(GPIOB, &GPIO_InitStructure);
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
LXM_0922
1楼-- · 2019-12-21 23:29
CS设置成输出,MISO设置成输入,还要把SPI的时钟打开,GPIO的时间也要打开。
ralfak
2楼-- · 2019-12-22 00:35
简单的问一下,SPI时钟打开了没有
STM32所有的外设都要开时钟,哪怕是个I/O口
renpeng009
3楼-- · 2019-12-22 03:24
恐怕是别的原因吧,我就遇到过,一直以为是SPI不好使,实际上是自己在别的地方疏忽了
worksnfkpynn99
4楼-- · 2019-12-22 08:45
 精彩回答 2  元偷偷看……
cyf860503
5楼-- · 2019-12-22 09:06
你这个复制的代码,问题似乎很多啊:
1、SPI2 时钟源是否开启?
2、你的片选信号设置为软件见片选,却在IO初始化时,用做GPIO_Mode_AF_PP输出。(这点不一定,要看你的具体要求,但是你作为主机,这种用法很少见)
3、MISO 应该设为输入。
自己多研究一下吧
worksnfkpynn99
6楼-- · 2019-12-22 14:59
cyf860503 发表于 2012-5-5 15:02

TEK0000.JPG (263.81 KB, 下载次数: 0)

下载附件

2012-5-5 15:26 上传



一周热门 更多>