找回密码
 立即注册
楼主: wuzhengmin

学习休眠唤醒遇到的问题:1无法开启休眠 2舍弃一下功能后能进入休眠但无法唤醒

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层
我们配套的红外遥控器使用的是 NEC 协议,NEC 码的位定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us 脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。
截图202604031010398357.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层
32位长
截图202604031013053470.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层
1.2 红外遥控的原理
1.2.2 红外接收装置
红外接收设备是由红外接收电路、红外解码、电源和应用电路组成。
截图202604031017268174.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层
1.2 实验目的
数码管显示红外遥控控制码。

本实验使用到硬件资源如下:
(1)红外接收头/遥控器
(2)数码管模块
(3)串口1

截图202604031018581868.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层
3.1 创建和配置工程
截图202604031023491214.jpg
截图202604031024042164.jpg
截图202604031024226263.jpg
截图202604031024531747.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层
3.1 创建和配置工程
截图202604031025414626.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层
核心程序锁判断高电平时间:

//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息
// 文件名称: port.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-05-16) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>


#include "config.h"


//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
#define IRED P32
u32 hw_jsm;          //定义一个32位数据变量,保存接收码
u8  hw_jsbz;  //定义一个8位数据的变量,用于指示接收标志

/*******************************************************************************
* 函 数 名         : HW_jssj
* 函数功能                   : 高电平持续时间,将记录的时间保存在t中返回,其中一次大约20us
* 输    入         : 无
* 输    出         : t
*******************************************************************************/
u8 HW_jssj()
{
        u8 t=0;
        while(IRED==1)//高电平
        {
                t++;
                delay_us(20);
                if(t>=250) return t;//超时溢出
        }
        return t;
}

//<<AICUBE_USER_GLOBAL_DEFINE_END>>



////////////////////////////////////////
// 端口3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_ISR(void) interrupt P3INT_VECTOR
{
    //<<AICUBE_USER_PORT3_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码
    u8 Tim=0,Ok=0,Data,Num=0;
   
    uint8_t intf;

    intf = CheckP3nFlag(BIT_ALL);       //读取中断请求标志
    ClearP3nFlag(BIT_ALL);              //清除中断请求标志
   
    if(intf&0x04)
    {
        while(1)
        {
            if(IRED==1)
            {
                 Tim=HW_jssj();//获得此次高电平时间

                 if(Tim>=250) break;//不是有用的信号

                 if(Tim>=200 && Tim<250)
                 {
                    Ok=1;//收到起始信号
                 }
                 else if(Tim>=60 && Tim<90)
                 {
                    Data=1;//收到数据 1
                 }
                 else if(Tim>=10 && Tim<50)
                 {
                    Data=0;//收到数据 0
                 }

                 if(Ok==1)
                 {
                    hw_jsm<<=1;
                    hw_jsm+=Data;

                    if(Num>=32)
                    {
                        hw_jsbz=1;
                        break;
                    }
                 }

                 Num++;
            }
        }
    }               
    //<<AICUBE_USER_PORT3_ISR_CODE1_END>>
}

////////////////////////////////////////
// P0口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT0_Init(void)
{
    SetP0nPushPullMode(BIT_ALL);        //设置P0为推挽输出模式

    DisableP0nPullUp(BIT_ALL);          //关闭P0内部上拉电阻
    EnableP0nPullDown(BIT_ALL);         //使能P0内部下拉电阻
    DisableP0nSchmitt(BIT_ALL);         //使能P0施密特触发
    SetP0nSlewRateNormal(BIT_ALL);      //设置P0一般翻转速度
    SetP0nDrivingNormal(BIT_ALL);       //设置P0一般驱动能力
    SetP0nDigitalInput(BIT_ALL);        //使能P0数字信号输入功能

    //<<AICUBE_USER_PORT0_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_PORT0_INITIAL_END>>
}

////////////////////////////////////////
// P2口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT2_Init(void)
{
    SetP2nQuasiMode(0xf8);              //设置P2.7,P2.6,P2.5,P2.4,P2.3为准双向口模式
    SetP2nPushPullMode(0x07);           //设置P2.2,P2.1,P2.0为推挽输出模式

    EnableP2nPullUp(0x07);              //使能P2.2,P2.1,P2.0内部上拉电阻
    DisableP2nPullUp(0xf8);             //关闭P2.7,P2.6,P2.5,P2.4,P2.3内部上拉电阻
    DisableP2nPullDown(BIT_ALL);        //关闭P2内部下拉电阻
    DisableP2nSchmitt(BIT_ALL);         //使能P2施密特触发
    SetP2nSlewRateNormal(BIT_ALL);      //设置P2一般翻转速度
    SetP2nDrivingNormal(BIT_ALL);       //设置P2一般驱动能力
    SetP2nDigitalInput(BIT_ALL);        //使能P2数字信号输入功能

    //<<AICUBE_USER_PORT2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_PORT2_INITIAL_END>>
}

////////////////////////////////////////
// P3口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_Init(void)
{
    SetP3nQuasiMode(0xfb);              //设置P3.7,P3.6,P3.5,P3.4,P3.3,P3.1,P3.0为准双向口模式
    SetP3nHighZInputMode(0x04);         //设置P3.2为高阻输入模式

    EnableP3nPullUp(0x04);              //使能P3.2内部上拉电阻
    DisableP3nPullUp(0xfb);             //关闭P3.7,P3.6,P3.5,P3.4,P3.3,P3.1,P3.0内部上拉电阻
    DisableP3nPullDown(BIT_ALL);        //关闭P3内部下拉电阻
    DisableP3nSchmitt(BIT_ALL);         //使能P3施密特触发
    SetP3nSlewRateNormal(BIT_ALL);      //设置P3一般翻转速度
    SetP3nDrivingNormal(BIT_ALL);       //设置P3一般驱动能力
    SetP3nDigitalInput(BIT_ALL);        //使能P3数字信号输入功能

    SetP3nFallingInt(0x04);             //设置P3.2为下降沿中断

    EnableP3nInt(0x04);                 //使能P3.2口中断

    SetP3IntPriority(0);                //设置中断为最低优先级

    //<<AICUBE_USER_PORT3_INITIAL_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_PORT3_INITIAL_END>>
}


//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 6 天前 | 显示全部楼层

将程序编译下载到目标板运行,打开串口助手“\5--开发工具\5-串口调试助手\串口调试助手(丁丁)\sscom5.13.1.exe”,实验现象:数码管显示红外遥控控制码。

看看如何去掉控制码:
//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
/* 深圳市普中科技有限公司(PRECHIN 普中)
* 在线视频:https://space.bilibili.com/2146492485/video
       官网:www.prechin.cn

* 实验名称:红外遥控实验
*
* 接线说明:参考电路图
*
* 实验现象:程序下载成功后,数码管显示红外遥控控制码
*
* 注意事项:
*
*/
//<<AICUBE_USER_HEADER_REMARK_END>>


#include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件


//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
#include "smg.h"
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
extern u32 hw_jsm;
extern u8  hw_jsbz;
//<<AICUBE_USER_GLOBAL_DEFINE_END>>


////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码
    u8 buf[3];
    u8 data_code=0;
    //<<AICUBE_USER_MAIN_INITIAL_END>>

    SYS_Init();

    printf("Hello World !\n");

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {
        //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
        // 在此添加主函数中用户主循环代码
        if(hw_jsbz==1)        //如果红外接收到
                {
                        hw_jsbz=0;           //清零
                        printf("红外接收码 %0.8X\r\n",hw_jsm);        //打印
                        data_code=hw_jsm>>8;
                        hw_jsm=0;                                        //接收码清零
                }       
                buf[0]=gsmg_code[data_code/16];
                buf[1]=gsmg_code[data_code%16];
                buf[2]=0X76;
                SMG_Display(buf,6);
        //<<AICUBE_USER_MAIN_LOOP_END>>
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    EnableAccessXFR();                  //使能访问扩展XFR
    AccessCodeFastest();                //设置最快速度访问程序代码
    AccessIXramFastest();               //设置最快速度访问内部XDATA
    IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式

    CLK_Init();                         //时钟模块初始化
    PORT0_Init();                       //P0口初始化
    PORT2_Init();                       //P2口初始化
    PORT3_Init();                       //P3口初始化
    UART1_Init();                       //串口1初始化

    //<<AICUBE_USER_INITIAL_CODE_BEGIN>>
    // 在此添加用户初始化代码
    //<<AICUBE_USER_INITIAL_CODE_END>>

    EnableGlobalInt();                  //使能全局中断
}

////////////////////////////////////////
// 微秒延时函数
// 入口参数: us (设置延时的微秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_us(uint16_t us)
{
    do
    {
        NOP(34);                        //(MAIN_Fosc + 500000) / 1000000 - 6
    } while (--us);
}


////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
    uint16_t i;

    do
    {
        i = MAIN_Fosc / 6000;
        while (--i);
    } while (--ms);
}


//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>


截图202604031034382084.jpg
截图202604031034482961.jpg
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-9 18:07 , Processed in 0.121755 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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