Directorio de artículos
Prefacio
Utilice el registro para encender el LED, este artículo presenta cómo encontrar el registro, consultar el manual, encontrar la dirección del registro correspondiente e iluminar el LED.
Ver esquema
Encienda la luz roja R (roja) y baje el pin PB5.
Inicializar el reloj
Primero, averigüe en qué reloj está colgado PB5. Diagrama de arquitectura del sistema STM32:
PB5 es GPIOB5. En el diagrama de arquitectura del sistema, puede ver que GPIOB está colgado en el bus APB2, así que encienda el reloj APB2 primero. ¿Cuál es la dirección de APB2?
Se puede ver que la dirección de desplazamiento del registro APB2 es 0x18, el bit Bit3 está configurado en PB, 0 está deshabilitado y 1 está habilitado; entonces, ¿cuál es la dirección base del registro?
Continúe buscando el manual APB2 pertenece a RCC, por lo que necesita encontrar el mapa de registros en el Capítulo 3.3 de la siguiente manera:
En la tabla de registros, puede ver que la dirección base del registro RCC es 0x4002 1000.
Entonces la dirección de APB2 del registro es: 0x40021000 + 0x18 = 0x40021018
Configuración del modo GPIOx
La dirección de desplazamiento de la dirección de registro GPIOB es 0x00, y la dirección base se encuentra en el Capítulo 3.3 del manual:
0x4001 0C00-0x4001 0FFF Puerto GPIO B
0x4001 0C00 + 0x00 (desplazamiento) = 0x4001 0C00
La dirección de registro GPIOB_CRL es: 0x4001 0C00
Se puede ver en la tabla que los registros de GPIOx_CRL (x = A ... G), CNFy, MODEy (y = 1 ... 7) controlan un grupo de pines GPIOy cada 4 bits. Porque cada grupo de GPIOx tiene 16 pines. 16 * 4 = 64, por lo que el registro de control necesita 64 bits. Pero un registro es de 32 bits, por lo que se necesitan dos registros. Por lo tanto, se divide en CRL para controlar de 1 a 7 pines y CRH para controlar de 8 a 16 pines. Como PB5 es el quinto, se selecciona el registro CRL.
MODEy establece el modo de entrada y salida,
la configuración de la tasa GPIO CNFy en el modo de entrada y la configuración en el modo de salida.
Aquí configuramos PB0 como una salida push-pull general, y la velocidad de salida es 10M
Control de nivel de pin GPIOx
Registre la dirección de compensación 0x0C. , La dirección base se encuentra en el Capítulo 3.3 del manual a
0x4001 0C00-0x4001 0FFF Puerto GPIO B
0x4001 0C00 + 0x0C (desplazamiento) = 0x4001 0C0C
La dirección de registro GPIOB_ODR es: 0x4001 0C0C
Los 16 bits inferiores son válidos, establezca el pin correspondiente en 0 (tire hacia abajo) o 1 (tire hacia arriba). El
pin PB5 debe establecer el bit5 en 0 para iluminar el LED
Código fuente del programa
#include "stm32f10x.h"
int main (void)
{
// APB2时钟设置
*( unsigned int * )0x40021018 |= ( (1) << 3 );
//设置PB5输出模式,推挽输出
*( unsigned int * )0x40010C00 |= ( (1) << (4*5) );//blue
// 控制引脚电平
*( unsigned int * )0x40010C0C &= ~(1<<1);
}
Nota: la dirección no se puede asignar directamente, debe convertirse en forma de puntero