Procedimientos iniciales STM32: operaciones de bits

Una pequeña digresión ...


En la última lección, vimos dónde comenzar si decidió estudiar los microcontroladores STM32: cómo configurar un IDE, cómo crear un proyecto simple, cómo compilar un programa y cómo ejecutar un programa. Después de admirar los LED parpadeantes en la placa Discovery)


Al comenzar un nuevo artículo, planeé pasar inmediatamente a un análisis detallado de la lista de programas, lo que hizo que nuestros LED parpadearan alternativamente, pero cuando comencé a escribir, de repente me di cuenta de que había una gran cantidad de preguntas sin respuesta que irían a la revisión del programa prematuramente Y para mí, he identificado una lista completa de tales problemas :


  1. ¿Qué son las operaciones bit a bit ? ¿Cómo usarlos?
  2. ¿Qué son los registros y cómo se relacionan con las operaciones de bits?
  3. ¿En qué consisten los microcontroladores de la serie STM32F0xx, cómo se realiza el cronometraje y qué proporciona vida dentro del MK?
  4. ¿Cómo se lleva a cabo la inicialización de MK? ¿Por qué necesito un archivo de inicio? ¿Qué hace la función SystemInit ? Explicación en los dedos.
  5. ¿En qué consiste la biblioteca CMSIS ? ¿Cómo navegarlo? ¿Qué se puede aprender de él y cómo usarlo?

Es a partir de la consideración de estos temas que me gustaría continuar la historia sobre la programación de STM32.


Lista de artículos:
  1. Comenzar a estudiar STM32 o administrar la luz de forma inteligente
  2. Procedimientos iniciales STM32: operaciones de bits
  3. Primeros pasos STM32: ¿Qué son los registros? ¿Cómo trabajar con ellos?


Operaciones lógicas básicas


Recién comenzando a estudiar los microcontroladores, las palabras "registrarse" y "operaciones de bits" me parecieron misteriosamente misteriosas y durante mucho tiempo no quise pasar a este tema. Pero cuando entendí más o menos lo que era, me di cuenta de que era en vano posponer el estudio de un tema tan importante en una caja distante. ¡Las operaciones con bits son probablemente las operaciones más comunes en un microcontrolador y saber cómo y por qué se pueden usar en nuestro trabajo nos abrirá un enorme potencial para controlar todo y todo en nuestro MK!


Todos nosotros, en las clases de informática en la escuela, nos familiarizamos con lo que es la tecnología digital, por qué se llama así, qué operaciones lógicas básicas existen. Todas las tecnologías digitales modernas se basan en matemáticas binarias y circuitos lógicos.

Un microcontrolador siempre funciona con solo dos estados: "cero" - sin voltaje, "uno" - voltaje. Actualicemos un poco nuestro conocimiento de las operaciones lógicas básicas. Forman la base de toda la tecnología digital.


  • Conjunción : se designa como "Y lógico" o "Multiplicación lógica" . De hecho, el resultado de realizar esta operación lógica de dos para las expresiones A y B es similar a su multiplicación. Es decir, la expresión tomará el valor "1" solo si A y B tienen el valor "1". En todos los demás casos, el valor será "0". Puede denotarse con AND, &&, AND, &
  • Disyunción : se designa como "OR lógico" o "Adición lógica" . El resultado de realizar esta operación lógica dos para las expresiones A y B es similar a su adición. Es decir, la expresión tomará el valor "1" si al menos una de las expresiones A y B tiene el valor "1". Puede ser designado como OR, ||, OR, |.
  • Inversión : se designa como "NO lógico" o "Denegación" . El resultado de realizar esta operación lógica de dos para la expresión A es lo contrario. Es decir, la expresión tomará el valor 1 si la expresión A es 0 y viceversa. Puede ser designado como NO,!, NO, ~.

  • Disyunción estricta : designada como "OR exclusivo" o "OR exclusivo de adición lógica" . El resultado de realizar esta operación lógica de dos para las expresiones A y B tomará el valor 1 si A y B tienen valores diferentes. Puede ser designado como Excl. O, XOR, ^.

Operaciones de bits


Las operaciones de bits son casi lo mismo que las operaciones lógicas, con la única diferencia de que se aplican a bits y a números binarios.


Por cierto, para simplificar el estudio de las operaciones de bits, utilicé el programa ASM Calculator de 32 bits de ManHunter . Con este programa, puede verificar los resultados de las operaciones de bits, transferir números de un sistema de números a otro. El programa tiene una interfaz intuitiva y, después de cumplirlo, se ha convertido en una de las principales herramientas en mi trabajo con microcontroladores. Una pequeña explicación de la interfaz del programa se da en la imagen a continuación:


Operación de bit "NO" - "~"

Si el bit es "1", luego de realizar la operación "NO" será igual a "0", y viceversa. La operación se realiza inmediatamente en todos los bits del número binario. Por ejemplo, invierta el número FF:



Operación de bit "Y" - "&"

Si ambos bits en el bit son iguales a "1", luego de realizar la operación "Y", el resultado en el bit será igual a "1", pero si al menos uno de los bits es "0", entonces el resultado será igual a "0". La operación también se realiza a nivel de bits. Por ejemplo, "multiplique" dos números 0xFF0 y 0xF0F:


Como resultado, veremos que en aquellas categorías donde había unidades en ambos números, el resultado era unidades, en todos los demás casos: ceros.

Considere las opciones de aplicación práctica:

  • En una situación en la que necesitamos restablecer un bit específico o grupo de bits a cero, podemos usar una máscara. Creo que será más claro mostrar esto con un ejemplo. Supongamos que tomamos un número y 0xF8F y necesitamos que el séptimo bit se convierta en cero en lugar de la unidad. No hay problema, ponte una máscara y desmarca el bit deseado. Multiplique los números y obtenga el resultado:

  • Si necesitamos verificar un bit específico en un número para 0 o 1 , también usamos la máscara para multiplicar. En la máscara, establecemos el bit que nos gustaría verificar. Si el bit requerido es "0", el resultado del cálculo será "0", si es "1", respectivamente, "1". Si queremos averiguar si el séptimo bit es igual a uno, hacemos la máscara correspondiente y multiplicamos nuestro número por la máscara. Todo es simple:

    Si necesitamos verificar la paridad de un número (es decir, la capacidad de un número de ser divisible por dos), entonces verificamos el primer bit de la misma manera, si es "1", entonces el número es impar, si hay "0", entonces el número es par. Pruébelo usted mismo, para entrenar y desarrollar habilidades, haga esta prueba.

La operación bit a bit "O" - "|"

Si uno o ambos pares de bits es "1", el resultado será "1"; de lo contrario, si ambos bits son iguales a "0", el resultado será "0". Es decir, más o menos, se realiza la adición de todas las unidades en los dígitos. Por ejemplo, si agregamos dos números 0xF8F y 0x7F, obtenemos el siguiente resultado:



Considere una aplicación práctica:
  • Si necesitamos establecer un bit específico en un número a 1 , también usamos la máscara para realizar la suma. Por ejemplo, para establecer el decimoquinto bit en el número 0xFF0, debe realizar una operación de suma lógica y obtendremos el resultado deseado:


Intenta jugar con diferentes números por tu cuenta y mira los resultados.

La operación EXCLUSIVA O bit a bit es "^"

Si los bits en el bit son diferentes y no iguales, entonces el resultado será "1", de lo contrario, "0". Por ejemplo, si hacemos números XOR 0xF8F y 0x7F, entonces veremos que en los bits en los que hay bits excelentes, entonces el resultado es "1" y en lugares donde los bits son iguales, ya sea "0" o "1", resulta "0 ", Al final obtenemos el siguiente resultado:


Considere las opciones de aplicación práctica:

  • Si necesitáramos invertir cualquier bit en un número , podemos usar la máscara para hacerlo fácilmente usando la operación XOR. Hagamos la inversión de los dígitos 6 y 7 en el número 0xF8 usando la máscara 0xC0. Puedes ver el resultado en la imagen:

  • Hay situaciones en las que es necesario comparar dos registros y determinar si son iguales o no . En este caso, necesitamos registrar valores para las operaciones XOR. Si el resultado es "0", entonces los registros son iguales, de lo contrario no son iguales:



Operaciones de cambio de bit
Hay una serie de operaciones de bits interesantes y, a veces, extremadamente útiles, denominadas operaciones de cambio . Puede mover las descargas tanto a la derecha como a la izquierda. Durante esta operación, todos los bits del número binario se desplazan por el número especificado de posiciones, en este caso, si el desplazamiento va hacia la izquierda , se pierde el bit más significativo (el más a la izquierda) y se escribe "0" al menos significativo (más a la derecha). Con un cambio lógico a la derecha, ocurre la situación opuesta: se pierde el bit menos significativo (el más a la derecha) y se escribe "0" en el más alto. Además, me gustaría señalar que, en el caso de las palabras de 32 bits, todos los 32 bits se desplazan como un todo. Considere la operación de turno con más detalle.


Desplazamiento a la izquierda - "<<"

Puede ver cómo se produce el cambio en la imagen a continuación. Creo que todo es bastante obvio:


Con un desplazamiento binario, puede notar una característica interesante. Un cambio por un dígito multiplica nuestro número por 2. Si cambiamos nuestro número x por n dígitos, entonces obtenemos x * (2 * n). Intente realizar un seguimiento independiente de este patrón a través de nuestra utilidad para contar. =)

Desplazar a la derecha - ">>"

Lo que resulta de un giro a la derecha se refleja claramente en la imagen:


Con un desplazamiento binario a la derecha, puede notar que la situación es lo opuesto a un desplazamiento a la izquierda: el número se divide por 2 s en un desplazamiento de 1 dígito y luego por 2 * n, donde n es el número de bits por los que se realizó el desplazamiento. También intente jugar con los números usted mismo, que obviamente se dividen en 2 por completo. Y la cuestión del relleno: ¿cuál será el resultado si divide el número impar de esta manera?

Nota importante . Si realiza un cambio para una variable con un signo negativo (firmado), las posiciones desocupadas se llenarán con unas.

En conclusión ...


Para muchos principiantes, este tema puede parecer muy aburrido y puede parecer que no está del todo claro dónde y cómo aplicar este conocimiento. Me apresuro a tranquilizarte, en situaciones en las que necesitas elevar uno u otro pie del MK o escribir un parámetro en un hilo en una unidad periférica o módulo; allí, se requerirá el conocimiento de las operaciones de bits por todas partes. Como el artículo resultó ser bastante voluminoso, transferiremos la consideración de los registros a la próxima lección. Bueno, en el futuro puedes usar este artículo como una hoja de trucos.


Como tarea, intente analizar nuestro código de programa usted mismo en el bloque while (1) {...} y comprenda cómo encendemos y apagamos nuestros LED con operaciones bit a bit . ¡Bueno, en la próxima lección te diré cómo sucede realmente!



Lista de artículos:
  1. Comenzar a estudiar STM32 o administrar la luz de forma inteligente
  2. Procedimientos iniciales STM32: operaciones de bits
  3. Primeros pasos STM32: ¿Qué son los registros? ¿Cómo trabajar con ellos?

Source: https://habr.com/ru/post/es406889/


All Articles