Soy nuevo en Cortex M4 y programando en un microcontrolador. Todavía estoy aprendiendo lo básico.
Estoy usando esta placa ( stm32f411re ), aquí está la manual de referencia .
Estoy intentando interrumpir la pulsación de un botón (el botón de usuario que está conectado al puerto "PC13" (pin 2) ). Primero, estoy intentando inicializar el botón para que cuando haga clic en él, se active una excepción.
Aquí está mi código:
void button_init(void)
{
<======== PART THAT I'M TRYING TO UNDERSTAND ========>
// Enable GPIOC clock because BUTTON is connected to GPIOC
RCC->AHB1ENR |= 0x04; // (page 114)
// Configure the mode
GPIOC->MODER &= ~0x3; // GPIO port mode register (page 153)
GPIOC->PUPDR &= ~0x3; // GPIO port pull-up/pull-down register (page 156)
<======== PART THAT I'M TRYING TO UNDERSTAND ========>
//System configuration controller clock enable (page 118)
RCC->APB2ENR |= 0x00004000;
SYSCFG->EXTICR[3] |= (0x02 << 4); // (page 139)
//configure the interrupt for exti 13 line
// EXTI->IMR |= (0x01 << 13)// enable interrupt on EXTI 13
EXTI->IMR |= 0x01;
// EXTI->RTSR |= 0X01;
// EXTI->FTSR |= (0X01 << 13) // sensitive to falling edge
EXTI->FTSR |= 0X01;
//nvic configuration
NVIC->IP[EXTI15_10_IRQn] = 0x00;
NVIC_EnableIRQ(EXTI15_10_IRQn); // EXTI15_10_IRQn must be 40.. please confirm
}
- Aquí están mis preguntas:
¿Estoy en lo cierto con este cálculo ~0x3 = ~(0000 0011) = 1111 1100
?
Entonces, cuando hago GPIOC->MODER &= ~0x3;
, ¿estoy configurando los primeros bits de este registro en 00 (modo de entrada)?
¿Debo configurar otros dos bits de este registro? ¿Cómo puedo saber qué dos bits de este registro están vinculados con mi botón?
Las mismas preguntas con GPIOC->PUPDR &= ~0x3;
Finalmente, quiero habilitar un reloj, así que hago RCC->APB2ENR |= 0x00004000;
: 0x00004000 = 0100 0000 0000 0000
= > Configuré el bit 16 de este registro que es "TIM9 reloj habilitado". ¿Es eso lo que queremos hacer? ¿Por qué TIM9 y no TIM10 o TIM11?
Muchas gracias!