中级会员
 
- 积分
- 477
- 金钱
- 477
- 注册时间
- 2012-9-17
- 在线时间
- 0 小时
|
今天我写程序如下:
//设备初始化结束
while(1)
{
TFT_show_hz40x40_string(160,0,dev_name[Devp->dev_id],W_COLOR,BL_COLOR);
TFT_show_string40x40(160,40,Devp->volt,W_COLOR,BL_COLOR);
TFT_show_string40x40(160,80,Devp->slaved,W_COLOR,BL_COLOR);
TFT_show_string40x40(160,120,Devp->used,W_COLOR,BL_COLOR);
TFT_show_string40x40(160,160,Devp->date,W_COLOR,BL_COLOR);
systick_delay_ms(72,1000);
Devp = Devp->next;
if(Devp == (void*)0) Devp=Head;
}
其中我用了外部按键中断,但是我发现,程序运行后串口1就不能发数据了(按键中断发送串口数据)
//KEY2
void EXTI3_IRQHandler(void)
{
u32 temp;
while((temp++)<360000); //粗略延时
//KEY2
if(!(GPIOA->IDR & (1<<3)))
{
uart1_send_string("key2\r\n");
}
EXTI-> R |= (1<<3); //清除KEY2挂起标志
}
中断可以正常进入
后来把 systick_delay_ms(72,1000);这个函数去了,就没事了。。。
这个函数代码如下
void systick_delay_ms(unsigned char HCLK,unsigned int MS)
{
unsigned char count_us;
unsigned int temp;
SysTick->CTRL =0x00; //选择外部时钟。作为时钟源。并且不产生中断动作,计数不开始
count_us = HCLK/8;
//上面的代码确定延时参数。这些代码,这些代码可以放到单独的函数初始化。把count_us count_ms
//作为全局变量
//来操作
MS = MS*count_us*1000;
SysTick->LOAD = MS;
SysTick->VAL=0;
SysTick->CTRL |= 0x01;
do{
temp = SysTick->CTRL;
}
while((temp & (1<<16))==0 &&(temp & 0x01));
//等待计数到0。等到过程中必须时刻判断定时器在工作,
//防止中断程序中调用延时使得计数终止。死循环
SysTick->CTRL =0x00;//SysTick停止计数
SysTick->VAL=0X00;//更新计数器值
}
我也没发现那里和串口1有关系啊。。。。。。怎么回事啊。奇怪死了 |
|