我想知道 HAL 库中是否有一个用户可定义的内置 ISR 函数,该函数在 STM32L4xx MCU 上的 SPIx Rx 缓冲区中接收到一个字节后立即触发?例如,作为启动测试,我想通过 SPI2 从主 STM32L452 核板发送一个字节(0xBC)到从站 STM32L452 核板。一旦从板接收到该字节,它就会闪烁 LED2,并将不同的字节 (0xCD) 发送回主板。一旦主机接收到字节,它会闪烁 LED2 作为确认。我已将两块板初始化为主/从,启用 DMA 和全局中断,使用 MXcube 每次传输 8 位。我可以使用 HAL_SPI_Transmit_DMA() 和 HAL_SPI_Receive_DMA() 函数和写入主程序的 while(1) 部分的延迟来实现我想要的(如下所示)。然而,
主码:
uint8_t spiDataReceive = 0;
uint8_t spiDataTransmit = 0xBC;
while(1) {
if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)) {
//Transmit byte 0xBC to Slave and Receive Response
HAL_SPI_Transmit_DMA(&hspi2, &spiDataTransmit, 1);
HAL_Delay(20);
HAL_SPI_Receive_DMA(&hspi2, &spiDataReceive, 1);
if(spiDataReceive == 0xCD) {
flashLED2();
spiDataReceive = 0x00;
}
}
}
奴隶代码:
uint8_t spiDataReceive = 0;
uint8_t spiDataTransmit = 0xCD;
while(1) {
HAL_SPI_Receive_DMA(&hspi2, &spiDataReceive, 1);
HAL_Delay(10);
if(spiDataReceive == 0xBC) {
HAL_SPI_Transmit_DMA(&hspi2, &spiDataTransmit, 1);
flashLED2();
spiDataReceive = 0x00;
}
}