2020-08-05 2:14 AM
Hey, I'm using a STM32H743ZI. I'm trying to implement a callback function in my code but when I implement the IRQ_handler, the USB_CDC_FS stops working - when I remove the IRQ handler it works just fine.
The computer recognizes the USB port but I can't transmit/receive data.
Here's the pins defined for the USB:
And for the callback function I'm using EXTI_6 in the pin PB6.
I followed the example provided in the repository and here's the code:
static void EXTI9_5_IRQHandler_Config(void)
{
  GPIO_InitTypeDef   GPIO_InitStructure;
 
  /* Enable GPIOC clock */
  __HAL_RCC_GPIOB_CLK_ENABLE();
 
  /* Configure PC.13 pin as input floating */
  GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStructure.Pull = GPIO_PULLDOWN;
  GPIO_InitStructure.Pin = GPIO_PIN_6;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
 
  /* Enable and set EXTI lines 9 to 5 Interrupt to the lowest priority */
  HAL_NVIC_SetPriority(EXTI9_5_IRQn, 2, 0);  //I've changed the priority up until 15. didn't work
  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}
 
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin){
 if (GPIO_Pin == GPIO_PIN_6){
	 myfunction();
 }
 else{
	 __NOP();
 }
};I've tried set the priority to the loest possible ( HAL_NVIC_SetPriority(EXTI9_5_IRQn, 15, 0)) and still the USB_CDC_FS doesn't seem to respond.
Edit: Since my main file is a .cpp file I also tried C linkage
extern "C" void EXTI9_5_IRQHandler_Config(void)
{
  GPIO_InitTypeDef   GPIO_InitStructure;
 
  /* Enable GPIOC clock */
  __HAL_RCC_GPIOB_CLK_ENABLE();
 
  /* Configure PC.13 pin as input floating */
  GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStructure.Pull = GPIO_PULLDOWN;
  GPIO_InitStructure.Pin = GPIO_PIN_6;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Enable and set EXTI lines 9 to 5 Interrupt to the lowest priority */
   HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
   HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
}Unfortunately it didn't solve my issue. The IRQ is iomplemented but the main program gets stuck in a while loop, as if the MCU just stops working.
The systick priority is set to 0:
#define TICK_INT_PRIORITY      ((uint32_t)0U) /*!< tick interrupt priority */SOLVED:
For the one's who might come up with this problem, check the startup_stm32h743xx.s file.
In .s the file the exti9_5 handler was being declared as EXTI9_5_IRQHandler instead of EXTI9_5_IRQHandler_Config ans I did in the man file.
I changed the function name in the main.cpp to match the name in the .s file and it's working
