pt2262/pt2272的工作原理就是按下遥控器的按键之后,接收器的相对应引脚上就会产生一个高电平。该程序实现的功能就是遥控器按下之后,红灯亮起。采用查询法检测引脚是否为高电平。
//初始化接收器的相对应的IO口
void KEY1_Config(void)
{
GPIO_InitTypeDef GPIO_Struct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//由于检测高电平,所以设置为下拉模式,可理解为,该io口为低电平
GPIO_Struct.GPIO_Mode=GPIO_Mode_IPD;
GPIO_Struct.GPIO_Pin=KEY1_Pin;
GPIO_Init(GPIOC, &GPIO_Struct);
}
//初始化灯的LED灯的端口
void LED_R_Config(void)
{
GPIO_InitTypeDef GPIO_Struct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_Struct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Struct.GPIO_Pin=LED_R_GPIO;
GPIO_Struct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_Struct);
}
主函数也比较简单
int main(void)
{
KEY1_Config();
LED_R_Config();
//初始化之后灯的IO默认为0,所以要把它置1
GPIO_SetBits(GPIOB, GPIO_Pin_5);
for(;;)
{
//用GPIO_ReadInputDataBit函数检测是否IO口为高电平
if( GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)==SET )
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
else
{
GPIO_SetBits(GPIOB, GPIO_Pin_5);
}
}
}
在过程中又一个很重要的一点就是,要将接收器用stm32供电,或者至少要将接收器的GND与stm32的GND连接,否则会出现IO口即使上拉也会一直高电平的,灯以一直亮的现象。主要是由于接收器的输出口没有与GND形成回路,所以不会产生效果。