Я работаю с процессором STM32L073RZ под управлением MbedOS 5.11.2. В конце концов я стремлюсь заставить это работать в режиме очень низкого энергопотребления (режим STOP
), который будет вызываться либо прерыванием RTC, либо прерыванием от периферийного устройства на выводе PA_0
(WAKEUP_PIN_1
). В данный момент я просто пытаюсь настроить PA_0
как прерывание, используя STM32 HAL
API. Пожалуйста, смотрите мой код ниже:
#include "mbed.h"
#define LOG(...) pc.printf(__VA_ARGS__); pc.printf("\r\n");
DigitalOut led(LED1);
Serial pc(USBTX, USBRX);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
led = !led;
}
int main()
{
pc.baud(9600);
led = 1;
// GPIO SETUP
LOG("Enabling GPIO port A clock");
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
LOG("Initialising PA_0");
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// NVIC SETUP
LOG("Setting IRQ Priority");
HAL_NVIC_SetPriority(EXTI0_1_IRQn, 0, 1); // Priorities can be 0, 1, 2, 3 with lowest being highest prio
LOG("Enabling IRQ");
HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
LOG("Going into STOP mode");
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE);
}
Как видите, код разбит на два раздела: настройка GPIO и настройка NVIC. Моя проблема заключается в следующем:
Если я выполняю настройку GPIO перед настройкой NVIC, то программа, кажется, зависает на HAL_NVIC_SetPriority()
, однако, если я выполняю настройку NVIC перед настройкой GPIO, тогда, кажется, код зависает на HAL_NVIC_EnableIRQ()
.
Я полностью озадачен тем, что является причиной этого. Любое понимание очень ценится.