2024-01-14 5:52 AM
Hi,
I have an external SPI 8 channel ADC which is connected to the STM32,one of timers would generate a 32KHz 50% pwm signal which is connected to the ADC convert pin, the ADC has a busy pin which is connected to the EXTI0 of the MCU.
The plan is to use the EXTI0 to trigger 8 16bit SPI reads from the ADC, so after gathering 640 samples I would get an interrupt, to process the incoming data, since Interrupting the CPU 32000 times per second would not allow any other meaning full job to be done,
So I have done like this
Pin A0 configured as EXTI0
SPI DMA settings
SPI NVIC settings
my code is like this
uint8_t SPISend = 1;
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi){
if (hspi->Instance == SPI2) {
SPISend = 1;
}
}
int main(void){
uint8_t tx[5120]={0,0,1,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
uint8_t rx[5120]={0};
//init IO with CubMX
while (1){
if(SPISend == 1){
HAL_SPI_TransmitReceive_DMA(&hspi2,tx,rx,5120);
}
}
}
This code works only when I enable the EXTI interrupt, which would ruin the hole prepose of eliminating the use of interrupts,
Is there any work around this so I would reduce the CPU overhead and interrupts, so the CPU could do other time critical tasks.
2024-01-15 6:01 AM
Hello @ali_dehbidi,
Please check this thread
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.