打印
[RISC-V MCU 应用开发]

请教CH32V103停止.待机模式问题

[复制链接]
3755|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xdqfc|  楼主 | 2021-5-20 16:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
项目中加了待机省电模式,按照官方的例程,进入了该模式,但是怎么退出,就不知道了,例程中也没有说明,后来也参考停机模式,官方的例程,是可以进入的,同时官方例程是用PA0端口唤醒单片机,我电路板当初设计的时候,唤醒端口安排的是PA4,修改程序后,怎么弄也退不出停机模式。请沁恒的工程师帮助解决,先谢谢了。

使用特权

评论回复
评论
RISCVLAR 2021-5-21 13:59 回复TA
@xdqfc :首先呢,我这边的教程贴程序呢并不是官方例程,都是我参考写来给大家参考看看的,或许存在不足之处,若你想要参考官方例程呢,可以去沁恒官网下载,那边例程相对这边肯定有一定的权威性和准确性。下面是沁恒官网例程链接:http://www.wch.cn/downloads/CH32V103EVT_ZIP.html 
xdqfc 2021-5-21 11:55 回复TA
@RISCVLAR :做项目,不严谨的话,产品出去,会有灾难性的后果,不是在实验室那么简单。咱做项目30多年了,除了谨慎还是谨慎。 
xdqfc 2021-5-21 11:53 回复TA
@RISCVLAR :兄弟,建议你们的例程稍微严谨些吧。 
RISCVLAR 2021-5-21 09:48 回复TA
教程中有讲以上几个模式,参考链接:https://bbs.21ic.com/icview-3037572-1-1.html 

相关帖子

沙发
xdqfc|  楼主 | 2021-5-20 16:47 | 只看该作者
    GPIO_InitTypeDef  GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef  NVIC_InitStructure;
  //PA4端口中断模式
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource4);
  EXTI_InitStructure.EXTI_Line=EXTI_Line4;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

   //内核中断允许
    /* GPIOA ----> EXTI_Line4 */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);



使用特权

评论回复
板凳
xdqfc|  楼主 | 2021-5-20 16:48 | 只看该作者
/*******************************************************************************
外中断处理函数
*******************************************************************************/
void EXTI4_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line4)!=RESET)
  {
      //SystemInit();
      LED_CPL;  //指示灯取反
      EXTI->INTFR&=~(1<4);     /* Clear Flag */
  }
}

使用特权

评论回复
地板
xdqfc|  楼主 | 2021-5-20 16:53 | 只看该作者
主程序是10秒后进入STOP模式,在进入之前,为了验证中断程序是不是有效,操作端口中断的时候,指示灯是有亮熄指示的,说明中断初始化是没有问题的,但是一旦进入STOP后,再按PA4,指示灯就不再变化了,而我对官方文档的理解是,任何一个外中断都是可以退出STOP模式的,但是事实是,**作了外中断,单片机并没有退出,恳请沁恒工程师指导指导。

使用特权

评论回复
5
xdqfc|  楼主 | 2021-5-20 17:23 | 只看该作者
又遇到了骚操作,不能在中断程序里面进入省电模式,本来是定时器设定20秒中断,中断里面进入省电,但是不行,只能在20秒中断里面设定“省电允许位“,在主程序里面判断该标志,一旦该标志置位,就进入省电模式。跟ARM基本雷同。

使用特权

评论回复
6
xdqfc|  楼主 | 2021-5-21 11:40 | 只看该作者
待机模式,按照官方的说明,静态电流可以达到几个微安,但是我这边没有达到这个标准,大概在0.4mA左右,芯片的端口都设定为输入模式了,也没有什么效果,以前用GD32或者其他单片机,弄个待机模式,电流轻轻松松就几个微安了,电路板上面元器件都拿掉了,也没有用,算了,不弄了,加个电源开关算了,可能还没有找到关键点吧,不过大家注意一下,官方的例程在进入待机模式之前最好加长时间延时,否则下次下载仿真就报错,需要把BOOT0脚拉高,才可以下载程序。

使用特权

评论回复
7
xdqfc|  楼主 | 2021-5-21 11:51 | 只看该作者
我感觉很好奇,官方的例程,在程序进入while(1)之前就进入待机模式,下次仿真下载的话,是怎么仿真的起来的,单片机上电就待机,根本就不接受下载。很快就报警了。这例程很容易就会把芯片弄废掉。(最后要把BOOT0拉高才可以下载仿真)

使用特权

评论回复
8
RISCVLAR| | 2021-5-21 16:15 | 只看该作者
你好,关于你提出的如何退出待机模式以及如何退出停止模式,可参考下图;此外,为了降低功耗,可将不用的GPIO设置成上拉或者下拉输入,具体可参考沁恒官方例程,可在沁恒官网搜索CH32V103下载。

使用特权

评论回复
9
xdqfc|  楼主 | 2021-5-21 17:27 | 只看该作者
本贴最后再说两句,弄了2天,待机模式下电流还是在0.4mA,把电路板上的其他不相干的元器件都拿掉了,用的是官方例程(加了延时的,怕单片机废掉),跟GPIO相关的上下拉寄存器没有找到,所以也没有办法设置,静态电流一直下不来,本来就是个小项目,也不想折腾了,加个电源开关即可,总体讲CH32V103,是很不错的芯片,没有发现其他不对劲的地方,国产的内核,咱非常支持,IDE调试过程也比之前好多了,MDK还经常有死机的情况,咱MountRiver倒没有出现,非常好。也有Reset功能了。有朋友假如解决好待机功耗问题话,麻烦请指点指点。

使用特权

评论回复
10
xdqfc|  楼主 | 2021-5-22 12:07 | 只看该作者
奶奶的,今天忍不住又调试了一下,按照官方的例程,再把所有的端口配置为
             GPIOA->CFGLR&=0x000f0000;//PA4是中断口,唤醒用的,没有办法清零。
             GPIOB->CFGLR=0;
             GPIOC->CFGLR=0;

             GPIOA->CFGHR=0;
             GPIOB->CFGHR=0;
             GPIOC->CFGHR=0;
进入待机后,静态电流60uA,达到我的要求了,不过官方的标准是几个uA,不知道是不是我电路板上面其他元器件漏电,还是其他什么情况,这个级别的静态电流可以了。
大家在使用待机模式时候,建议在主程序中进入,假如中断进入的话,没有办法唤醒,另外唤醒后的主时钟频率有变化,需要重新配置一下。

使用特权

评论回复
11
foxsbig| | 2021-6-23 10:51 | 只看该作者
时刻关注楼主的进展,
这种钻研的劲头值得学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

1013

帖子

8

粉丝