OpenEdv-开源电子网

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

STM8L进入低功耗再退出低功耗

[复制链接]

13

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
金钱
1897
注册时间
2016-8-20
在线时间
238 小时
发表于 2018-7-25 10:36:09 | 显示全部楼层 |阅读模式
10金钱
最近做一个低功耗产品,用到的是STM8L152单片机,其中用到了单片机的内部的硬件IIC,程序进入低功耗halt()模式后再退出halt()模式时,有时候会卡在while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));这句话这里,然后就一直死在这里了,下面我会截图和上一部分代码,不知道坛友们有遇到过这种情况吗?调了几天了, 很蛋痛

[mw_shl_code=applescript,true]void IIC_Rest()
{
          unsigned char i;
        while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); //等待空闲
        I2C_GenerateSTART(I2C1, ENABLE);//开启I2C1
        while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/

        I2C_Send7bitAddress(I2C1, I2C1_WRITE_ADDRESS7, I2C_Direction_Transmitter);//器件地址 -- 默认0x90
        while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
        I2C_SendData(I2C1, REST_Value);
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
        I2C_AcknowledgeConfig(I2C1,ENABLE);
        I2C_GenerateSTOP(I2C1, ENABLE);//关闭I2C1总线
          for(i=0;i<255;i++);        
        for(i=0;i<255;i++);
}[/mw_shl_code]

这个是仿真的时候程序一直死在这里了

这个是仿真的时候程序一直死在这里了

最佳答案

查看完整内容[请看2#楼]

昨天把IIC器件旁边的滤波电容去掉了,到现在程序居然还在跑,看来多半是那颗电容太大了,电容电还没放完和程序冲突了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
金钱
1897
注册时间
2016-8-20
在线时间
238 小时
 楼主| 发表于 2018-7-25 10:36:10 | 显示全部楼层
昨天把IIC器件旁边的滤波电容去掉了,到现在程序居然还在跑,看来多半是那颗电容太大了,电容电还没放完和程序冲突了
回复

使用道具 举报

13

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
金钱
1897
注册时间
2016-8-20
在线时间
238 小时
 楼主| 发表于 2018-7-25 10:39:18 | 显示全部楼层
对了,进入低功耗前,我把IIC的这个器件的电给断掉了的,退出低功耗以后马上给IIC的这个器件上电,然后再初始化的IIC
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-7-26 02:02:32 | 显示全部楼层
帮顶
回复

使用道具 举报

13

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
金钱
1897
注册时间
2016-8-20
在线时间
238 小时
 楼主| 发表于 2018-7-26 10:54:49 | 显示全部楼层
又是一天过去了,今天直接不让那个IIC器件断电,然后程序就一直跑到现在都没停下来(没停指的是死机),我就纳闷了,难道断电后,IIC器件很容易和MCU这边通讯出现故障吗?这真的是蛋痛的问题!!脑壳清痛
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-8-5
在线时间
5 小时
发表于 2018-8-6 00:09:19 | 显示全部楼层
关注中
回复

使用道具 举报

13

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
金钱
1897
注册时间
2016-8-20
在线时间
238 小时
 楼主| 发表于 2018-8-9 09:56:15 | 显示全部楼层

不用了,已经解决了,我把IIC器件供电端的滤波电容去掉了就可以了,可能是滤波电容太大造成的
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
发表于 2018-8-23 11:44:04 | 显示全部楼层
可以看看你的硬件IIC初始化代码吗?我现在在发送完地址后就卡死在等待
/*!< Send gsensor address for write */
  I2C_Send7bitAddress(I2C1, (uint8_t)ID, I2C_Direction_Transmitter);

  /*!< Test on EV6 and clear it */
  while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
  {}
为自己掌握新的知识感到快乐
回复

使用道具 举报

13

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
金钱
1897
注册时间
2016-8-20
在线时间
238 小时
 楼主| 发表于 2018-8-24 08:30:48 | 显示全部楼层
Jundodo 发表于 2018-8-23 11:44
可以看看你的硬件IIC初始化代码吗?我现在在发送完地址后就卡死在等待
/*!< Send gsensor address for wr ...

[mw_shl_code=applescript,true]void IIC_Write(unsigned char addr,unsigned char data)
{
        while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); //等待空闲

        I2C_GenerateSTART(I2C1, ENABLE);//开启I2C1
        while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/

        I2C_Send7bitAddress(I2C1, I2C1_WRITE_ADDRESS7, I2C_Direction_Transmitter);//器件地址 -- 默认0x90
        while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

        I2C_SendData(I2C1, addr);//寄存器地址
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

        I2C_SendData(I2C1, data);//发送数据
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
        I2C_AcknowledgeConfig(I2C1,ENABLE);

        I2C_GenerateSTOP(I2C1, ENABLE);//关闭I2C1总线
}[/mw_shl_code]
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
发表于 2018-8-24 16:06:12 | 显示全部楼层
是我从设备的地址弄错了
为自己掌握新的知识感到快乐
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-6-27
在线时间
9 小时
发表于 2019-8-4 10:22:09 | 显示全部楼层
ChaserMCU 发表于 2018-7-25 10:36
昨天把IIC器件旁边的滤波电容去掉了,到现在程序居然还在跑,看来多半是那颗电容太大了,电容电还没放完和 ...

请教,我也想做套低功耗的,有劳你给些意见!!!
回复

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2019-8-6
在线时间
32 小时
发表于 2019-8-27 09:20:05 | 显示全部楼层
tlwlwsfw 发表于 2019-8-4 10:22
请教,我也想做套低功耗的,有劳你给些意见!!!

老兄你在做什么低功耗的项目,我也在做,能加个好友么
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-6-27
在线时间
9 小时
发表于 2019-8-28 14:59:17 | 显示全部楼层
yuli 发表于 2019-8-27 09:20
老兄你在做什么低功耗的项目,我也在做,能加个好友么

都是学习的,技术根本就不成熟,现在不是三个臭皮匠顶个诸葛亮的时代了,还是老老实实的与大佬学习学习吧!!!
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-6-27
在线时间
9 小时
发表于 2019-8-28 15:18:09 | 显示全部楼层
大佬加个qq吧 1323021101
回复

使用道具 举报

10

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
623
金钱
623
注册时间
2019-6-3
在线时间
107 小时
发表于 2019-8-28 15:38:13 | 显示全部楼层
学习了,硬件也很有可能出错
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-6-27
在线时间
9 小时
发表于 2019-9-2 19:00:23 | 显示全部楼层
ChaserMCU 发表于 2018-8-9 09:56
不用了,已经解决了,我把IIC器件供电端的滤波电容去掉了就可以了,可能是滤波电容太大造成的

大佬加个qq吧 1323021101
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 12:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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