Пример работы с ик пультом стандарта 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);
}
Обратная связь
Интересуют вопросы реализации алгоритмов, программирования, выбора электроники и прочая информация, постараюсь осветить в отдельных статьях
пишите мне на netdm@mail.ru