good decoder and encoder send
This commit is contained in:
parent
69d452721f
commit
c54733fdf7
|
@ -51,4 +51,33 @@ void STS_RF_Send_AddressBit_and_CmdBit(uint8_t *rf_payload, uint8_t rf_length);
|
||||||
void EV1527Reset(void);
|
void EV1527Reset(void);
|
||||||
void EV1527Decode(uint32_t v);
|
void EV1527Decode(uint32_t v);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// #include "stm32f10x.h"
|
||||||
|
void EXTI_PB11_Config(void);
|
||||||
|
void IrDa_Init(void);
|
||||||
|
uint8_t Get_Pulse_Time(void);
|
||||||
|
uint8_t IrDa_Process(void);
|
||||||
|
|
||||||
|
#define IRDA_ID 0
|
||||||
|
|
||||||
|
//红外遥控使用的GPIO及时钟
|
||||||
|
#define IRDA_GPIO_PORT GPIOE
|
||||||
|
#define IRDA_GPIO_CLK RCC_APB2Periph_GPIOE
|
||||||
|
#define IRDA_GPIO_PIN GPIO_Pin_5
|
||||||
|
#define IRDA_GPIO_PORT_SOURCE GPIO_PortSourceGPIOE
|
||||||
|
#define IRDA_GPIO_PIN_SOURCE GPIO_PinSource5
|
||||||
|
|
||||||
|
//中断相关
|
||||||
|
#define IRDA_EXTI_LINE EXTI_Line5
|
||||||
|
#define IRDA_EXTI_IRQN EXTI9_5_IRQn
|
||||||
|
#define IRDA_EXTI_IRQHANDLER_FUN EXTI9_5_IRQHandler
|
||||||
|
|
||||||
|
//读取引脚的电平
|
||||||
|
#define IrDa_DATA_IN() GPIO_ReadInputDataBit(IRDA_GPIO_PORT,IRDA_GPIO_PIN)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -90,8 +90,16 @@ void Error_Handler(void);
|
||||||
#define USART1_TX_GPIO_Port GPIOB
|
#define USART1_TX_GPIO_Port GPIOB
|
||||||
|
|
||||||
#ifdef RC
|
#ifdef RC
|
||||||
|
|
||||||
#define TIM1_PRESCALER_VALUE 47L // 1 us for stm32wle5xx 48Mhz
|
#define TIM1_PRESCALER_VALUE 47L // 1 us for stm32wle5xx 48Mhz
|
||||||
#define TIM1_PERIOD_VALUE 79L // 80 us
|
#define TIM1_PERIOD_VALUE 9L // 10 us
|
||||||
|
|
||||||
|
#define TIM2_PRESCALER_VALUE (uint32_t)(((SystemCoreClock) /(1000000)) - 1)
|
||||||
|
// make it 1 us interval
|
||||||
|
#define TIM2_PERIOD_VALUE (90 - 1)
|
||||||
|
// make it 40 us interval
|
||||||
|
#define PRESCALER_VALUE TIM2_PRESCALER_VALUE
|
||||||
|
#define PERIOD_VALUE TIM2_PERIOD_VALUE
|
||||||
|
|
||||||
// REMOTE CONTROL EV1527/HS1527 LORA-WAN RELAY NODE
|
// REMOTE CONTROL EV1527/HS1527 LORA-WAN RELAY NODE
|
||||||
|
|
||||||
|
@ -172,7 +180,7 @@ void Error_Handler(void);
|
||||||
#define RF_Receive_GPIO_Port GPIOA
|
#define RF_Receive_GPIO_Port GPIOA
|
||||||
#define RF_Receive_GPIO_Pin GPIO_PIN_9
|
#define RF_Receive_GPIO_Pin GPIO_PIN_9
|
||||||
#define RF_Receive_GPIO_CLK_EN() __HAL_RCC_GPIOA_CLK_ENABLE();
|
#define RF_Receive_GPIO_CLK_EN() __HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
#define RF_Receive_Data_In() HAL_GPIO_ReadPin(RF_Receive_GPIO_Port, RF_Receive_GPIO_Pin)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -39,8 +39,9 @@ extern TIM_HandleTypeDef htim1;
|
||||||
|
|
||||||
/* USER CODE BEGIN Prototypes */
|
/* USER CODE BEGIN Prototypes */
|
||||||
void MX_TIM1_Init(void);
|
void MX_TIM1_Init(void);
|
||||||
|
void MX_TIM2_Init(void);
|
||||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||||
|
uint8_t Get_Pulse_Time(void);
|
||||||
/* USER CODE END Prototypes */
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
#include "ev1527.h"
|
#include "ev1527.h"
|
||||||
volatile uint32_t TIM1_cnt=0;
|
volatile uint32_t TIM1_cnt=0;
|
||||||
// 定时周期
|
// 定时周期
|
||||||
#define TIME_CYCLE 80
|
//#define TIME_CYCLE 80
|
||||||
|
#define TIME_CYCLE PERIOD_VALUE
|
||||||
// #define TIME_CYCLE 20
|
// #define TIME_CYCLE 20
|
||||||
// 定义引导码的最小和最大持续时间(单位:us)
|
// 定义引导码的最小和最大持续时间(单位:us)
|
||||||
#define MIN_LEAD_CODE (5600 / TIME_CYCLE)
|
#define MIN_LEAD_CODE (5600 / TIME_CYCLE)
|
||||||
#define MAX_LEAD_CODE (16000 / TIME_CYCLE)
|
#define MAX_LEAD_CODE (16000 / TIME_CYCLE)
|
||||||
|
|
||||||
// 定义数据位持续时间的最小和最大范围(单位:us)
|
// 定义数据位持续时间的最小和最大范围(单位:us)
|
||||||
#define MIN_BIT_DURATION (80 / TIME_CYCLE)
|
#define MIN_BIT_DURATION (100 / TIME_CYCLE)
|
||||||
#define MAX_BIT_DURATION (2400 / TIME_CYCLE)
|
#define MAX_BIT_DURATION (2400 / TIME_CYCLE)
|
||||||
|
|
||||||
// 定义功能字节在接收缓冲区中的索引位置
|
// 定义功能字节在接收缓冲区中的索引位置
|
||||||
|
@ -84,28 +85,21 @@ void RF_Signal_Decode(void)
|
||||||
// 判断是否低电平
|
// 判断是否低电平
|
||||||
if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET)
|
if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET)
|
||||||
{
|
{
|
||||||
// printf("_");
|
|
||||||
// Lead_Code_Count++;
|
Lead_Code_Count++;
|
||||||
// Lead_Code_Count = TIM1_cnt - Lead_Code_Count_Start;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else // 高电平判断范围
|
else // 高电平判断范围
|
||||||
{
|
{
|
||||||
|
|
||||||
Lead_Code_Count = TIM1_cnt - Lead_Code_Count_Start;
|
|
||||||
printf("+");
|
|
||||||
// 判断引导码范围是否合法
|
// 判断引导码范围是否合法
|
||||||
|
|
||||||
if (Lead_Code_Count >= MIN_LEAD_CODE && Lead_Code_Count <= MAX_LEAD_CODE)
|
if (Lead_Code_Count >= MIN_LEAD_CODE && Lead_Code_Count <= MAX_LEAD_CODE)
|
||||||
{
|
{
|
||||||
Lead_Code_Count = 0;
|
Lead_Code_Count = 0;
|
||||||
Reset_Decode_Parameters(); // 重置解码参数
|
Reset_Decode_Parameters(); // 重置解码参数
|
||||||
RF_Decode_State = HIGH_BIT; // 进入高位数据位判断状态
|
RF_Decode_State = HIGH_BIT; // 进入高位数据位判断状态
|
||||||
printf("+");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf(".");
|
|
||||||
Reset_Decode_Parameters(); // 引导码范围不合法,重置解码参数
|
Reset_Decode_Parameters(); // 引导码范围不合法,重置解码参数
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,20 +109,16 @@ void RF_Signal_Decode(void)
|
||||||
// 判断是否高电平
|
// 判断是否高电平
|
||||||
if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_SET)
|
if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_SET)
|
||||||
{
|
{
|
||||||
// High_Bit_Count++;
|
High_Bit_Count++;
|
||||||
// High_Bit_Count = TIM1_cnt;
|
|
||||||
High_Bit_Count_Start = TIM1_cnt;
|
|
||||||
}
|
}
|
||||||
else // 低电平判断范围
|
else // 低电平判断范围
|
||||||
{
|
{
|
||||||
High_Bit_Count = TIM1_cnt - High_Bit_Count_Start;
|
|
||||||
// 判断高位数据位范围是否合法
|
// 判断高位数据位范围是否合法
|
||||||
if (High_Bit_Count >= MIN_BIT_DURATION && High_Bit_Count <= MAX_BIT_DURATION)
|
if (High_Bit_Count >= MIN_BIT_DURATION && High_Bit_Count <= MAX_BIT_DURATION)
|
||||||
{
|
{
|
||||||
High_Bit_Duration = High_Bit_Count; // 保存计数值,用于区分0和1
|
High_Bit_Duration = High_Bit_Count; // 保存计数值,用于区分0和1
|
||||||
High_Bit_Count = 0;
|
High_Bit_Count = 0;
|
||||||
RF_Decode_State = LOW_BIT; // 进入低位数据位判断状态
|
RF_Decode_State = LOW_BIT; // 进入低位数据位判断状态
|
||||||
printf("-");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -141,20 +131,16 @@ void RF_Signal_Decode(void)
|
||||||
// 判断是否低电平
|
// 判断是否低电平
|
||||||
if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET)
|
if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET)
|
||||||
{
|
{
|
||||||
//Low_Bit_Count++;
|
Low_Bit_Count++;
|
||||||
// Low_Bit_Count = TIM1_cnt;
|
|
||||||
Low_Bit_Count_Start = TIM1_cnt;
|
|
||||||
}
|
}
|
||||||
else // 高电平判断范围
|
else // 高电平判断范围
|
||||||
{
|
{
|
||||||
Low_Bit_Count = TIM1_cnt - Low_Bit_Count_Start;
|
|
||||||
// 判断低位数据位范围是否合法
|
// 判断低位数据位范围是否合法
|
||||||
if (Low_Bit_Count >= MIN_BIT_DURATION && Low_Bit_Count <= MAX_BIT_DURATION)
|
if (Low_Bit_Count >= MIN_BIT_DURATION && Low_Bit_Count <= MAX_BIT_DURATION)
|
||||||
{
|
{
|
||||||
Low_Bit_Duration = Low_Bit_Count; // 保存计数值,用于区分0和1
|
Low_Bit_Duration = Low_Bit_Count; // 保存计数值,用于区分0和1
|
||||||
Low_Bit_Count = 0;
|
Low_Bit_Count = 0;
|
||||||
RF_Decode_State = DATA_PROCESS; // 进入数据处理状态
|
RF_Decode_State = DATA_PROCESS; // 进入数据处理状态
|
||||||
printf("o");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -302,10 +288,6 @@ void Reset_Decode_Parameters(void)
|
||||||
High_Bit_Duration = 0;
|
High_Bit_Duration = 0;
|
||||||
Low_Bit_Duration = 0;
|
Low_Bit_Duration = 0;
|
||||||
RF_Decode_State = LEAD_CODE;
|
RF_Decode_State = LEAD_CODE;
|
||||||
|
|
||||||
Lead_Code_Count_Start = TIM1_cnt;
|
|
||||||
High_Bit_Count_Start = TIM1_cnt;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**----------------------------------------------------------------------------------------------**
|
/**----------------------------------------------------------------------------------------------**
|
||||||
|
@ -383,12 +365,13 @@ void Execute_Function(void)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// 默认操作
|
// 默认操作
|
||||||
printf("\r\n --- code =%02x",Received_Buffer[FUNCTION_BYTE_INDEX]);
|
// printf("\r\n --- code =%02x",Received_Buffer[FUNCTION_BYTE_INDEX]);
|
||||||
|
printf("\r\n ADDR= %02x %02x %02x CMD=%02x",Received_Buffer[0],Received_Buffer[1],Received_Buffer[2], 0x0F&Received_Buffer[FUNCTION_BYTE_INDEX]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
uint8_t RF;
|
uint8_t RF;
|
||||||
uint8_t decode_ok; //解码成功
|
uint8_t decode_ok; //解码成功
|
||||||
uint8_t hh_w,ll_w; //高,低电平宽度
|
uint8_t hh_w,ll_w; //高,低电平宽度
|
||||||
|
@ -404,6 +387,7 @@ uint8_t old_rc5; //保存上一次查询到的电平状态
|
||||||
uint8_t tb_ok; //接收到同步的马时置1
|
uint8_t tb_ok; //接收到同步的马时置1
|
||||||
uint8_t D0,D1,D2,D3;
|
uint8_t D0,D1,D2,D3;
|
||||||
uint16_t s,s1;
|
uint16_t s,s1;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint8_t bt_auto; //自动设置遥控接收波特率标志
|
uint8_t bt_auto; //自动设置遥控接收波特率标志
|
||||||
extern uint8_t rf_data[4];
|
extern uint8_t rf_data[4];
|
||||||
|
@ -541,5 +525,358 @@ void STS_RF_Send_AddressBit_and_CmdBit(uint8_t *rf_payload, uint8_t rf_length)
|
||||||
// printf("ending bits ...\r\n");
|
// printf("ending bits ...\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file bsp_irda.c
|
||||||
|
* @author fire
|
||||||
|
* @version V1.0
|
||||||
|
* @date 2013-xx-xx
|
||||||
|
* @brief 红外遥控器接口
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* 实验平台:野火 F103-指南者 STM32 开发板
|
||||||
|
* 论坛 :http://www.firebbs.cn
|
||||||
|
* 淘宝 :https://fire-stm32.taobao.com
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
//#include "./IrDa/bsp_irda.h"
|
||||||
|
//#include "./systick/bsp_SysTick.h"
|
||||||
|
//#include "./led/bsp_led.h"
|
||||||
|
|
||||||
|
uint32_t frame_data=0; /* 一帧数据缓存 */
|
||||||
|
uint8_t frame_cnt=0;
|
||||||
|
uint8_t frame_flag=0; /* 一帧数据接收完成标志 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 配置嵌套向量中断控制器NVIC
|
||||||
|
* @param 无
|
||||||
|
* @retval 无
|
||||||
|
*/
|
||||||
|
static void NVIC_Configuration(void)
|
||||||
|
{
|
||||||
|
NVIC_InitTypeDef NVIC_InitStructure;
|
||||||
|
|
||||||
|
/* Configure one bit for preemption priority */
|
||||||
|
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
|
||||||
|
|
||||||
|
/* 配置P[A|B|C|D|E]11为中断源 */
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannel = IRDA_EXTI_IRQN;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||||
|
NVIC_Init(&NVIC_InitStructure);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 初始化红外接收头1838用到的IO */
|
||||||
|
void IrDa_Init(void)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
EXTI_InitTypeDef EXTI_InitStructure;
|
||||||
|
|
||||||
|
/* config the extiline clock and AFIO clock */
|
||||||
|
RCC_APB2PeriphClockCmd(IRDA_GPIO_CLK | RCC_APB2Periph_AFIO,ENABLE);
|
||||||
|
|
||||||
|
/* config the NVIC */
|
||||||
|
NVIC_Configuration();
|
||||||
|
|
||||||
|
/* EXTI line gpio config */
|
||||||
|
GPIO_InitStructure.GPIO_Pin = IRDA_GPIO_PIN;
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
||||||
|
GPIO_Init(IRDA_GPIO_PORT, &GPIO_InitStructure);
|
||||||
|
|
||||||
|
/* EXTI line mode config */
|
||||||
|
GPIO_EXTILineConfig(IRDA_GPIO_PORT_SOURCE, IRDA_GPIO_PIN_SOURCE);
|
||||||
|
EXTI_InitStructure.EXTI_Line = IRDA_EXTI_LINE;
|
||||||
|
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
||||||
|
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
|
||||||
|
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||||||
|
EXTI_Init(&EXTI_InitStructure);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 获取高电平的时间 */
|
||||||
|
uint8_t Get_Pulse_Time(void)
|
||||||
|
{
|
||||||
|
uint8_t time = 0;
|
||||||
|
while( IrDa_DATA_IN() )
|
||||||
|
{
|
||||||
|
time ++;
|
||||||
|
Delay_us(2); // 延时 20us
|
||||||
|
if(time == 250)
|
||||||
|
return time; // 超时溢出
|
||||||
|
}
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 帧数据有4个字节,第一个字节是遥控的ID,第二个字节是第一个字节的反码
|
||||||
|
* 第三个数据是遥控的真正的键值,第四个字节是第三个字节的反码
|
||||||
|
*/
|
||||||
|
uint8_t IrDa_Process(void)
|
||||||
|
{
|
||||||
|
uint8_t first_byte, sec_byte, tir_byte, fou_byte;
|
||||||
|
|
||||||
|
first_byte = frame_data >> 24;
|
||||||
|
sec_byte = (frame_data>>16) & 0xff;
|
||||||
|
tir_byte = frame_data >> 8;
|
||||||
|
fou_byte = frame_data;
|
||||||
|
|
||||||
|
/* 记得清标志位 */
|
||||||
|
frame_flag = 0;
|
||||||
|
|
||||||
|
if( (first_byte==(uint8_t)~sec_byte) && (first_byte==IRDA_ID) )
|
||||||
|
{
|
||||||
|
if( tir_byte == (u8)~fou_byte )
|
||||||
|
return tir_byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; /* 错误返回 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// IO 线中断, 接红外接收头的数据管脚
|
||||||
|
void IRDA_EXTI_IRQHANDLER_FUN(void)
|
||||||
|
{
|
||||||
|
uint8_t pulse_time = 0;
|
||||||
|
uint8_t leader_code_flag = 0; /* 引导码标志位,当引导码出现时,表示一帧数据开始 */
|
||||||
|
uint8_t irda_data = 0; /* 数据暂存位 */
|
||||||
|
|
||||||
|
if(EXTI_GetITStatus(IRDA_EXTI_LINE) != RESET) /* 确保是否产生了EXTI Line中断 */
|
||||||
|
{
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
if( IrDa_DATA_IN()== SET ) /* 只测量高电平的时间 */
|
||||||
|
{
|
||||||
|
pulse_time = Get_Pulse_Time();
|
||||||
|
|
||||||
|
/* >=5ms 不是有用信号 当出现干扰或者连发码时,也会break跳出while(1)循环 */
|
||||||
|
if( pulse_time >= 250 )
|
||||||
|
{
|
||||||
|
break; /* 跳出while(1)循环 */
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pulse_time>=200 && pulse_time<250) /* 获得前导位 4ms~4.5ms */
|
||||||
|
{
|
||||||
|
leader_code_flag = 1;
|
||||||
|
}
|
||||||
|
else if(pulse_time>=10 && pulse_time<50) /* 0.56ms: 0.2ms~1ms */
|
||||||
|
{
|
||||||
|
irda_data = 0;
|
||||||
|
}
|
||||||
|
else if(pulse_time>=50 && pulse_time<100) /* 1.68ms:1ms~2ms */
|
||||||
|
{
|
||||||
|
irda_data =1 ;
|
||||||
|
}
|
||||||
|
else if( pulse_time>=100 && pulse_time<=200 ) /* 2.1ms:2ms~4ms */
|
||||||
|
{/* 连发码,在第二次中断出现 */
|
||||||
|
frame_flag = 1; /* 一帧数据接收完成 */
|
||||||
|
frame_cnt++; /* 按键次数加1 */
|
||||||
|
isr_cnt ++; /* 进中断一次加1 */
|
||||||
|
break; /* 跳出while(1)循环 */
|
||||||
|
}
|
||||||
|
|
||||||
|
if( leader_code_flag == 1 )
|
||||||
|
{/* 在第一次中断中完成 */
|
||||||
|
frame_data <<= 1;
|
||||||
|
frame_data += irda_data;
|
||||||
|
frame_cnt = 0;
|
||||||
|
isr_cnt = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}// while(1)
|
||||||
|
EXTI_ClearITPendingBit(IRDA_EXTI_LINE); //清除中断标志位
|
||||||
|
//LED2_TOGGLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define CLI() __set_PRIMASK(1) /* 关闭总中断 */
|
||||||
|
#define SEI() __set_PRIMASK(0) /* 开放总中断 */
|
||||||
|
|
||||||
|
extern uint8_t frame_flag;
|
||||||
|
extern uint8_t isr_cnt;
|
||||||
|
extern uint8_t frame_cnt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 主函数
|
||||||
|
* @param 无
|
||||||
|
* @retval 无
|
||||||
|
*/
|
||||||
|
int irda_main(void)
|
||||||
|
{
|
||||||
|
uint8_t key_val;
|
||||||
|
|
||||||
|
/* config the led */
|
||||||
|
LED_GPIO_Config();
|
||||||
|
LED1_ON;
|
||||||
|
|
||||||
|
/* 配置SysTick 为10us中断一次 */
|
||||||
|
SysTick_Init();
|
||||||
|
|
||||||
|
/* 重新配置SysTick的中断优先级为最高,要不然SysTick延时中断抢占不了IO EXTI中断
|
||||||
|
* 因为SysTick初始化时默认配置的优先级是最低的
|
||||||
|
* 或者当你用其他定时器做延时的时候,要配置定时器的优先级高于IO EXTI中断的优先级
|
||||||
|
*/
|
||||||
|
NVIC_SetPriority (SysTick_IRQn, 0);
|
||||||
|
|
||||||
|
|
||||||
|
/* USART1 config 115200 8-N-1 */
|
||||||
|
USART_Config();
|
||||||
|
printf("\r\n 这是一个红外遥控发射与接收实验 \r\n");
|
||||||
|
|
||||||
|
/* 初始化红外接收头CP1838用到的IO */
|
||||||
|
IrDa_Init();
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
if( frame_flag == 1 ) /* 一帧红外数据接收完成 */
|
||||||
|
{
|
||||||
|
key_val = IrDa_Process();
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 按键次数frame_cnt=%d \r\n",frame_cnt);
|
||||||
|
printf("\r\n 中断次数isr_cnt=%d \r\n",isr_cnt);
|
||||||
|
|
||||||
|
/* 不同的遥控器面板对应不同的键值,需要实际测量 */
|
||||||
|
switch( key_val )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n Error \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 162:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n POWER \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 226:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n MENU \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 34:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n TEST \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n + \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 194:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n RETURN \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 224:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n |<< \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 168:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n > \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 144:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n >>| \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 104:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 0 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 152:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n - \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 176:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n C \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 48:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 1 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 24:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 2 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 122:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 3 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 16:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 4 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 56:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 5 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 90:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 6 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 66:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 7 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 74:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 8 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 82:
|
||||||
|
LED1_TOGGLE;
|
||||||
|
printf("\r\n key_val=%d \r\n",key_val);
|
||||||
|
printf("\r\n 9 \r\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -125,8 +125,8 @@ void MX_GPIO_Init(void)
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
GPIO_InitStruct.Pin = RF_Receive_GPIO_Pin;
|
GPIO_InitStruct.Pin = RF_Receive_GPIO_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; //GPIO_MODE_INPUT; //GPIO_MODE_IT_RISING_FALLING;
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; //GPIO_MODE_INPUT; //GPIO_MODE_IT_RISING_FALLING;
|
||||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
HAL_GPIO_Init(RF_Receive_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(RF_Receive_GPIO_Port, &GPIO_InitStruct);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
// #include "sts_aq_o3.h"
|
// #include "sts_aq_o3.h"
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PTD */
|
/* USER CODE BEGIN PTD */
|
||||||
TIM_HandleTypeDef htim1;
|
TIM_HandleTypeDef htim1, htim2;
|
||||||
//uint8_t rf_payload[3]={0xF8,0xCD,0x07}, rf_length=3;
|
//uint8_t rf_payload[3]={0xF8,0xCD,0x07}, rf_length=3;
|
||||||
uint8_t rf_payload[3]={0x1F,0xB3,0xE0}, rf_length=3; // RC_PROJECTOR
|
uint8_t rf_payload[3]={0x1F,0xB3,0xE0}, rf_length=3; // RC_PROJECTOR
|
||||||
uint8_t sos_rf_payload[3]={0x82,0x73,0xA0}, sos_rf_length=3; // sos_button
|
uint8_t sos_rf_payload[3]={0x82,0x73,0xA0}, sos_rf_length=3; // sos_button
|
||||||
|
@ -137,10 +137,26 @@ int main(void)
|
||||||
|
|
||||||
// MX_USART1_UART_Init();
|
// MX_USART1_UART_Init();
|
||||||
|
|
||||||
MX_TIM1_Init();
|
//MX_TIM1_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
|
|
||||||
|
/*## Start the TIM Base generation in interrupt mode ####################*/
|
||||||
|
/* Start Channel1 */
|
||||||
|
if (HAL_TIM_Base_Start_IT(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
/* Starting Error */
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
printf("start \r\n");
|
printf("start \r\n");
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// EV1527_Init();
|
// EV1527_Init();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -506,6 +522,8 @@ void Error_Handler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN Error_Handler_Debug */
|
/* USER CODE BEGIN Error_Handler_Debug */
|
||||||
/* User can add his own implementation to report the HAL error return state */
|
/* User can add his own implementation to report the HAL error return state */
|
||||||
|
|
||||||
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -150,35 +150,18 @@ void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* htim_ic)
|
||||||
*/
|
*/
|
||||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||||
{
|
{
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
if(htim_base->Instance==TIM1)
|
if(htim_base->Instance==TIM2)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM1_MspInit 0 */
|
/* USER CODE BEGIN TIM1_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspInit 0 */
|
/* USER CODE END TIM1_MspInit 0 */
|
||||||
/* Peripheral clock enable */
|
/* Peripheral clock enable */
|
||||||
__HAL_RCC_TIM1_CLK_ENABLE();
|
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
/* TIM1 interrupt Init */
|
||||||
/**TIM1 GPIO Configuration
|
HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);
|
||||||
PA9 ------> TIM1_CH2
|
HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
||||||
*/
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_9;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
|
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* TIM1 interrupt Init */
|
|
||||||
HAL_NVIC_SetPriority(TIM1_BRK_IRQn, 0, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(TIM1_BRK_IRQn);
|
|
||||||
HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
|
|
||||||
HAL_NVIC_SetPriority(TIM1_TRG_COM_IRQn, 0, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(TIM1_TRG_COM_IRQn);
|
|
||||||
HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
|
|
||||||
/* USER CODE BEGIN TIM1_MspInit 1 */
|
/* USER CODE BEGIN TIM1_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspInit 1 */
|
/* USER CODE END TIM1_MspInit 1 */
|
||||||
|
@ -194,27 +177,19 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||||
*/
|
*/
|
||||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
||||||
{
|
{
|
||||||
if(htim_base->Instance==TIM1)
|
if(htim_base->Instance==TIM2)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM1_MspDeInit 0 */
|
/* USER CODE BEGIN TIM2_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspDeInit 0 */
|
/* USER CODE END TIM2_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM1_CLK_DISABLE();
|
__HAL_RCC_TIM2_CLK_DISABLE();
|
||||||
|
|
||||||
/**TIM1 GPIO Configuration
|
/* TIM2 interrupt DeInit */
|
||||||
PA9 ------> TIM1_CH2
|
HAL_NVIC_DisableIRQ(TIM2_IRQn);
|
||||||
*/
|
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9);
|
|
||||||
|
|
||||||
/* TIM1 interrupt DeInit */
|
/* USER CODE END TIM2_MspDeInit 1 */
|
||||||
HAL_NVIC_DisableIRQ(TIM1_BRK_IRQn);
|
|
||||||
HAL_NVIC_DisableIRQ(TIM1_UP_IRQn);
|
|
||||||
HAL_NVIC_DisableIRQ(TIM1_TRG_COM_IRQn);
|
|
||||||
HAL_NVIC_DisableIRQ(TIM1_CC_IRQn);
|
|
||||||
/* USER CODE BEGIN TIM1_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM1_MspDeInit 1 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ extern DMA_HandleTypeDef hdma_usart2_tx;
|
||||||
extern UART_HandleTypeDef huart2;
|
extern UART_HandleTypeDef huart2;
|
||||||
extern UART_HandleTypeDef huart1;
|
extern UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
extern TIM_HandleTypeDef htim1;
|
extern TIM_HandleTypeDef htim1, htim2;
|
||||||
|
|
||||||
/* USER CODE BEGIN EV */
|
/* USER CODE BEGIN EV */
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ void PendSV_Handler(void)
|
||||||
void SysTick_Handler(void)
|
void SysTick_Handler(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||||
|
// HAL_IncTick();
|
||||||
/* USER CODE END SysTick_IRQn 0 */
|
/* USER CODE END SysTick_IRQn 0 */
|
||||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||||
|
|
||||||
|
@ -459,10 +459,9 @@ void SUBGHZ_Radio_IRQHandler(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
#if 0
|
#if 1
|
||||||
void TIM1_IRQHandler(void)
|
void TIM1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
TIM1_cnt++;
|
|
||||||
HAL_TIM_IRQHandler(&htim1);
|
HAL_TIM_IRQHandler(&htim1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -499,4 +498,20 @@ void TIM1_IC_IRQHandler(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles TIM2 Global Interrupt.
|
||||||
|
*/
|
||||||
|
void TIM2_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM2_IRQn 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_IRQn 0 */
|
||||||
|
HAL_TIM_IRQHandler(&htim2);
|
||||||
|
/* USER CODE BEGIN TIM2_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|
|
@ -382,86 +382,19 @@ void HAL_Delay(__IO uint32_t Delay)
|
||||||
/* USER CODE END HAL_Delay_2 */
|
/* USER CODE END HAL_Delay_2 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE BEGIN Overload_HAL_weaks */
|
/* USER CODE BEGIN Overload_HAL_weaks */
|
||||||
/**
|
/**
|
||||||
* @note This function overwrites the __weak one from HAL
|
* @note This function overwrites the __weak one from HAL
|
||||||
*/
|
*/
|
||||||
void HAL_Delay_Us(uint32_t uDelay)
|
void HAL_Delay_Us(uint32_t uDelay)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
uint32_t startval, tickn, delays, wait;
|
|
||||||
startval = SysTick->VAL;
|
|
||||||
tickn = HAL_GetTick();
|
|
||||||
delays = uDelay * 48;
|
|
||||||
if (delays > startval)
|
|
||||||
{
|
|
||||||
while (HAL_GetTick() == tickn) {}
|
|
||||||
wait = 48000 + startval -delays;
|
|
||||||
while (wait < SysTick->VAL) {};
|
|
||||||
|
|
||||||
}else {
|
|
||||||
wait = startval - delays;
|
|
||||||
while(wait < SysTick->VAL && HAL_GetTick() == tickn)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
uint32_t g_fac_us=48;
|
|
||||||
uint32_t ticks;
|
|
||||||
uint32_t told, tnow, tcnt =0;
|
|
||||||
uint32_t reload = SysTick->LOAD;
|
|
||||||
|
|
||||||
ticks = uDelay * g_fac_us;
|
|
||||||
|
|
||||||
told = SysTick->VAL;
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
tnow = SysTick->VAL;
|
|
||||||
if (tnow != told)
|
|
||||||
{
|
|
||||||
if (tnow < told)
|
|
||||||
{
|
|
||||||
tcnt += told -tnow;
|
|
||||||
} else {
|
|
||||||
tcnt += reload - tnow + told;
|
|
||||||
}
|
|
||||||
told = tnow;
|
|
||||||
if (tcnt >= ticks)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
__IO uint32_t delay= uDelay*48/8;
|
__IO uint32_t delay= uDelay*48/8;
|
||||||
do {__NOP();} while(delay --);
|
do {__NOP();} while(delay --);
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
|
||||||
/* TIMER_IF can be based on other counter the SysTick e.g. RTC */
|
|
||||||
/* USER CODE BEGIN HAL_Delay_1 */
|
|
||||||
uint32_t startval, tickn, delays, wait;
|
|
||||||
startval = SysTick->VAL;
|
|
||||||
tickn = HAL_GetTick();
|
|
||||||
// sysclock = 48000
|
|
||||||
delays = uDelay*48;
|
|
||||||
if (delays > startval)
|
|
||||||
{
|
|
||||||
while(HAL_GetTick() == tickn) ;
|
|
||||||
wait = 48000 + startval - delays;
|
|
||||||
while(wait < SysTick->VAL) ;
|
|
||||||
} else {
|
|
||||||
wait = startval - delays;
|
|
||||||
while (wait < SysTick->VAL && HAL_GetTick() == tickn) ;
|
|
||||||
}
|
|
||||||
/* USER CODE END HAL_Delay_1 */
|
|
||||||
#endif
|
|
||||||
/* USER CODE BEGIN HAL_Delay_2 */
|
/* USER CODE BEGIN HAL_Delay_2 */
|
||||||
|
|
||||||
/* USER CODE END HAL_Delay_2 */
|
/* USER CODE END HAL_Delay_2 */
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "ev1527.h"
|
#include "ev1527.h"
|
||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
extern TIM_HandleTypeDef htim1;
|
extern TIM_HandleTypeDef htim1, htim2;
|
||||||
|
|
||||||
// DMA_HandleTypeDef hdma_tim1_ch1; //PA8 WS2812B
|
// DMA_HandleTypeDef hdma_tim1_ch1; //PA8 WS2812B
|
||||||
|
|
||||||
|
@ -89,20 +89,24 @@ void MX_TIM1_Init(void)
|
||||||
htim1.Instance = TIM1;
|
htim1.Instance = TIM1;
|
||||||
htim1.Init.Prescaler = TIM1_PRESCALER_VALUE;
|
htim1.Init.Prescaler = TIM1_PRESCALER_VALUE;
|
||||||
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
htim1.Init.Period = 0xffff; // TIM1_PERIOD_VALUE; // 0xffff; // TIM1_PERIOD_VALUE;
|
htim1.Init.Period = TIM1_PERIOD_VALUE; // TIM1_PERIOD_VALUE; // 0xffff; // TIM1_PERIOD_VALUE;
|
||||||
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
htim1.Init.RepetitionCounter = 0;
|
htim1.Init.RepetitionCounter = 0;
|
||||||
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
#if 0
|
#if 1
|
||||||
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
if (HAL_TIM_IC_Init(&htim1) != HAL_OK)
|
if (HAL_TIM_IC_Init(&htim1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
|
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
|
||||||
sSlaveConfig.InputTrigger = TIM_TS_TI2FP2;
|
sSlaveConfig.InputTrigger = TIM_TS_TI2FP2;
|
||||||
|
@ -148,6 +152,54 @@ void MX_TIM1_Init(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = PRESCALER_VALUE;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = PERIOD_VALUE;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
|
|
||||||
#define EV1527_H4 328 // NARROW PULSE WIDTH us, varies on different remote control
|
#define EV1527_H4 328 // NARROW PULSE WIDTH us, varies on different remote control
|
||||||
|
@ -203,6 +255,13 @@ void EV1527Decode(uint32_t v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||||
|
{
|
||||||
|
//printf(".");
|
||||||
|
RF_Signal_Decode();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
|
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
|
||||||
{
|
{
|
||||||
static uint32_t uwICValue;
|
static uint32_t uwICValue;
|
||||||
|
@ -214,9 +273,9 @@ void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
|
||||||
//printf(" cc ");
|
//printf(" cc ");
|
||||||
// RF_Signal_Decode();
|
// RF_Signal_Decode();
|
||||||
|
|
||||||
//if (TIM1 == htim->Instance)
|
if (TIM1 == htim->Instance)
|
||||||
{
|
{
|
||||||
//if ((htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2))
|
if ((htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2))
|
||||||
{
|
{
|
||||||
if (HAL_GPIO_ReadPin(RF_Receive_GPIO_Port,RF_Receive_GPIO_Pin)== GPIO_PIN_RESET)
|
if (HAL_GPIO_ReadPin(RF_Receive_GPIO_Port,RF_Receive_GPIO_Pin)== GPIO_PIN_RESET)
|
||||||
{ // Falling edge
|
{ // Falling edge
|
||||||
|
@ -665,6 +724,21 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* 获取高电平的时间 */
|
||||||
|
uint8_t Get_Pulse_Time(void)
|
||||||
|
{
|
||||||
|
uint8_t time = 0;
|
||||||
|
while( RF_Receive_Data_In() )
|
||||||
|
{
|
||||||
|
time ++;
|
||||||
|
HAL_Delay_Us(1);
|
||||||
|
if(time == 250)
|
||||||
|
return time; // 超时溢出
|
||||||
|
}
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue