void halt_gpio_init(void) { disableInterrupts(); CLK_DeInit(); CLK_SYSCLKSourceSwitchCmd (ENABLE); //使能切换 CLK_LSICmd (ENABLE); //使能LSI while(CLK_GetFlagStatus(CLK_FLAG_LSIRDY)==RESET); CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI); //LSI为系统时钟 CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_LSI)//等待时钟稳定 CLK_HSICmd(DISABLE); TIM1_DeInit(); TIM1_Cmd(DISABLE); TIM2_DeInit(); TIM2_Cmd(DISABLE); TIM3_DeInit(); TIM3_Cmd(DISABLE); TIM4_DeInit(); TIM4_Cmd(DISABLE); TIM5_DeInit(); TIM5_Cmd(DISABLE); I2C_DeInit(I2C1); I2C_Cmd(I2C1,DISABLE); USART_DeInit(USART1); USART_Cmd(USART1,DISABLE); USART_DeInit(USART2); USART_Cmd(USART1,DISABLE); USART_DeInit(USART3); USART_Cmd(USART1,DISABLE); // RTC_DeInit(); ADC_DeInit(ADC1); ADC_Cmd(ADC1,DISABLE); ADC_TempSensorCmd(DISABLE); ADC_VrefintCmd(DISABLE); ADC_ChannelCmd(ADC1,ADC_Channel_18,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_TIM3,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_TIM4,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_TIM5,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_I2C1,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_SPI1,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_USART1,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_USART2,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_USART3,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,DISABLE); // CLK_PeripheralClockConfig(CLK_Peripheral_RTC,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_BEEP,DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_LCD,DISABLE); GPIO_DeInit(GPIOA); GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOC); GPIO_DeInit(GPIOD); GPIO_Init(GPIOA, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOC, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow); // GPIO_Init(GPIOA,GPIO_Pin_0|GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(GPIOB, GPIO_Pin_1,GPIO_Mode_Out_PP_High_Slow); //wakeup 7137 GPIO_Init(GPIOB, GPIO_Pin_3,GPIO_Mode_Out_PP_High_Slow); //note 7137 recv information GPIO_Init(GPIOB, GPIO_Pin_6,GPIO_Mode_Out_PP_High_Slow); //note 7137 recv information GPIO_Init(GPIOD, GPIO_Pin_0,GPIO_Mode_Out_PP_High_Slow); //LED GPIO_Init(GPIOA, GPIO_Pin_2,GPIO_Mode_In_PU_IT); //ring GPIO_Init(GPIOA, GPIO_Pin_3,GPIO_Mode_In_PU_IT); //preview GPIO_Init(GPIOB, GPIO_Pin_7,GPIO_Mode_In_PU_IT); //OK GPIO_Init(GPIOC, GPIO_Pin_0, GPIO_Mode_Out_PP_High_Slow); //sda GPIO_Init(GPIOC, GPIO_Pin_1, GPIO_Mode_Out_PP_High_Slow); //scl GPIO_Init(GPIOB, GPIO_Pin_4,GPIO_Mode_In_PU_IT); //2.4G EXTI_DeInit(); if(get_monitor()==ON) { // log("open IR\n"); GPIO_Init(GPIOB, GPIO_Pin_5,GPIO_Mode_In_PU_IT); //IR EXTI_SetPinSensitivity(EXTI_Pin_5,EXTI_Trigger_Falling); } if(get_sensitivity_setting()==HIGH) GPIO_Init(GPIOB, GPIO_Pin_2,GPIO_Mode_Out_PP_High_Slow); //灵敏度高 else GPIO_Init(GPIOB, GPIO_Pin_2,GPIO_Mode_Out_PP_Low_Slow); //灵敏度低 EXTI_SetPinSensitivity(EXTI_Pin_2,EXTI_Trigger_Falling); //中断配置 EXTI_SetPinSensitivity(EXTI_Pin_3,EXTI_Trigger_Falling); EXTI_SetPinSensitivity(EXTI_Pin_6,EXTI_Trigger_Falling); EXTI_SetPinSensitivity(EXTI_Pin_7,EXTI_Trigger_Falling); EXTI_SetPinSensitivity(EXTI_Pin_4,EXTI_Trigger_Rising); EXTI_ClearITPendingBit(EXTI_IT_PortB); EXTI_ClearITPendingBit(EXTI_IT_PortD); enableInterrupts(); Flash_OFF_act_halt(); } } default: if(flag==0) { bjy_disable_i2c(); // halt_init(); PWR_DeInit(); PWR_PVDCmd(DISABLE); CLK_HaltConfig(CLK_Halt_FastWakeup, ENABLE); halt_gpio_init(); PWR_FastWakeUpCmd(ENABLE); PWR_UltraLowPowerCmd(ENABLE); //超低功耗 halt(); bjy_clk_init(); bjy_usart_init(); bjy_adc_init(); bjy_adc_conv(); log("halt over\n"); bjy_rtc_init(); } break; |
然后,看单片机自己睡着了没。
然后慢慢缩小范围。