STM32 enciende las luces LED (versión registrada)

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

Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí
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?

Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí

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?
Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí
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

Inserte la descripción de la imagen aquí
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

Inserte la descripción de la imagen aquí
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

Supongo que te gusta

Origin blog.csdn.net/WANGYONGZIXUE/article/details/115042428
Recomendado
Clasificación