STM32F UART在用SPI写入FRAM(I2C写入EEPROM)后停止接收

STM32F UART在用SPI写入FRAM(I2C写入EEPROM)后停止接收,stm32,uart,i2c,spi,Stm32,Uart,I2c,Spi,我确实在STM32F405上使用了UART,很好(接收和发送) 现在,我在我的电路中添加了一个外部的FRAM(FM25V02A),并使用SPI对其进行读写。阅读效果很好。但是在写入FRAM(传输完成,数据存储起来)之后,UART不再接收数据!?然而,UART仍然像以前一样传输数据 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {...} 中断回调将不再被触发 这就是我写FRAM的方式 opcodeWREN[0] = 0b0000

我确实在
STM32F405
上使用了
UART
,很好(接收和发送)

现在,我在我的电路中添加了一个外部的
FRAM
FM25V02A
),并使用SPI对其进行读写。阅读效果很好。但是在写入
FRAM
(传输完成,数据存储起来)之后,
UART
不再接收数据!?然而,UART仍然像以前一样传输数据

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{...}
中断回调将不再被触发

这就是我写
FRAM
的方式

opcodeWREN[0] = 0b00000110;
opcodeWRITE[0] = 0b00000010;

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET); //chip select
HAL_SPI_Transmit(&hspi2, opcodeWREN,1,5);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2, opcodeWRITE,1,5);
HAL_SPI_Transmit(&hspi2, sendFRAMBufferByte,240,5); //transmitting 240byte of data
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET);
我确实有同样的问题,将
I2C
写入
EEPROM


发生什么事了?你知道我应该看什么吗?谢谢Stefan

Usart spi和i2c最好使用寄存器编程,因为您可以控制硬件。使用库很容易出现库错误。我过于关注中断优先级和抢占问题,在数据输入解析器中没有看到(最明显的)阻塞代码。与“store to fram”命令一起发送到UART的数据确实阻塞了解析器。所以它现在可以工作了…您是否尝试使用非DMA版本的UART调用。可能是DMA冲突?
opcodeWREN[0] = 0b00000110;
opcodeWRITE[0] = 0b00000010;

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET); //chip select
HAL_SPI_Transmit(&hspi2, opcodeWREN,1,5);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2, opcodeWRITE,1,5);
HAL_SPI_Transmit(&hspi2, sendFRAMBufferByte,240,5); //transmitting 240byte of data
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET);