OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2946|回复: 1

有没有大哥教我怎么用红外控制待机

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-7-18
在线时间
7 小时
发表于 2020-6-4 21:53:11 | 显示全部楼层 |阅读模式
1金钱
WKUP_KD 是PA0

void Sys_Standby(void)
{  
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);        //使能PWR外设时钟
        PWR_WakeUpPinCmd(ENABLE);  //使能唤醒管脚功能
        PWR_EnterSTANDBYMode();          //进入待命(STANDBY)模式                  
}
//系统进入待机模式
void Sys_Enter_Standby(void)
{                         
        RCC_APB2PeriphResetCmd(0X01FC,DISABLE);        //复位所有IO口
        Sys_Standby();
}
//检测WKUP脚的信号
//返回值1:连续按下3s以上
//      0:错误的触发       
u8 Check_WKUP(void)
{
        u8 t=0;        //记录按下的时间
        LED0=0; //亮灯DS0
        while(1)
        {
                if(WKUP_KD)
                {
                        t++;                        //已经按下了
                        delay_ms(30);
                        if(t>=1)                //按下超过3秒钟
                        {
                                LED0=0;                 //点亮DS0
                                return 1;         //按下3s以上了
                        }
                }else
                {
                        return 0; //按下不足3秒
                }
        }
}
//中断,检测到PA0脚的一个上升沿.          
//中断线0线上的中断检测


void EXTI0_IRQHandler(void)
{                                                                                                  

        if(Check_WKUP())//关机?
        {                  
                Sys_Enter_Standby();  
        }
}
//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{       
  GPIO_InitTypeDef  GPIO_InitStructure;                    

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和复用功能时钟

        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;         //PA.0
        GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入
        GPIO_Init(GPIOA, &GPIO_InitStructure);        //初始化IO
    //使用外部中断方式
               
}
‘主函数
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"         
#include "remote.h"
#include "timer.h"
#include "wkup.h"




int main(void)
{         
        u16 led0pwmval=0;
         u16 asd;
        u8 dir=1;       
        u8 key;
        u8 t=0;       

        delay_init();                     //延时函数初始化          
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();       
  WKUP_Init();
        KEY_Init();                
        Remote_Init();                        //红外接收初始化                        

        while(1)
        {
                                key=Remote_Scan();       

       
                if(key)
                {         

                        switch(key)
                        {
            
                                case 104: TIM3_PWM_Init(899,0);asd=100;break;                  
                                case 152:TIM3_PWM_Init(899,0);asd=500;break;          
                                case 176:WKUP_KD=!WKUP_KD;break;            
                                case 48:;break;                    
                                case 24:;break;                    
                                case 122:;break;                  
                                case 16:;break;                                                                  
                                case 56:;break;         
                                case 90:;break;
                                case 66:;break;
                                case 82:;break;                 
                        }

                }else delay_ms(10);          
                t++;
                if(t==20)
                {
                        t=0;
               
                }
               
                                                 delay_ms(10);         
                if(dir)led0pwmval++;
                else led0pwmval--;

                if(led0pwmval>asd)dir=0;
                if(led0pwmval==0)dir=1;                                                                                 
                TIM_SetCompare2(TIM3,led0pwmval);               

                IN2=0;
        }
}








正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-7-18
在线时间
7 小时
 楼主| 发表于 2020-6-4 21:53:59 | 显示全部楼层
我想用这个遥控控制待机。但是这样操作没有反应,望大佬指教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 19:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表