STM32 USART Recibe el número binario

0

Soy nuevo en los sistemas integrados, así que disculpas si esta es una pregunta estúpida.

Estoy intentando implementar un contador binario en forma de 8 LED. Quiero enviar un número binario de 8 bits a través de USART y hacer que los 8 LED muestren el número (desactivado si el bit es 0, encendido cuando el bit es 1).

¿Cuál sería el mejor método para hacer esto?

    
pregunta cath001

2 respuestas

1
Quiero enviar un número binario de 8 bits a través de USART y hacer que los 8 LED muestren el número (se apaga si el bit es 0, se enciende cuando el bit es 1). ¿Cuál sería el mejor método para hacer esto?

El UART incorporado ya decodifica la señal serial en bytes. Dicho de otra manera, el hardware le entrega el byte que desea directamente. Su pregunta se reduce a cómo manejar 8 LED de los 8 bits separados de un byte en algún lugar del procesador.

La solución más fácil es usar 8 pines de salida. Sería particularmente fácil si todos estos son controlados internamente por el mismo puerto de salida. En ese caso, simplemente escriba el byte en el registro de puertos.

Si las líneas de salida están dispersas entre diferentes registros de puertos, en el peor de los casos, configure cada bit individualmente. Pruebe el LSB del byte de entrada, luego configure o borre el bit de puerto para ese LED. Luego pruebe el bit 1 y establezca o borre el bit de puerto para el siguiente LED, etc.

Lo más sencillo eléctricamente es conducir cada LED directamente desde su pin de salida:

Si el LED cae 2.1 V (típico del verde común), entonces tendrá aproximadamente 5 mA cuando la señal digital sea alta. Eso será lo suficientemente brillante con un LED moderno para ver fácilmente en un entorno de oficina típico.

    
respondido por el Olin Lathrop
0

No me queda claro si desea que el STM32 sea el receptor o el remitente, pero asumo el receptor.

Primero descubra primero cómo recibir el valor que desea recibir. Hay muchos ejemplos, ya que UART es el periférico más utilizado.

Suponga que tiene el byte almacenado desde UART en un byte en la SRAM de su STM32, puede usar un bucle simple para iterar sobre los bits.

for (int bit = 7; bit >= 0; bit--)
{
    // Set GPIO 'bit' on or off
}

Para activar o desactivar un GPIO, averigüe cómo hacer esto, por ejemplo. en HAL debes usar HAL_GPIO_WritePin.

Puede conectar los LED con una resistencia a ocho pines y configurar el LED en consecuencia.

Para activar o desactivar el bit GPIO puede crear una matriz para guardar los números de puerto / pin, con un total de 8 elementos, donde cada elemento es el puerto / pin para ese bit, por ejemplo

GPIO_TypeDef gpio_ports
{
   GPIOA, GPIOA, GPIOA, GPIOA, GPIOB, GPIOB, GPIOC, GPIOB
};

uint16_t gpio_pins
{
   GPIO_PIN_0, GPIO_PIN_2, GPIO_PIN_0, GPIO_PIN_2,
   GPIO_PIN_5, GPIO_PIN_1, GPIO_PIN_6, GPIO_PIN_4,
}

El bit 0 se asignará al pin A0 de GPIO, los bits 7 a B4.

Para establecer el uso de bits

for (int bit = 7; bit >= 0; bit--)
{
    SetBit(bit, value & (1 << bit));
}

SetBit(int bit, int status)
{
   HAL_GPIO_WritePin(gpio_ports[bit], gpio_pins[bit], 
      status > 0 ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
    
respondido por el Michel Keijzers

Lea otras preguntas en las etiquetas