Прерывания в STM32F103

Посмотрел код keyboard.c и вспомнилось, что не так давно встретил интересный "косяк", похожий на то, что видно в данном коде.

Суть в чем: была так же процедурка для инициализации железа и были так же прописаны глобальные для данного .с файла (не знаю как это по-умному называется) переменные для инициализации NVIC, EXTI и GPIO. И ни в какую прерывание работать не хотело. А вот когда описание переменной EXTI перенес в функцию инициализации, где она и использована была - все заработало. Что это было и почему, у меня опыта еще не хватает разобраться. Да и особо не парился я с этим, т.к. вскоре переписал инициализацию без использования SPL.

т.е. сейчас:

#include  "keyboard.h"

GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

void init_keyboard()
{

надо попробовать изменить на:

#include  "keyboard.h"

void init_keyboard() {
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

Если кто пояснит суть явления, будет хорошо :)

PS: кстати, а периферия для работы EXTI включена?

не помню как в F103, кажется такое должно быть:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);