初级会员
- 积分
- 179
- 金钱
- 179
- 注册时间
- 2014-8-29
- 在线时间
- 11 小时
|
5金钱
是在原子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 ( "%s\r\n", cmd ); //用串口2发送的指令
if ( ( reply1 == 0 ) && ( reply2 == 0 ) ) //不需要接收数据
return true;
delay_ms(waittime); //延时,这里又跳不出去了
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
 C_Usart ( "%s", strEsp8266_Fram_Record .Data_RX_BUF );
if ( ( reply1 != 0 ) && ( reply2 != 0 ) )
return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) ||
( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) );
else if ( reply1 != 0 )
return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) );
else
return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) );
}
|
|