Пример работы с ик пультом стандарта RC5 на STM32

В файле RC5_IR_Emul_Receiver.h меняем настройки порта куда вешаем TSOP

#define RC5_GPIO_PORT          GPIOA                /* Port which RC5 is connected */
#define RC5_GPIO_CLK           RCC_APB2Periph_GPIOA /* Clock of Port which RC5 is connected */
#define RC5_GPIO_PIN           GPIO_Pin_0           /* Pin which RC5 is connected */
#define RC5_EXTI_PORT_SOURCE   GPIO_PortSourceGPIOA /* RC5 EXTI Port source */
#define RC5_EXTI_PIN_SOURCE    GPIO_PinSource0      /* RC5 EXTI Pin source */
#define RC5_EXTI_IRQn          EXTI0_IRQn           /* RC5 EXTI IRQ */
#define RC5_EXTI_LINE          EXTI_Line0           /* RC5 EXTI line */
#define RC5_EXTI_IRQHandler    EXTI0_IRQHandler     /* RC5 IRQ handler */

В случае неустойчиво работы в файле RC5_IR_Emul_Receiver.с можно поэкспериментировать с временными интервалами.

#define   NOMINAL_HALF_BIT_TIME_US   889  /* Nominal half bit time in µs */
#define   MIN_HALF_BIT_TIME_US       640  /* Minimum half bit time in µs */
#define   MAX_HALF_BIT_TIME_US       1140 /* Maximum half bit time in µs */

#define   NOMINAL_FULL_BIT_TIME_US   1778 /* Nominal Full bit time in µs */
#define   MIN_FULL_BIT_TIME_US       1340 /* Minimum Full bit time in µs */
#define   MAX_FULL_BIT_TIME_US       2220 /* Maximum Full bit time in µs */
#include "RC5_IR_Emul_Receiver.h"
#include "stdio.h"
#include "sys_init.h"


extern StatusYesOrNo RC5_FrameReceived;
RC5Frame_TypeDef RC5_Frame;
uint8_t RC5_TogglePrevious = 0;
StatusYesOrNo FirstTimeIssued = YES;


void SetupUSART();

int main(void)
{

        RC5_Receiver_Init();
        SetupUSART();
    while(1)
    {
        /* If RC5 frame has been received, then decode it */
             if (RC5_FrameReceived == YES)
             {


                /* Get the RC5 frame */
                RC5_Frame = RC5_Decode();


                USART_SendData(USART1,RC5_Frame.Command);


             }
             __WFI();
    }
}



/***************************************************************************//**
 * @brief Init USART1
 ******************************************************************************/
void SetupUSART()
{

      GPIO_InitTypeDef  GPIO_InitStructure;
      USART_InitTypeDef USART_InitStructure;

      /* Enable GPIOA clock                                                   */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

      /* Configure USART1 Rx (PA10) as input floating                         */
      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOA, &GPIO_InitStructure);

      /* Configure USART1 Tx (PA9) as alternate function push-pull            */
      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
      GPIO_Init(GPIOA, &GPIO_InitStructure);

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
      /* USART1 configured as follow:
            - BaudRate = 9600 baud
            - Word Length = 8 Bits
            - One Stop Bit
            - No parity
            - Hardware flow control disabled (RTS and CTS signals)
            - Receive and transmit enabled
            - USART Clock disabled
            - USART CPOL: Clock is active low
            - USART CPHA: Data is captured on the middle
            - USART LastBit: The clock pulse of the last data bit is not output to
                             the SCLK pin
      */
      USART_InitStructure.USART_BaudRate            = 9600;
      USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
      USART_InitStructure.USART_StopBits            = USART_StopBits_1;
      USART_InitStructure.USART_Parity              = USART_Parity_No ;
      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
      USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
      USART_Init(USART1, &USART_InitStructure);
      USART_Cmd(USART1, ENABLE);
}

PDF manual Implementing receivers for infrared remote control protocols using STM32F10xxx microcontrollers

Обратная связь

Интересуют вопросы реализации алгоритмов, программирования, выбора электроники и прочая информация, постараюсь осветить в отдельных статьях

пишите мне на netdm@mail.ru