HAL_GPIO_EXTI_Callback関数が動かない
主題の通り、NUCLEO-G031K8を使って外部割り込みを試みたが、HAL_GPIO_EXTI_Callback関数を呼び出してるのに全く割り込んでくれない。
Core\Src\main.c
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_0)
{
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
}
else
{
__NOP();
}
}
/* USER CODE END 4 */
公式のチュートリアルそのままなのに、動いてくれない。
そもそもHAL_GPIO_EXTI_Callback関数が存在しなかった。
試しに、HAL_GPIO_EXTI_Callback関数を検索したら全くヒットしない。
おかしいと思ってstm32g0xx_hal_gpio.cを覗いてみたらそもそもHAL_GPIO_EXTI_Callback関数が存在しなかった。
そりゃ動きません。
Drivers\STM32G0xx_HAL_Driver\Src\stm32g0xx_hal_gpio.c
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if (__HAL_GPIO_EXTI_GET_RISING_IT(GPIO_Pin) != 0x00u)
{
__HAL_GPIO_EXTI_CLEAR_RISING_IT(GPIO_Pin);
HAL_GPIO_EXTI_Rising_Callback(GPIO_Pin);
}
if (__HAL_GPIO_EXTI_GET_FALLING_IT(GPIO_Pin) != 0x00u)
{
__HAL_GPIO_EXTI_CLEAR_FALLING_IT(GPIO_Pin);
HAL_GPIO_EXTI_Falling_Callback(GPIO_Pin);
}
}
/**
* @brief EXTI line detection callback.
* @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line.
* @retval None
*/
__weak void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(GPIO_Pin);
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Rising_Callback could be implemented in the user file
*/
}
/**
* @brief EXTI line detection callback.
* @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line.
* @retval None
*/
__weak void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(GPIO_Pin);
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Falling_Callback could be implemented in the user file
*/
}
解決
今回は立ち下がりで割り込んでほしかったので、HAL_GPIO_EXTI_Falling_Callback関数を使った。
Core\Src\main.c
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_0)
{
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
}
else
{
__NOP();
}
}
/* USER CODE END 4 */
これで動いてくれた。良かった良かった。