關(guān)于CH32V003的待機(jī)模式問(wèn)題

我程序上設(shè)計(jì)是一個(gè)按鍵按下進(jìn)入待機(jī)模式,另一個(gè)按鍵按下喚醒,現(xiàn)在的問(wèn)題是第一次可以進(jìn)入待機(jī)模式,但是第二次就不能進(jìn)入,此時(shí)單片機(jī)工作電流還有大約1.1mA,以下是我的程序:

#include "debug.h"


/* Global define */


/* Global Variable */


/*********************************************************************

?* @fn? ? ? EXTI_INT_INIT

?*

?* @brief? ?Initializes EXTI collection.

?*

?* @return? none

?*/

void EXTI0_INT_INIT(void)

{

? ? GPIO_InitTypeDef GPIO_InitStructure = {0};

? ? EXTI_InitTypeDef EXTI_InitStructure = {0};

? ? NVIC_InitTypeDef NVIC_InitStructure = {0};


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD, ENABLE);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

? ? GPIO_Init(GPIOD, &GPIO_InitStructure);


? ? /* GPIOA ----> EXTI_Line3 */

? ? GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);

? ? EXTI_InitStructure.EXTI_Line = EXTI_Line3;

? ? EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

? ? EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

? ? EXTI_InitStructure.EXTI_LineCmd = ENABLE;

? ? EXTI_Init(&EXTI_InitStructure);


? ? NVIC_InitStructure.NVIC_IRQChannel = EXTI7_0_IRQn;

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

? ? NVIC_Init(&NVIC_InitStructure);

}


/*********************************************************************

?* @fn? ? ? main

?*

?* @brief? ?Main program.

?*

?* @return? none

?*/

int main(void)

{

? ? GPIO_InitTypeDef GPIO_InitStructure = {0};


? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

? ? Delay_Init();

? ? Delay_Ms(1000);

? ? Delay_Ms(1000);


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);

? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;


? ? GPIO_Init(GPIOA, &GPIO_InitStructure);

? ? GPIO_Init(GPIOC, &GPIO_InitStructure);

? ? GPIO_Init(GPIOD, &GPIO_InitStructure);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_5 | GPIO_Pin_6;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_Init(GPIOC, &GPIO_InitStructure);

? ? GPIO_WriteBit(GPIOC, GPIO_Pin_6, 1);

? ? GPIO_WriteBit(GPIOC, GPIO_Pin_5, 1);

? ? GPIO_WriteBit(GPIOC, GPIO_Pin_7, 0);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_Init(GPIOD, &GPIO_InitStructure);


? ? EXTI0_INT_INIT();


//? ? RCC_LSICmd(ENABLE);

//? ? while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

? ? Delay_Ms(100);

? ? GPIO_WriteBit(GPIOC, GPIO_Pin_7, 1);

? ? while(1)

? ? {

? ? ? ? if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_2) == Bit_RESET)

? ? ? ? {

? ? ? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_6, 0);

? ? ? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_5, 0);

? ? ? ? ? ? PWR_EnterSTANDBYMode(PWR_STANDBYEntry_WFI);

? ? ? ? }

? ? }

}


void EXTI7_0_IRQHandler(void)

{

? ? if(EXTI_GetITStatus(EXTI_Line3)!=RESET)

? ? {

? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_6, 1);

? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_5, 1);

? ? ? ? EXTI_ClearITPendingBit(EXTI_Line3);? ? ?/* Clear Flag */

? ? }

}


上電后的電流.jpg上電后的電流


第一次進(jìn)入待機(jī)模式的電流.jpg第一次進(jìn)入待機(jī)模式的電流


第一次喚醒的電流.jpg第一次喚醒的電流


第二次未成功進(jìn)入待機(jī)模式的電流.jpg第二次未成功進(jìn)入待機(jī)模式的電流


此后按鍵再無(wú)任何響應(yīng)


沒(méi)有外部晶振,自己畫的板子,電路不復(fù)雜


您好,看了一下你的程序,有用到中斷函數(shù),但并沒(méi)有加中斷聲明,你可以添加一下中斷聲明再測(cè)試一下,具體添加方式可參考下圖

image.png


OK,可以了,我原來(lái)以為那個(gè)聲明是在線調(diào)試用的就沒(méi)添加,原來(lái)是聲明啊。編譯器不報(bào)錯(cuò)和警告,就沒(méi)注意這點(diǎn)。


緣分 上周也在用一樣的電流工具調(diào)這顆單片機(jī)的功耗?


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频