完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
是在原子STM32F103开发板上面做的实验, 测试过, 执行完 GPIO_SetBits( GPIOA, GPIO_Pin_0 ); 之后,进去 delay_ms(500);函数就出不来了,在do{}while里面死循环,出不来,Jlink调试是进入startup_stm32f10x_hd.s的324行, 后来换成了 GPIO_SetBits( GPIOE, GPIO_Pin_5 );,就没问题了..? PA0就是接KE_UP,这个在例程key.c文件里面也注释掉了,想不出问题的原因了. 这究竟是为什么啊??头文件也包含了,delay_init(); 也初始化了,是什么原因导致我的delay_ms没办法顺利运行??? void delay_ms(u16 nms) { u32 temp; Systick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit) SysTick->VAL =0x00; //清空计数器 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数 do { temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16)));//等待时间到达 SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器 SysTick->VAL =0X00; //清空计数器 } void ESP8266_Choose ( FunctionalState enumChoose ) { if ( enumChoose == ENABLE ) { delay_ms(500); //OK,程序没问题 GPIO_SetBits( GPIOA, GPIO_Pin_0 ); delay_ms(500); //出问题了,在do{}while里面出不来 } else ESP8266_CH_LOW_LEVEL(); } bool ESP8266_Cmd ( char * cmd, char * reply1, char * reply2, u16 waittime ) { strEsp8266_Fram_Record .InfBit .FramLength = 0; //从新开始接收新的数据包 ESP8266_Usart ( "%srn", cmd ); //用串口2发送的指令 if ( ( reply1 == 0 ) && ( reply2 == 0 ) ) //不需要接收数据 return true; delay_ms(waittime); //延时,这里又跳不出去了 strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = ' |