[Aprendizaje de STM32 MCU] La segunda lección: memoria STM32, fuente de alimentación y sistema de reloj

[Intrusión del resumen del curso del Sr. Zhu]

La primera parte, lista de capítulos

3.2.1. Arquitectura de bus y memoria STM32

3.2.2.Explicación detallada del funcionamiento de la banda de bits STM32

3.2.3. Modo de inicio STM32

3.2.4. Sistema de administración de energía STM32 (PWR)

3.2.5. Resumen de reinicio y reloj

3.2.6. Explicación detallada del RCC de control de reloj STM32


La segunda parte, introducción del capítulo

3.2.1 Arquitectura de bus y memoria
    STM32 Esta sección describe principalmente el mapeo de memoria de STM32, que involucra el conocimiento de la memoria y el direccionamiento unificado de E / S, el bus de direcciones y el espacio de direccionamiento. Continúe explicando la tabla de asignación de memoria, el contenido de esta tabla se utilizará cuando se escriba el código más adelante, preste más atención a los detalles.
3.2.2
    Explicación detallada del funcionamiento de la banda de bits STM32 Esta sección explica el principio del segmento de bits STM32, así como las ventajas del acceso al segmento de bits y el método de cálculo del segmento de bits.
3.2.3 Modos de inicio de
    STM32 Esta sección explica los tres modos de inicio de STM32 y se centra en los conceptos, principios de implementación y diferencias entre ISP e IAP.
3.2.4 Sistema de administración de energía    
    del STM32 Esta sección explica el sistema de administración de energía del STM32, principalmente los conceptos y métodos de implementación del modo de bajo consumo de energía y el modo de suspensión.
3.2.5 Descripción general de reinicio y reloj
    Esta sección describe las ideas generales de diseño del diseño de reinicio y parte del reloj de STM32, la clave está en la parte del reloj.
3.2.6
    Explicación detallada del RCC de control de reloj STM32 Esta sección comienza a explicar el diagrama de bloques del reloj, el canal del reloj, la configuración del reloj y los bits de registro correspondientes de STM32.  

Tercera parte, Registro del aula

Nota: ¡Baidu puede descargar el manual de datos de la serie STM32F1xx!

3.2.1. Arquitectura de bus y memoria STM32

3.2.1.1, arquitectura del sistema

  • Cuatro unidades de accionamiento:
    bus de código de CC de núcleo Cortex ™ -M3 (bus D) y bus de sistema (bus S)
    general DMA1 y general DMA2
  • Cuatro unidades pasivas Memoria flash interna
    SRAM
    interna
    FSMC Puente
    AHB a APB (AHB2APBx), conecta todos los dispositivos APB, estos se conectan entre sí a través de una arquitectura de bus AHB multinivel.
  • ICode bus (I-bus): se conecta con la interfaz de comando flash
  • La velocidad de funcionamiento de APB1 está limitada a 36 MHz y APB2 funciona a máxima velocidad (hasta 72 MHz).


3.2.1.2, mapeo de memoria

(1) Un poco de conocimiento de la memoria STM32

  • STM32 es una CPU de 32 bits y el bus de datos es de 32 bits.
  • El bus de direcciones de STM32 es de 32 bits (de hecho, el bus de direcciones es de 32 bits y el bus de datos de 32 bits no tiene ninguna relación)
  • La capacidad de dirección a la que puede acceder STM32 es: 4GB (2 ^ 32Byte)
  • Los bytes de datos se almacenan en la memoria en formato little endian. El byte de dirección más bajo en una palabra se considera el byte menos significativo de la palabra
    y el byte de dirección más alto es el byte más significativo.
  • STM32 definitivamente no utilizará 4 GB de espacio, por lo que hay: dirección lógica, dirección real
  • El espacio de memoria accesible se divide en 8 bloques principales, cada bloque es de 512 MB.

(2) Mapeo de memoria

La disposición de la dirección real de STM32:

0x00000000-0x0007FFFF 512KB Área de mapeo
0x08000000-0x0801FFFF 128KB Flash
0x1FFFF000-0x1FFFF7FF 2KB Memoria del sistema
0x1FFFF800-0x1FFFF9FF 512B Bytes de opción
0x20000000-0x2000FFFF 64KB SRAM


3.2.2.Explicación detallada del funcionamiento de la banda de bits STM32

(1) Concepto básico de banda de bits

  • El sistema de memoria de CM3 admite las llamadas operaciones de "banda de bits".
  • El mapa de memoria Cortex ™ -M3 incluye dos regiones de banda de bits. El área de memoria de alias de segmentos de bits de estas dos zonas en cada palabra se asigna a un segmento de bits del área de memoria. Es decir, el área de alias de la banda de bits se expande en una palabra de 32 bits para cada bit. Cuando accede a estas palabras a través del área de alias de banda de bits, puede acceder a los bits originales

(2) ¿Por qué hay una operación de banda de bits?

  • Porque el propio STM32 solo admite operaciones de 8, 16 y 32 bits y no admite operaciones de bits.
  • Pero en nuestra programación actual, existe la necesidad de una sola operación. Esto se hace generalmente: debido a que STM32 no admite operaciones de bits, necesitamos realizar operaciones generales en 32 bits. Generalmente leemos los 32 bits completos, luego realizamos una operación en uno de ellos y luego escribimos los 32 bits completos. Esto es posible, pero ineficaz.

(3) ¿Cómo mejorar la eficiencia?

  • La respuesta es definitivamente pensar en una forma de modificar directamente ese bit sin afectar a otros bits. Si el hardware no lo admite, no hay forma, a menos que el hardware admita operaciones de bits para usted. 51 puede implementar operaciones de bit, como el TR0 = 1 anterior;
  • Y ARM no admite la operación de bits, por lo que se inventó la operación de banda de bits . La idea de la operación de banda de bits no es permitirle manipular directamente este bit solo, sino asignar este bit al de 32 bits en otro lugar para usted, y luego operar ese 32 bits en otro lugar es equivalente a operar aquí. De este. Escribir una palabra en el área de almacenamiento de alias de segmento de bit tiene el mismo efecto que realizar una operación de lectura-modificación-escritura en el bit de destino en el área de segmento de bit.

(4) Mira la imagen para entender

  • El tamaño del área de memoria de alias es igual a 32 veces el tamaño del área de memoria del segmento de bits.
  • El problema central de la operación de banda de bits es: cómo calcular la dirección del área de memoria de alias a partir de la dirección del área de memoria del segmento de bits.

Por ejemplo: para un bit en el área de la banda de bits SRAM, registre su dirección de byte como A y el número de bit como n (0 <= n <= 7), luego la dirección del bit en el área de alias es:
El siguiente ejemplo muestra cómo Bit 2 en el byte cuya dirección SRAM es 0x20000300 en el área de alias mapeada:

  • 0x22006008 = 0x22000000 + (0x300 × 32) + (2 × 4).

La operación de escritura en la dirección 0x22006008 tiene el mismo efecto que la operación de lectura-modificación-escritura realizada en el bit 2 de la dirección 0x20000300 byte en la SRAM. La lectura de la dirección 0x22006008 devuelve el valor del bit 2 (0x01 o 0x00) de la dirección 0x20000300 en la SRAM.

3.2.3. Modo de inicio STM32

3.2.3.1. Tres modos de inicio

(1) Modo de inicio: estudie la cuestión de dónde ejecutar el programa después del reinicio de encendido del STM32.
    De acuerdo con el modo de inicio seleccionado, se puede acceder a la memoria flash principal, la memoria del sistema o SRAM de las siguientes maneras:

  • Arranque desde la memoria flash principal: la memoria flash principal está asignada al espacio de arranque (0x0000 0000), pero aún se puede acceder a ella en su dirección original (0x0800 0000), es decir, se puede acceder al contenido de la memoria flash en dos áreas de direcciones, 0x00000000 o 0x0800 0000.
  •  Arranque desde la memoria del sistema: la memoria del sistema está asignada al espacio de arranque (0x0000 0000), pero aún se puede acceder a ella en su dirección original (la dirección original de los productos interconectados es 0x1FFF B000 y la dirección original de otros productos es 0x1FFF F000).
  • Comience desde la SRAM incorporada: solo se puede acceder a la SRAM en el área de direcciones a partir de 0x2000 0000.

(2) La memoria flash principal ( memoria flash de usuario) está diseñada para que coloquemos el código escrito por el usuario. Generalmente, cuando usamos el modo JTAG o SWD para descargar el programa , se descarga en esta. En el estado de funcionamiento típico , el STM32 debe configurarse en Empieza aqui.
(3) La memoria del sistema se utiliza en situaciones no convencionales para realizar la función ISP.
(4) SRAM incorporado , esto también es poco convencional, utilizado para realizar la función de depuración del depurador.

3.2.3.2 ISP e IAP
(1) ISP es programación en el sistema (programación en el sistema, programación en el sistema) . La memoria del sistema es un área específica dentro del chip, y una sección de Bootloader está preestablecida en esta área cuando el chip sale de fábrica, que generalmente se llama programa ISP. La interfaz UART1 se proporciona en el gestor de arranque. A través de esta interfaz, el código del programa requerido por el usuario se puede descargar al Flash principal. Una vez completada la descarga, el código del programa se ha almacenado en el Flash principal. En este momento, cambie el modo de inicio (desde el Flash principal Inicio), el código que se ejecuta después del reinicio es el código que se acaba de descargar a Flash. ¡Esta es la forma de aprender 51!
(2) IAP es programación en la aplicación (programación en la aplicación, programación en la aplicación, actualización en línea), El núcleo de IAP es que los usuarios necesitan operar los registros del controlador flash interno del microcontrolador en sus propias aplicaciones para lograr la función de quemar el flash interno. Luego, en IAP, el programa de usuario recibe el archivo bin / hex enviado por la PC a través del puerto serie (usb, ethernet) y luego lo graba en la memoria flash interna para completar el IAP. Una vez finalizado, se ejecutará desde el área de la memoria del usuario después de reiniciar y la actualización entrará en vigor. Generalmente, la realización de IAP necesita dividir artificialmente la memoria del usuario en dos partes: cargador de arranque + aplicación,
actualizamos el cargador de arranque, el cargador de arranque actualiza la aplicación y luego ejecutamos el código en el área de la aplicación.


3.2.4. Sistema de administración de energía STM32 (PWR)

Esta parte se ocupa principalmente de los ingenieros de hardware, y el siguiente modo de bajo consumo se centra en el software . Por ejemplo, en el futuro, si puede realizar la función de visualización de la pantalla del teléfono móvil, estará expuesto a las funciones de suspensión, espera, parada y activación.
(1) El bajo consumo de energía debe poder despertarse, de lo contrario no tiene sentido.
(2) Hay tres modos de bajo consumo en la serie STM32F1xx:

  • Modo de suspensión (SLEEP): la
    CPU se detiene, los periféricos están funcionando, las fuentes de activación son todas interrupciones
  • Modo de parada (STOP): no se apaga, ¡sino modo de suspensión profunda!
    Parada de CPU, parada de reloj, parada de periféricos, solo SRAM y los registros pueden mantener el valor original, la fuente de activación es una interrupción externa
  • Modo de espera (SUSPENDER):
    parada de CPU, parada de periféricos, parada de reloj, SRM y parada de registro (equivalente a todo el apagado y apagado), solo el registro de respaldo y el circuito de espera aún pueden funcionar, fuente de activación: el borde ascendente del pin WKUP , Reloj despertador RTC, reinicio externo en el pin NRST, reinicio IWDG

(3) Además, en el modo de funcionamiento, el consumo de energía se puede reducir de una de las siguientes formas:

  • Reducción del reloj del sistema
    En el modo de ejecución, al programar el registro del preescaler, puede reducir la velocidad de cualquier reloj del sistema (SYSCLK, HCLK, PCLK1, PCLK2).
  • Apague los relojes periféricos no utilizados en los buses APB y AHB.
    Al configurar el registro de habilitación del reloj periférico AHB (RCC_AHBENR), el registro de habilitación del reloj periférico APB2 (RCC_APB2ENR) y el registro de habilitación del reloj periférico APB1 (RCC_APB1ENR) para cambiar el reloj de cada módulo periférico. Reduciendo así el consumo de energía

(4) Despertador automático en modo de bajo consumo

3.2.5. Resumen de reinicio y reloj

3.2.5.1, diseño de reinicio STM32 (el reinicio es restaurar al estado inicial)

El reinicio se divide en reinicio del sistema, reinicio de encendido y reinicio del área de respaldo . Después del reinicio, la CPU se verá obligada a ejecutar el programa en el vector de reinicio.
(1) Reinicio del sistema:

  • El restablecimiento del sistema restablecerá todos los registros a su estado de restablecimiento.
  • Cuando ocurre cualquiera de los siguientes eventos, un reinicio del sistema:
    - un pin de nivel bajo (reinicio externo) en NRST
    - ventana de terminación del conteo del perro guardián (el reinicio del WWDG)
    - Fin del conteo del perro guardián independiente (el reinicio del IWDG)
    - Software Restablecer (restablecimiento de SW):
    restablecimiento de administración de energía baja

(2) Reinicio de encendido

  • Se produce un reinicio de energía cuando ocurre uno de los siguientes eventos:
    -Restablecimiento de encendido / apagado (reinicio de POR / PDR) -Regreso
    del modo de espera
  • El reinicio de energía reiniciará todos los registros excepto el área de respaldo.

(3) Restablecimiento del dominio de respaldo 

  • Cuando ocurre uno de los siguientes eventos, el área de respaldo se restablece.
    -Restablecimiento del software, el restablecimiento del área de respaldo se puede generar configurando el bit BDRST en el registro de control de dominio de respaldo (RCC_BDCR).
    -Cuando tanto VDD como VBAT están apagados, encender VDD o VBAT hará que el área de respaldo se reinicie.

3.2.5.2 El diseño general del reloj de STM32

(1) Fuente de reloj:

  • Puramente interno El
    oscilador RC interno del chip se genera y el inicio es rápido, por lo que el reloj usa el reloj interno por defecto cuando el chip se enciende por primera vez.
    HSI, LSI
  • Interno y externo
    Hay un oscilador de cristal en el exterior y un circuito oscilante en el interior, lo que tiene grandes ventajas en precisión y estabilidad ¡Esto requiere que configuremos un software!
    HSE, LSE
  • Puramente externo
    Hay un reloj listo para usar externamente, generalmente utilizado para sistemas de múltiples núcleos
    OSC_IN, OSC32_IN
  • El reloj de alta velocidad (HSE y HSI) proporciona el reloj principal del chip. Los relojes de baja velocidad (LSE y LSI) solo se proporcionan al RTC (reloj en tiempo real) y al perro guardián independiente (IWDG) en el chip. La figura muestra que el reloj de alta velocidad también se puede proporcionar al RTC. ¡Contactado al aprender DS1302! Portal

(2) PLL (circuito de bucle de bloqueo de fase)

  • La función es la multiplicación de frecuencias.
  • El reloj PLL se llama PLLCLK
  • El reloj PLL es proporcionado por HSI / HSE

(3) Canal de reloj y dirección de flujo, división de frecuencia

  • El canal del reloj se refleja en el árbol del reloj.
  • La dirección del flujo y la división de frecuencia deben configurarse mediante software, ¡de qué manera debe configurarse!

(4) Múltiples relojes independientes

  • Por ejemplo, 32,768 kHz de RTC, ¡puede haber muchas fuentes de reloj!

Árbol del reloj

3.2.6. Explicación detallada del RCC de control de reloj STM32

3.2.6.1. Configuración general
(1) 4 relojes independientes: HSx y LSx (H: Alto, L: Bajo; E: Externo, I: Interno)
(2) Interno puro:

  • HSI
  • LSI

(3) Interior y exterior:

  • HSE
  • LSE

(4) Externo:

  • OSC_IN, OSC32_IN
    se conectan directamente al reloj, ¡omita el reloj externo!

3.2.6.2, PLL
(1) 2 fuentes PLL opcionales (control PLLSRC)

  • El reloj del oscilador HSI se divide por 2 como el reloj de entrada PLL
  • Reloj HSE como reloj de entrada PLL

(2) La multiplicación de frecuencia se puede configurar mediante software (control PLLMUL)

  • PLLMUL son algunos bits del registro de configuración del reloj
  • Solo se puede escribir cuando el PLL está apagado
  • La frecuencia de salida PLL no puede exceder los 72MHz

3.2.6.3, división de frecuencia

(1) Hay muchas formas de dividir el factor de preescalador de frecuencia

  • División de frecuencia directa
  • ADC
  • AHB
  • APB1 / APB2
  • USB
  • Los dispositivos conectados a APB1 (periféricos de baja velocidad) son : interfaz de alimentación, interfaz de respaldo, CAN, USB, I2C1, I2C2, UART2, UART3, SPI2, control de ventana, Timer2, Timer3, Timer4. Tenga en cuenta que aunque el módulo USB requiere una señal de reloj separada de 48MHz, no debe ser un reloj para que funcione el módulo USB, sino solo un reloj para el motor de interfaz en serie (SIE). APB1 debe proporcionar el reloj de trabajo del módulo USB.
  • Los dispositivos conectados a APB2 (periféricos de alta velocidad) son : UART1, SPI1, Timer1, ADC1, ADC2, todos los puertos IO ordinarios (PA ~ PE) y puertos IO de segunda función.

(2) Preste atención al nombre del nodo del reloj:

  • HSI 、 HSE 、 LSI 、 LSE 、
  • PLLCLK 、 SYSCLK 、
  • USBCLK 、 HCLK 、 FCLK 、 PCLK1 、 PCLK2 、 ADCCLK 、 RTCCLK 、 IWDGCLK

3.2.6.4 、 SysTick 和 MCO

(1) SysTick (temporizador de tic del sistema)

  • Cuando el reloj del sistema se establece en 9 MHz (el valor máximo de HCLK / 8), se genera una base de tiempo de 1 ms. ¡Podemos ver este sistema en el árbol del reloj!
  • SysTick es en realidad un temporizador y su función es rotar intervalos de tiempo.

(2) El
microcontrolador MCO (salida de reloj) permite enviar señales de reloj al pin MCO externo. El registro de puerto GPIO correspondiente debe estar configurado para la función correspondiente ( multiplexado ).
Las siguientes cuatro señales de reloj se pueden seleccionar como reloj MCO:

  • SYSCLK
  • HSI
  • HSE
  • El reloj PLL dividido por 2 es
    seleccionado por los bits MCO [2: 0] en el registro de configuración del reloj (RCC_CFGR).

3.2.6.5. Registros relacionados con el reloj

  • Verifique el mapa de memoria para obtener la dirección base de RCC: 0x4002 1000
  • Luego coopere con el mapeo de direcciones del registro RCC y consulte el desplazamiento del registro para obtener la dirección del registro.
  • El valor de restablecimiento es la configuración predeterminada

(1) RCC_CR (registro de control de reloj)                 0x40021000             importante
(2) RCC_CFGR (registro de configuración de reloj)             0x40021004             importante
(3) RCC_CIR
(4) RCC_APB2RSTR         restablecer reloj periférico
(5) RCC_APB1RSTR restablecer reloj periférico
(6) RCC_AHBENR             periférico El interruptor de reloj es                                  importante
(7) RCC_APB2ENR El           interruptor de reloj periférico es                                  importante
(8) RCC_APB1ENR El            interruptor de reloj periférico es                                 importante
(9) RCC_BDCR
(10) RCC_CSR

En general, hay tres tipos de bits de registro: bits de estado, bits de conmutación y bits de valor establecido. ¡

Esta lección ha terminado!

Supongo que te gusta

Origin blog.csdn.net/qq_27148893/article/details/111399630
Recomendado
Clasificación