STM32脱硝SPI然后再脱硝SPI不';行不通
在我的STM32F103C8T6上,我正在使用SPI进行通信,有一刻我需要禁用它,制作引脚GPIO并将其降低。一段时间后,我们需要从GPIO中释放它们,并将SPI函数返回给它们,然后进行更多的通信 代码是用最新的STM32Cube生成的,所有的工作都是用SPI实现的 这里是C-Pseudo,只是为了先解释一下,下面是用来做工作的函数STM32脱硝SPI然后再脱硝SPI不';行不通,stm32,spi,Stm32,Spi,在我的STM32F103C8T6上,我正在使用SPI进行通信,有一刻我需要禁用它,制作引脚GPIO并将其降低。一段时间后,我们需要从GPIO中释放它们,并将SPI函数返回给它们,然后进行更多的通信 代码是用最新的STM32Cube生成的,所有的工作都是用SPI实现的 这里是C-Pseudo,只是为了先解释一下,下面是用来做工作的函数 main(){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DMA_
main(){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_SPI1_Init();
while(1){
SPI1_TURN_OFF();// It seems (maybe) to work because I can use pins as GPIO
// use gpio pins for some work
SPI1_TURN_ON(); // Registers look ok but it doesn't work
COMMUNICATE_OVER_SPI(); // Does't work
}
}
这两个函数应该关闭SPI并使其重新启动
static void SPI1_TURN_OFF(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, PIN_X |PIN_Y, GPIO_PIN_RESET);
HAL_SPI_DeInit(&hspi1);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, PIN_A|PIN_B|PIN_C, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = PIN_A|PIN_B|PIN_C;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
static void SPI1_TURN_ON(void){
HAL_GPIO_WritePin(GPIOB, PIN_X |PIN_Y, GPIO_PIN_SET);
HAL_GPIO_DeInit(GPIOB, PIN_A|PIN_B|PIN_C);
MX_SPI1_Init();
}
我没有使用STM32 HAL文档中描述的一般顺序之外的任何东西,这会出现什么问题
*备注:实际上没有任何其他代码对此进行操作,它在这里的外观遵循业务逻辑中的相同逻辑
感谢Tnx的提前帮助 我已经找到了原因,所以:
Tnx各位。请在您的问题中添加
MX\u SPI1\u Init
和MX\u GPIO\u Init
。在我看来,您正在重新设计GPIO,但没有为SPI工作重新初始化它。