不說了,貼代碼TALK IS LESS.SHOW ME THE CODE.
這個是。c文件
#include "includes.h"
#include "stm32f4xx_exti.h"
void EXTILine4_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4;
GPIO_Init(GPIOD,&GPIO_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD,EXTI_PinSource4);
EXTI_InitStructure.EXTI_Line =EXTI_Line4;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI4_IRQHandler()
{ long long int i;
// OS_CPU_SR cpu_sr;
// OS_ENTER_CRITICAL(); //????????,????
// //?????????(0~255)
// OSIntEnter ( ); //OSSemPost(NMEA_MBOX);
// OS_EXIT_CRITICAL(); //????????
//
if(EXTI_GetITStatus(EXTI_Line4) !=RESET)
{
BUZZER(HIGH);
delay_ms(1000);
BUZZER(LOW);
}
EXTI_ClearFlag(EXTI_Line4);
// OSIntExit ( );
}
接下來是。h
#ifndef _EXIT_H_
#define _EXIT_H_
void EXTILine4_Config(void);
void Buzzer(uint8_t time, uint8_t OnTime, uint8_tOffTime);
#endif
------------------------------------------------------------------------------
需要注意的是注意配置的引腳有沒有錯誤,在ucos下要把那兩句注釋了的OS開頭的語句加上,用來告訴系統中斷的開閉,讓系統進行任務調度,具體參考 可剝奪式內核的任務調度策略
|