Programación de STM32 como STM8 (GPIO a nivel de registro)

3 minutos de lectura

avatar de usuario
jurgis1991

Programé STM8 GPIO como PD_ODR_ODR4 = 1;pero stm32f10x.h no tiene esta funcion Hay alguna .h archivo que tiene definición de bits?

Lo siento, pero no sé cómo explicar mejor este problema.

Probé varias bibliotecas GPIO.

  • y cada versión de microcontrolador tiene la suya. Utilice controladores hal stm32.

    – KamilCuk

    17 de febrero de 2019 a las 16:37

  • GPIOD -> BSRR = (1 << pin); establecer GPIOD -> BRR = (1 << pin); para restablecer el puerto de abeto D

    – 0___________

    17 de febrero de 2019 a las 17:34


  • @KamilCuk en realidad es tan consistente en todos STM32 uCs. No preguntó por HAL

    – 0___________

    17 de febrero de 2019 a las 17:35

Mencionas stm32f10x.h en la pregunta, así que supongo que se trata de la serie de controladores STM32F1. Otras series tienen algunas diferencias, pero el procedimiento general es el mismo.

Los pines GPIO están organizados en bancos de 16 puertos llamados, cada uno con su propio conjunto de registros de control, llamados GPIOA, GPIOBetc. Se definen como punteros a GPIO_TypeDef estructuras Hay 3 registros de control que afectan las salidas de los pines.

Escritura ODR establece los 16 pines a la vez, por ejemplo GPIOB->ODR = 0xF00F conjuntos de pines B0 a través de B3 y B12 a través de B15 a 1, y B4 a través de B11 a 0, independientemente de su estado anterior. uno puede escribir GPIOD->ODR |= (1<<4) para establecer pin GPIOD4 a 1, o GPIOD->ODR &= ~(1<<4) para restablecerlo.

Escritura BSRR trata el valor escrito como dos máscaras de bits. La media palabra baja es la máscara establecida, los bits con valor 1 establecen el bit correspondiente en ODR a 1. La media palabra alta es la máscara de reinicio, los bits con valor 1 establecen el bit correspondiente en ODR a 0. GPIOC->BSRR = 0x000701E0 colocaría alfileres C5 aunque C8 a 1, restablecer C0 a través de C2 a 0, y deje todos los demás bits de puerto solos. Intentando establecer y restablecer el mismo bit al escribir BSRRentonces se establecerá en 1.

Escritura BRR es lo mismo que escribir la máscara de bits de reinicio en BSRRes decir GPIOx->BRR = x es equivalente a GPIOx->BSRR = (x << 16).

Ahora es posible escribir algunas macros como

#define GPIOD_OUT(pin, value) GPIOD->BSRR = ((0x100 + value) << pin)
#define GPIOD4_OUT(value) GPIOD_SET(4, value)

para cambiar pines individuales, pero no es tan flexible como podría ser, por ejemplo, no puede tomar la dirección de un pin individual y pasarla en variables.

Bandas de bits

Controladores Cortex-M (no todos, pero el STM32F1 series sí) tienen esta característica para hacer que los bits individuales en la RAM interna y en los registros de hardware sean direccionables. Cada bit en el 0x40000000-0x400FFFFF el rango se asigna a una palabra completa de 32 bits en el 0x42000000-0x43FFFFFF distancia. No funciona con periféricos fuera de este rango de direcciones, como USB o NVIC.

La dirección de banda de bits de un registro periférico se puede calcular con esta macro

#define BB(reg) ((uint32_t *)(PERIPH_BB_BASE + ((uint32_t)&(reg) - PERIPH_BASE) * 32U))

y puede tratar el puntero resultante como la base de una matriz que contiene 32 palabras, cada una de las cuales corresponde a un solo bit en los registros periféricos. Ahora es posible

#define PD_ODR_ODR4 (BB(GPIOD->ODR)[4])

y usarlo en las tareas. Leerlo dará 0 o 1 como su valor, los valores escritos en él copian el bit menos significativo del valor escrito al bit de registro periférico. Incluso puede tomar su dirección y pasarla a una función que haga algo con el pin.

La banda de bits está documentada en el manual de programación de PM0056 Cortex®-M3.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad