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
发生什么事了?你知道我应该看什么吗?谢谢StefanUsart 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);