OpenEdv-开源电子网

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

STM32睡眠问题,困扰我很久的问题,还没解决

[复制链接]

18

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-24
在线时间
6 小时
发表于 2013-5-15 10:49:17 | 显示全部楼层 |阅读模式

我用STM32的库环境,但也是直接操作寄存器的方式,让stm32进入睡眠模式,唤醒以后是从断点开始执行的。
但是为什么用了原子的操作寄存器环境,让STM32进入睡眠模式,唤醒以后是复位执行的???????

让我百思不得其解啊。。。。。。原子的库函数有啥漏洞么??

附件里面有两种方式的程序,麻烦大家帮忙下。

#include "sys.h"  
#include "delay.h"
u32 t1=8,t2=8;
#define  LED_K         PAout(8) //键盘指示LED灯
#define  LED_DOUBLE       PBout(7) //双重锁定LED灯
#define  LED_PASSWORD     PBout(6) //密码错误LED灯
#define  LED_LOCK       PBout(5) //锁舌故障LED灯
#define  LED_BAT       PBout(15)//电池电量低LED灯
void LED_Init(void)
{
 RCC->APB2ENR|=1<<2;    //使能PORTA时钟     
 RCC->APB2ENR|=1<<3;    //使能PORTB时钟  
 GPIOA->CRH&=0XFFFFFFF0;
 GPIOA->CRH|=0X00000003;//PA8 推挽输出    
    GPIOA->ODR|=1<<8;      //PA8 输出高           
 GPIOB->CRL&=0X000FFFFF;
 GPIOB->CRL|=0X33300000;//PB.5.6.7推挽输出
 GPIOB->ODR|=7<<5;      //PB.5.6.7输出高
 GPIOB->CRH&=0X0FFFFFFF;
 GPIOB->CRH|=0X30000000;//PB15推挽输出
 GPIOB->ODR|=1<<7;      //PB15输出高
}
#define EXTI9_5_IRQChannel           ((u8)0x17)  /* External Line[9:5] Interrupts */
void KEY_Init(void)
{
 RCC->APB2ENR|=1<<0;     //开启辅助时钟 
 RCC->APB2ENR|=1<<2;    //使能PORTA时钟     
 RCC->APB2ENR|=1<<4;    //使能PORTC时钟    
 GPIOA->CRH&=0XFFF0FFFF;
 GPIOA->CRH|=0X00080000;//PA12 输入    
    GPIOA->ODR|=1<<12;      //PA12 上拉          
 GPIOC->CRL&=0XF00FFFFF;
 GPIOC->CRL|=0X08800000;//PC.5.6输入
 GPIOC->ODR|=3<<5;      //PC.5.6上拉
 GPIOC->CRH&=0X000FFFFF;
 GPIOC->CRH|=0X88800000;//PC13.14.15输入
 GPIOC->ODR|=7<<13;      //上拉
 Ex_NVIC_Config(GPIO_C,5,FTIR);//Pc5下降沿触发                          
 MY_NVIC_Init(2,2,EXTI9_5_IRQChannel,2);//抢占2,子优先级2,组2
}
void EXTI9_5_IRQHandler(void)
{     
 LED_K = 0;                        
 EXTI->R=1<<5;  //清除LINE5上的中断标志位

 int main(void)
 { 
 Stm32_Clock_Init(9);
 delay_init(72);       //延时函数初始化  
  LED_Init();        //LED端口初始化
 KEY_Init(); 
 delay_ms(1800);
 while(1)
 {
  while(t1--)
  {
    LED_DOUBLE = !LED_DOUBLE;
    delay_ms(100);
  }
  t1=4;
  Sys_Enter_Standby();
  while(t2--)
  {
    LED_PASSWORD = !LED_PASSWORD;
    delay_ms(100);
  }
    t2=4;
 }
 }



__asm void WFI_SET(void)
{
 WFI;   
}

 

void Sys_Enter_Standby(void)
{   
     RCC->APB2RSTR &= ~0X01FC;
     RCC->APB1ENR |= 0x10000000;             //使能电源时钟
     PWR->CR &= 0xFFFFFFFC;
  PWR->CR |= 0x00000001;    
     SCB->SCR|=0X00000004;
  WFI_SET();                    //执行WFI指令
  SCB->SCR&=~(0X00000004);
}

两种操作方式程序.rar

3.31 MB, 下载次数: 144

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-15 14:38:07 | 显示全部楼层
我的是待机模式哦,不是睡眠模式。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-24
在线时间
6 小时
 楼主| 发表于 2013-5-15 15:31:57 | 显示全部楼层
回复【2楼】正点原子:
我的是待机模式哦,不是睡眠模式。
---------------------------------

你光盘提供的例子是待机模式的,但是我没有用你光盘提供的例子啊

我自己写了一个睡眠模式的程序啊,但是用你提供的直接操作寄存器模板进行配置,睡眠唤醒以后老是复位???
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-15 16:57:12 | 显示全部楼层
我测试你的代码唤醒后就不动 了....还没找到原因...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-5-15 20:12:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

18

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-24
在线时间
6 小时
 楼主| 发表于 2013-5-15 21:35:13 | 显示全部楼层
回复【4楼】正点原子:
我测试你的代码唤醒后就不动 了....还没找到原因...
---------------------------------

用库函数的就没有问题啊。可是两个版本的程序代码是一模一样的啊,就是环境不一样。

真的百思不得其解啊
回复 支持 反对

使用道具 举报

18

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-24
在线时间
6 小时
 楼主| 发表于 2013-5-17 15:58:19 | 显示全部楼层
有没高手知道啊
回复 支持 反对

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
发表于 2014-3-5 15:25:30 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,我现在做那个停机模式,唤醒后也是不动了,请问你找到问题的原因了吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-5 17:04:27 | 显示全部楼层
回复【8楼】zyjs1987:
---------------------------------
没哦,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
发表于 2014-3-5 17:08:44 | 显示全部楼层
回复【9楼】正点原子:
--------------------------------
伤心。。。。。。现在卡在这边走不下去了,不知道有没有大神能够指点指点。。。。。
回复 支持 反对

使用道具 举报

18

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-24
在线时间
6 小时
 楼主| 发表于 2014-5-19 11:04:12 | 显示全部楼层
回复【10楼】zyjs1987:
---------------------------------
 WFI_SET();                    //执行WFI指令 
这句换成库函数的写法就可以了。

参照库函数的写法
回复 支持 反对

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
发表于 2014-5-19 11:18:00 | 显示全部楼层
回复【11楼】andy93762:
---------------------------------
问题已经解决了,是工程里面少了个启动文件
回复 支持 反对

使用道具 举报

18

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-24
在线时间
6 小时
 楼主| 发表于 2014-5-22 11:21:41 | 显示全部楼层
回复【12楼】zyjs1987:
---------------------------------
是啥启动文件?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 23:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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