【SPI】FM33LC023N的SPI片选CS问题!!
芯片的SPI1的CS是PB8,这里SPI用软件SPI的话,为啥不能把PB8弄出推挽输出,然后拉低 发送数据 拉高停止传输呢!按如下的设置根本CS就不行,芯片不工作,那这样的软件片选CS还有什么用呢,想换成其他IO也肯定是不行了呗!望解答!!
GPIO_InitStruct.pin = FL_GPIO_PIN_8; //SPI1_SSN
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
GPIO_InitStruct.remapPin = FL_DISABLE;
FL_GPIO_Init( GPIOB, &GPIO_InitStruct );
defaultInitStruct.transferMode = FL_SPI_TRANSFER_MODE_FULL_DUPLEX;
defaultInitStruct.mode = FL_SPI_WORK_MODE_MASTER;
defaultInitStruct.dataWidth = FL_SPI_DATA_WIDTH_8B;
defaultInitStruct.clockPolarity = FL_SPI_POLARITY_INVERT;
defaultInitStruct.clockPhase = FL_SPI_PHASE_EDGE2;
defaultInitStruct.softControl = FL_ENABLE;
defaultInitStruct.baudRate = FL_SPI_BAUDRATE_DIV4;
defaultInitStruct.bitOrder = FL_SPI_BIT_ORDER_MSB_FIRST;
//FL_SPI_SetSSNPin(SPI1, FL_SPI_SSN_LOW); //
FL_GPIO_ResetOutputPin(GPIOB , FL_GPIO_PIN_8);
FL_SPI_WriteTXBuff(SPI1, adder);
while(!(FL_SPI_IsActiveFlag_TXBuffEmpty(SPI1)));
while(!(FL_SPI_IsActiveFlag_RXBuffFull(SPI1)));
adder = FL_SPI_ReadRXBuff(SPI1);
FL_SPI_WriteTXBuff(SPI1, data);
while(!(FL_SPI_IsActiveFlag_TXBuffEmpty(SPI1)));
while(!(FL_SPI_IsActiveFlag_RXBuffFull(SPI1)));
data = FL_SPI_ReadRXBuff(SPI1);
FL_GPIO_SetOutputPin(GPIOB , FL_GPIO_PIN_8);
// FL_SPI_SetSSNPin(SPI1, FL_SPI_SSN_HIGH);
这样设置就发送不了数据
本帖最后由 顾博文 于 2021-8-6 12:28 编辑
首先理解下,硬件,软件,与引脚。
你说的软件其实是通过自己输出引脚电平控制。芯片手册上的软件控制是通过SPI CR2寄存器的一个bit SSN,控制高低电平。这不是一个概念。
如果你想要通过自己输出引脚电平来控制,那么引脚配置成推挽输出。置高,置低。这个跟spi没任何关系。自己用示波器看下输出引脚是不是输出正确就行了。 那如果我想用其他IO充当软件CS,推挽输出高低来控制SPI进行通信,这样理论上可行吗 橘子洲头 发表于 2021-8-6 11:13
那如果我想用其他IO充当软件CS,推挽输出高低来控制SPI进行通信,这样理论上可行吗 ...
可以。很多用户就是这么做的。 引脚设置成推挽输出就可以了,实现spi的分时多路复用。spi调试時,用示波器看波形,延时看清情况加 你的defaultInitStruct设置了一堆信息,但是没有Init进去呀,没有起作用,SPI都没打开呢,当然没有数据出去了;P
页:
[1]