Cómo modificar registros BRR y BRSS a stm32f4 desde stm32f103

Estoy tratando de modificar la biblioteca lcd stm32f103 2x16 a stm32f4. Hay registros BRR y BSRR en stm32f103, pero no hay registros similares en la estructura GPIO_TypeDef en stm32f4, por lo que no sé cómo modificar estos códigos.

LCD16X2_GPIO_D5->BSRR = LCD16X2_PIN_D5;

LCD16X2_GPIO_D4->BRR = LCD16X2_PIN_D4;

En realidad los hay. Consulta el manual del programador.
Hay BSRRH (establecer/restablecer registro alto) y BSSRL (establecer/restablecer registro bajo) para el registro BSRR (establecer/restablecer registro) pero cuál tengo que usar y no hay registros como BRR (reinicio de registro) en GPIO_TypeDef
De nuevo, consulte el manual del programador. Una vez que comprenda lo que hacen, sabrá cuál usar.
@ChrisStratton, lamentablemente, la situación es más complicada, con algunos encabezados incompatibles con la descripción en el manual de referencia, registro bajo utilizado para establecer pines altos...
La documentación del microcontrolador @ChrisStratton STM32 se divide en 3 partes. El Manual de programación describe el núcleo ARM, el conjunto de instrucciones y los periféricos básicos como NVIC, SCB. No menciona GPIO en absoluto. El Manual de referencia describe los periféricos fuera del núcleo ARM, incluidos los registros GPIO. Finalmente, la hoja de datos describe el hardware, pinouts, características eléctricas, dimensiones del paquete.

Respuestas (1)

Hay dos versiones diferentes de encabezados STM32F4 lanzados por ST, con algunas incompatibilidades. El que viene con la biblioteca StdPeriph define 16 bits BSRRLy BSRRHese es el que tienes. El otro que viene con la biblioteca STM32CubeF4 tiene una sola BSRRdefinición de 32 bits, que corresponde al manual de referencia.

Ahora revisa la definición en tus encabezados

__IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
__IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */

BSRRLcorresponde a la mitad baja, bits 0-15 del BSRRregistro como se describe en el manual de referencia, que establece el bit de salida correspondiente en 1 (alto). BSRRHcorresponde a la mitad alta, bits 16-31 del BSRRregistro, que establece el bit de salida correspondiente en 0 (bajo).

Puede usar BSRRLen lugar de BSRRpara activar un pin, pero tenga en cuenta que la definición es solo de 16 bits, por lo que no puede activar algunos bits y desactivar otros pines en una sola operación usando esta definición, porque las escrituras se truncan a 16 bits por el compilador.

BSRRLtiene la misma función que BRR, la única diferencia es que el compilador trunca la escritura a 16 bits, nada de lo que deba preocuparse a menos que deba contar los ciclos para obtener el tiempo correcto.