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 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
|
||||
|
|
|
@ -90,8 +90,16 @@ void Error_Handler(void);
|
|||
#define USART1_TX_GPIO_Port GPIOB
|
||||
|
||||
#ifdef RC
|
||||
|
||||
#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
|
||||
|
||||
|
@ -172,7 +180,7 @@ void Error_Handler(void);
|
|||
#define RF_Receive_GPIO_Port GPIOA
|
||||
#define RF_Receive_GPIO_Pin GPIO_PIN_9
|
||||
#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
|
||||
|
||||
|
||||
|
|
|
@ -39,8 +39,9 @@ extern TIM_HandleTypeDef htim1;
|
|||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
void MX_TIM1_Init(void);
|
||||
void MX_TIM2_Init(void);
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
|
||||
uint8_t Get_Pulse_Time(void);
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
#include "ev1527.h"
|
||||
volatile uint32_t TIM1_cnt=0;
|
||||
// 定时周期
|
||||
#define TIME_CYCLE 80
|
||||
//#define TIME_CYCLE 80
|
||||
#define TIME_CYCLE PERIOD_VALUE
|
||||
// #define TIME_CYCLE 20
|
||||
// 定义引导码的最小和最大持续时间(单位:us)
|
||||
#define MIN_LEAD_CODE (5600 / TIME_CYCLE)
|
||||
#define MAX_LEAD_CODE (16000 / TIME_CYCLE)
|
||||
|
||||
// 定义数据位持续时间的最小和最大范围(单位:us)
|
||||
#define MIN_BIT_DURATION (80 / TIME_CYCLE)
|
||||
#define MIN_BIT_DURATION (100 / 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)
|
||||
{
|
||||
// printf("_");
|
||||
// Lead_Code_Count++;
|
||||
// Lead_Code_Count = TIM1_cnt - Lead_Code_Count_Start;
|
||||
|
||||
Lead_Code_Count++;
|
||||
|
||||
}
|
||||
else // 高电平判断范围
|
||||
{
|
||||
|
||||
Lead_Code_Count = TIM1_cnt - Lead_Code_Count_Start;
|
||||
printf("+");
|
||||
// 判断引导码范围是否合法
|
||||
|
||||
if (Lead_Code_Count >= MIN_LEAD_CODE && Lead_Code_Count <= MAX_LEAD_CODE)
|
||||
{
|
||||
Lead_Code_Count = 0;
|
||||
Reset_Decode_Parameters(); // 重置解码参数
|
||||
RF_Decode_State = HIGH_BIT; // 进入高位数据位判断状态
|
||||
printf("+");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(".");
|
||||
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)
|
||||
{
|
||||
// High_Bit_Count++;
|
||||
// High_Bit_Count = TIM1_cnt;
|
||||
High_Bit_Count_Start = TIM1_cnt;
|
||||
High_Bit_Count++;
|
||||
}
|
||||
else // 低电平判断范围
|
||||
{
|
||||
High_Bit_Count = TIM1_cnt - High_Bit_Count_Start;
|
||||
// 判断高位数据位范围是否合法
|
||||
if (High_Bit_Count >= MIN_BIT_DURATION && High_Bit_Count <= MAX_BIT_DURATION)
|
||||
{
|
||||
High_Bit_Duration = High_Bit_Count; // 保存计数值,用于区分0和1
|
||||
High_Bit_Count = 0;
|
||||
RF_Decode_State = LOW_BIT; // 进入低位数据位判断状态
|
||||
printf("-");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -141,20 +131,16 @@ void RF_Signal_Decode(void)
|
|||
// 判断是否低电平
|
||||
if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET)
|
||||
{
|
||||
//Low_Bit_Count++;
|
||||
// Low_Bit_Count = TIM1_cnt;
|
||||
Low_Bit_Count_Start = TIM1_cnt;
|
||||
Low_Bit_Count++;
|
||||
}
|
||||
else // 高电平判断范围
|
||||
{
|
||||
Low_Bit_Count = TIM1_cnt - Low_Bit_Count_Start;
|
||||
// 判断低位数据位范围是否合法
|
||||
if (Low_Bit_Count >= MIN_BIT_DURATION && Low_Bit_Count <= MAX_BIT_DURATION)
|
||||
{
|
||||
Low_Bit_Duration = Low_Bit_Count; // 保存计数值,用于区分0和1
|
||||
Low_Bit_Count = 0;
|
||||
RF_Decode_State = DATA_PROCESS; // 进入数据处理状态
|
||||
printf("o");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -302,10 +288,6 @@ void Reset_Decode_Parameters(void)
|
|||
High_Bit_Duration = 0;
|
||||
Low_Bit_Duration = 0;
|
||||
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:
|
||||
// 默认操作
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
uint8_t RF;
|
||||
uint8_t decode_ok; //解码成功
|
||||
uint8_t hh_w,ll_w; //高,低电平宽度
|
||||
|
@ -404,6 +387,7 @@ uint8_t old_rc5; //保存上一次查询到的电平状态
|
|||
uint8_t tb_ok; //接收到同步的马时置1
|
||||
uint8_t D0,D1,D2,D3;
|
||||
uint16_t s,s1;
|
||||
#endif
|
||||
|
||||
uint8_t bt_auto; //自动设置遥控接收波特率标志
|
||||
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");
|
||||
}
|
||||
|
||||
#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
|
||||
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.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; //GPIO_MODE_INPUT; //GPIO_MODE_IT_RISING_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
HAL_GPIO_Init(RF_Receive_GPIO_Port, &GPIO_InitStruct);
|
||||
#endif
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
// #include "sts_aq_o3.h"
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* 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]={0x1F,0xB3,0xE0}, rf_length=3; // RC_PROJECTOR
|
||||
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_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");
|
||||
|
||||
while(1)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
// EV1527_Init();
|
||||
|
||||
#if 0
|
||||
|
@ -506,6 +522,8 @@ void Error_Handler(void)
|
|||
{
|
||||
/* USER CODE BEGIN Error_Handler_Debug */
|
||||
/* 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();
|
||||
while (1)
|
||||
{
|
||||
|
|
|
@ -150,35 +150,18 @@ void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* htim_ic)
|
|||
*/
|
||||
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 END TIM1_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM1_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
/**TIM1 GPIO Configuration
|
||||
PA9 ------> TIM1_CH2
|
||||
*/
|
||||
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);
|
||||
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||
|
||||
/* 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);
|
||||
HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
||||
/* USER CODE BEGIN 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)
|
||||
{
|
||||
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 */
|
||||
__HAL_RCC_TIM1_CLK_DISABLE();
|
||||
__HAL_RCC_TIM2_CLK_DISABLE();
|
||||
|
||||
/**TIM1 GPIO Configuration
|
||||
PA9 ------> TIM1_CH2
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9);
|
||||
/* TIM2 interrupt DeInit */
|
||||
HAL_NVIC_DisableIRQ(TIM2_IRQn);
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||
|
||||
/* TIM1 interrupt DeInit */
|
||||
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 */
|
||||
/* USER CODE END TIM2_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ extern DMA_HandleTypeDef hdma_usart2_tx;
|
|||
extern UART_HandleTypeDef huart2;
|
||||
extern UART_HandleTypeDef huart1;
|
||||
|
||||
extern TIM_HandleTypeDef htim1;
|
||||
extern TIM_HandleTypeDef htim1, htim2;
|
||||
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
|
@ -197,7 +197,7 @@ void PendSV_Handler(void)
|
|||
void SysTick_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||
|
||||
// HAL_IncTick();
|
||||
/* USER CODE END SysTick_IRQn 0 */
|
||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||
|
||||
|
@ -459,10 +459,9 @@ void SUBGHZ_Radio_IRQHandler(void)
|
|||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
#if 0
|
||||
#if 1
|
||||
void TIM1_IRQHandler(void)
|
||||
{
|
||||
TIM1_cnt++;
|
||||
HAL_TIM_IRQHandler(&htim1);
|
||||
}
|
||||
#endif
|
||||
|
@ -499,4 +498,20 @@ void TIM1_IC_IRQHandler(void)
|
|||
}
|
||||
|
||||
#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 */
|
||||
|
|
|
@ -382,86 +382,19 @@ void HAL_Delay(__IO uint32_t Delay)
|
|||
/* USER CODE END HAL_Delay_2 */
|
||||
}
|
||||
|
||||
|
||||
/* USER CODE BEGIN Overload_HAL_weaks */
|
||||
/**
|
||||
* @note This function overwrites the __weak one from HAL
|
||||
*/
|
||||
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
|
||||
__IO uint32_t delay= uDelay*48/8;
|
||||
do {__NOP();} while(delay --);
|
||||
#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 END HAL_Delay_2 */
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "stdio.h"
|
||||
#include "ev1527.h"
|
||||
/* USER CODE BEGIN 0 */
|
||||
extern TIM_HandleTypeDef htim1;
|
||||
extern TIM_HandleTypeDef htim1, htim2;
|
||||
|
||||
// DMA_HandleTypeDef hdma_tim1_ch1; //PA8 WS2812B
|
||||
|
||||
|
@ -89,20 +89,24 @@ void MX_TIM1_Init(void)
|
|||
htim1.Instance = TIM1;
|
||||
htim1.Init.Prescaler = TIM1_PRESCALER_VALUE;
|
||||
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.RepetitionCounter = 0;
|
||||
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
#if 0
|
||||
#if 1
|
||||
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
if (HAL_TIM_IC_Init(&htim1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
|
||||
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
|
||||
|
||||
#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)
|
||||
{
|
||||
static uint32_t uwICValue;
|
||||
|
@ -214,9 +273,9 @@ void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
|
|||
//printf(" cc ");
|
||||
// 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)
|
||||
{ // Falling edge
|
||||
|
@ -665,6 +724,21 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||
}
|
||||
#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 */
|
||||
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue