
Hola
Descripción de la biblioteca para leer, decodificar y enviar posteriormente señales infrarrojas desde varios controles remotos domésticos utilizando el microcontrolador stm32. Basado en la
biblioteca IRremote para arduino y adaptado para stm32.
La biblioteca utiliza un temporizador, tanto para recibir como para enviar una señal. El receptor está conectado a cualquier pin (GPIO_Input), y el transmisor está conectado a uno de los canales del temporizador que funciona en modo PWM Generation (PWM). En el ejemplo, se usa el primer canal del temporizador No. 4: PB6 (transmisor) y pin PB5 (receptor).
Para recibir una señal, el temporizador funciona en modo de interrupción: cada 50 μs verifica el estado del pin de entrada y, durante la transmisión, cambia al modo de generación PWM, envía una señal y vuelve al modo de interrupción.
La configuración está en el archivo IRremote.h
extern TIM_HandleTypeDef htim4;
Si va a configurar otro temporizador, debe especificar el nombre de la estructura correspondiente: htim4, y hacer lo mismo en los archivos IRremote. e irSend.. Fui demasiado vago para definir toda esta economía. Al elegir otro temporizador en Cuba, debe especificar solo el canal y la fuente del reloj interno ...

El programa configurará todo lo demás. Si selecciona un número de canal diferente, también debe cambiarle el nombre en el archivo irSend.s.
Con el resto de las configuraciones, creo que todo está claro: en función de la frecuencia del sistema (en el ejemplo de 72 MHz), los valores del pre-divisor y el desbordamiento se sustituyen por interrupción cada 50 μs. Lo siguiente indica la frecuencia y lectura del pin.
A continuación se detallan las definiciones que definen los protocolos involucrados ...
Deshabilitar protocolos innecesarios reduce el tamaño del programa. En principio, generalmente puede eliminar las funciones de los protocolos no utilizados y los archivos correspondientes (los archivos tienen nombres característicos).
El programa es extremadamente simple, la función my_decode (& results) decodifica la señal recibida y muestra el código del botón, el tipo de protocolo y la longitud del paquete ...

No tengo otros controles remotos.
Para enviar la señal decodificada, use la función con el nombre correspondiente ...
sendSAMSUNG(0x707048b7, 32); my_enableIRIn();
La función my_enableIRIn () es necesaria, deshabilita el PWM y pone el temporizador en modo de recepción. La misma función se usa para la inicialización (antes de un bucle infinito). Debido a esta función, no podrá capturar su propia señal; esto se puede resolver, pero no veo ningún punto en esto.
Si no puede determinar el tipo de protocolo ...

... entonces no hay nada de qué preocuparse, el código del botón se recibe de todos modos.
Si necesita no solo recibir una señal desconocida, sino también enviarla, debe descomentar las líneas para "salida de datos sin procesar" ...

... y envíe los datos leídos utilizando la función sendRaw () ...
uint8_t khz = 38;
Enviarme "crudo" no funciona para mí.
La biblioteca utiliza un contador DWT para retrasos de microsegundos. Hasta donde yo sé, no todos los stm32 lo tienen, y es posible que no en todas partes esté configurado de la misma manera. Si su piedra no tiene DWT, entonces debe encontrar algo para reemplazar en la función custom_delay_usec (unsigned long us) al final del archivo irSend.s, la configuración está al principio.
Eso es todo
La biblioteca