中级会员
 
- 积分
- 215
- 金钱
- 215
- 注册时间
- 2012-4-17
- 在线时间
- 0 小时
|

楼主 |
发表于 2012-12-26 15:36:11
|
显示全部楼层
回复【6楼】keyway:
---------------------------------
我使用了定时器中断和外部中断,下面是我的代码,我检查了一下,是没有问题的,麻烦您帮我看一下。
定时器中断:
void TIM2_IRQHandler(void)//100ms进入一次中断
{
if(TIM2->SR&0X0001) //溢出中断
{
IWDG_Feed();// 喂狗
LED_InstructCount++;
if(LED_InstructCount>=2) //正常工作的灯 每隔1 秒 闪烁一次
{
LED_Instruct=!LED_Instruct;
LED_InstructCount=0;
}
if((GSM_Alarm_Weight_Flag==1||GSM_Alarm_Angle_Flag==1||GSM_Alarm_BianFu_Flag==1||GSM_Alarm_Height_Flag==1||GSM_Alarm_FengSu_Flag==1||GSM_Alarm_ShiWen_Flag==1||GSM_Alarm_MotorTemp_Flag==1||GSM_Alarm_Voltage_Flag==1||GSM_Alarm_Charge_Flag==1||GSM_Alarm_Torque_Flag==1)&&(Send_Message_Flag==1)) //只要有一路超过预警值 就发出声光报警
{
BUZZER_Flag=1; //蜂鸣器 响
LED_Alarm_Flag=1; //报警灯闪烁
}
if(GSM_Alarm_Weight_Flag==0&&GSM_Alarm_Angle_Flag==0&&GSM_Alarm_BianFu_Flag==0&&GSM_Alarm_Height_Flag==0&&GSM_Alarm_FengSu_Flag==0&&GSM_Alarm_ShiWen_Flag==0&&GSM_Alarm_MotorTemp_Flag==0&&GSM_Alarm_Voltage_Flag==0&&GSM_Alarm_Charge_Flag==0&&GSM_Alarm_Torque_Flag==0)
{
BUZZER_Flag=0;
BUZZER=0;
LED_Alarm_Flag=0;
LED_Alarm=1;
}
if(BUZZER_Flag==1) // 蜂鸣器 嘀嘀 响
{
BUZZER=!BUZZER;
}
if(LED_Alarm_Flag==1)
{
LED_Alarm=!LED_Alarm; //报警灯闪烁
}
}
TIM2->SR&=~(1<<0);//清除中断标志位
}
void TIM3_IRQHandler(void)//500ms进入一次中断
{
if(TIM3->SR&0X0001) //溢出中断
{
if(Rtc_show_Flag==1)
{
Rtc_show();
}
DisplayAdc_Count++;
if((DisplayAdc_Count>=5)&&(DisplayMain_Count==0))
{
DisplayAdc_Count=0;
Adc_Timing_Display(); // 定时器中只负责 显示 当前采样的到的 信号值
}
if(SecondFlag_10>8)
{
DisplayMain_Flag=1;
}
if(DisplayMain_Count>=20)
{
DisplayMain_Count++;
if(DisplayMain_Count>=30)
{
Display_Main();
DisplayMain_Count=0;
}
}
if(DelayCount_Flag_1s==1)
{
DelayCount_1s++;
}
if(DelayStart_Flag==1)
{
DelayCount++;
}
SecondFlag_2++; if (SecondFlag_2>=250) SecondFlag_2=0;
SecondFlag_3++; if (SecondFlag_3>=250) SecondFlag_2=0;
SecondFlag_10++; if (SecondFlag_10>=250) SecondFlag_2=0;
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
void Timer3_Init(u16 arr, u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
TIM3->ARR=arr; //设定计数器自动重装值 刚好 1ms
TIM3-> SC=psc;//预分频器为7200,得到10Khz 的计数时钟
// 这两个 位置同样设置才可以使用中断
TIM3->DIER|=1<<0; //允许更新 中断
// TIM3->DIER|=1<<14; //允许触发DMA 请求
TIM3->DIER|=1<<6; //允许 触发中断
TIM3->CR1|=0X01; //使能 定时器 3
MY_NVIC_Init(2,3,TIM3_IRQChannel,2); //抢占 1, 子优先级3, 组2
}
void Timer2_Init(u16 arr, u16 psc)
{
RCC->APB1ENR|=1<<0; //TIM2时钟使能
TIM2->ARR=arr; //设定计数器自动重装值 刚好 1ms
TIM2-> SC=psc;//预分频器为7200,得到10Khz 的计数时钟
// 这两个 位置同样设置才可以使用中断
TIM2->DIER|=1<<0; //允许更新 中断
// TIM2->DIER|=1<<14; //允许触发DMA 请求
TIM2->DIER|=1<<6; //允许 触发中断
TIM2->CR1|=0X01; //使能 定时器 3
MY_NVIC_Init(0,2,TIM2_IRQChannel,2); //抢占 0, 子优先级2, 组2
}
按键外部中断:
void EXTIX_Init(void)
{
Key_Scan_FLine();
//Ex_NVIC_Config(GPIO_G,0,1); //下降沿触发,第一行
Ex_NVIC_Config(GPIO_F,5,1);//F口,5位,下降沿触发,第一列,第六
MY_NVIC_Init(1,1,EXTI9_5_IRQChannel,2);//中断线5--9
}
void EXTI9_5_IRQHandler(void)
{
//具体内容 没有列出
}
请您看一下,应该没问题的。
|
|