Soy nuevo en Cortex M4 y programación en un microcontrolador. Todavía estoy aprendiendo lo básico.
Estoy usando esta placa ( stm32f411re ), aquí está el manual de referencia .
Estoy tratando de hacer una interrupción al presionar un botón (el botón de usuario que está conectado al puerto "PC13" (pin 2) ). Primero, estoy tratando de inicializar el botón para que cuando haga clic en él, 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
}
¿ Estoy en lo cierto con este cálculo ~0x3 = ~(0000 0011) = 1111 1100
?
Entonces, cuando lo haga 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?
Mismas preguntas conGPIOC->PUPDR &= ~0x3;
Finalmente, quiero habilitar un reloj, así que lo hago RCC->APB2ENR |= 0x00004000;
: 0x00004000 = 0100 0000 0000 0000
=> Configuré el bit 16 de este registro, que es "habilitar reloj TIM9". ¿Es eso lo que queremos hacer? ¿Por qué TIM9 y no TIM10 o TIM11?
¡Muchas gracias!
¿Tengo razón con este cálculo ~0x3 = ~(0000 0011) = 1111 1100?
Casi, stm32 es un procesador de 32 bits por lo que será: 1111 1111 1111 1111 1111 1111 1111 1100
Entonces, cuando hago GPIOC->MODER &= ~0x3;, ¿estoy configurando los primeros bits de este registro en 00 (modo de entrada)?
Para la descripción de cada registro, debe consultar este Manual de referencia . Para el registro MODER de PORTC, consulte la página 153. Muestra que cada grupo de 2 bits del registro establece las propiedades de un pin específico en ese puerto. '00' es para la entrada como se indica en la página siguiente. Su escritura de GPIOC->MODER &= ~0x3; dará como resultado que PC0 se configure como entrada. Lo que quieres es GPIOC->MODER &= ~(0x3 << 26); Esto establecerá los bits 26 y 27 en 0, lo que se relaciona con el pin 13.
¿Debo configurar otros dos bits de este registro?
Solo por este pin, no tiene que escribir más en este registro específico.
¿Cómo puedo saber qué dos bits de este registro están vinculados con mi botón?
En la página 154 dice
Bits 2y:2y+1 MODERy[1:0]: Bits de configuración del puerto x (y = 0..15)
esto le da la relación de pin a bits en el registro
[0:1] para pin 0, [2:3] para pin 1, ... [30,31] para pin 15
Nota: Con pin me refiero al pin de un puerto, no al pin físico real en el chip.
¿Por qué TIM9 y no TIM10 o TIM11?
TIM 9 10 y 11 son todos idénticos. Tú eliges cuál quieres. Los STM32 generalmente tienen 3 tipos diferentes de temporizadores (TIM1, TIM2-5, TIM9-11) que tienen características ligeramente diferentes. Tienes que saber lo que necesitas y cuál lo soporta.
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 "habilitar reloj TIM9". ¿Es eso lo que queremos hacer?
Sí, esto es parte de la configuración del temporizador. Esto habilitará el reloj para el temporizador periférico para que pueda funcionar. Aunque el bit 16 es 0x10000 en hexadecimal o 0001 0000 0000 0000 0000 en binario. El temporizador seguirá sin funcionar en este momento. Tienes que hacer más ajustes. La forma de configurar el temporizador se describe en la página 366 y siguientes.
Daniel
turbo j
tdehaeze