STM32F1 외부 브레이크 인스턴스

외부 인터럽트를 사용하는 기본 절차는 다음과 같다.상응하는 시계 설정하기;2. 상응하는 중단을 설정한다.3. 입출력 입구 초기화;4. 해당 IO구를 인터럽트 회로(외부 인터럽트를 설정하기 전)로 설정하고 초기화한다.5. 선택한 인터럽트 채널의 응답 함수에서 인터럽트 함수.
1、시계 켜기
void RCC_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE)|
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
}

상응하는 시계를 설정하는 데 필요한 RCC 함수는 stm32f10xrcc.c 에서 이 파일을 프로젝트에 추가합니다.
2. 적절한 중단 설정
void NVIC_Config()
{
    /*          */
    NVIC_InitTypeDefNVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 

    /*EXTI2*//*  NVIC_InitTypeDef     */
    NVIC_InitStructure.NVIC_IRQChannel= EXTI2_IRQn;     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0; 
    NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0;        
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                                   
    NVIC_Init(&NVIC_InitStructure);

    /*EXTI3*/
    NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;                 
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 1;                    
    NVIC_InitStructure.NVIC_IRQChannelSubPriority= 1;  
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                                   
    NVIC_Init(&NVIC_InitStructure);

    /*EXTI5*/
    NVIC_InitStructure.NVIC_IRQChannel= EXTI9_5_IRQN;  
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 2;    
    NVIC_InitStructure.NVIC_IRQChannelSubPriority= 2;      
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;      
    NVIC_Init(&NVIC_InitStructure);                                      

}

3. 입출력 포트 초기화
void GPIO_Config(void)
{
    GPIO_InitTypeDef   GPIO_InitStructure;

    /*PE2--OUT_PP*/
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;                                             
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;           
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;                  
    GPIO_Init(GPIOE,&GPIO_InitStructure);
    GPIO_ResetBits(GPIOE,GPIO_Pin_2);                              

    /*PC2.PE3.PE5--IN_FLOATING*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5; 
    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING; 
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;          
    GPIO_Init(GPIOC,&GPIO_InitStructure);                                 

    /*PD3.PD6--OUT_PP*/  
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3 |GPIO_Pin_6;                  
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;           
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;                  
    GPIO_Init(GPIOD,&GPIO_InitStructure);

    /*PB5--OUT_PP*/
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;                                         
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;          
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;                  
    GPIO_Init(GPIOB,&GPIO_InitStructure);        
}

4. 해당 입출력 포트를 인터럽트 회선으로 설정
void EXTI_cfg()
{
    EXTI_InitType   DefEXTI_InitStructure;

    /*      */   
    EXTI_ClearITPendingBit(EXTI_Line2);
    EXTI_ClearITPendingBit(EXTI_Line3);
    EXTI_ClearITPendingBit(EXTI_Line5);

    /*     */    
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource2);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);

    EXTI_InitStructure.EXTI_Line= EXTI_Line2 | EXTI_Line3 | EXTI_Line5; 
    EXTI_InitStructure.EXTI_Mode= EXTI_Mode_Interrupt;    
    EXTI_InitStructure.EXTI_Trigger= EXTI_Trigger_Rising_Falling;   
    EXTI_InitStructure.EXTI_LineCmd=ENABLE;         
    EXTI_Init(&EXTI_InitStructure);                                      
}

5. 서비스 프로그램 중단
voidEXTI2_IRQHandler(void)
{
    GPIO_SetBits(GPIOD,GPIO_Pin_6);//  LED 
    EXTI_ClearITPendingBit(EXTI_Line2); //       
}

voidEXTI3_IRQHandler(void)
{
    GPIO_SetBits(GPIOD,GPIO_Pin_3);
    EXTI_ClearITPendingBit(EXTI_Line3);
}

voidEXTI9_5_IRQHandler(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_5);
    EXTI_ClearITPendingBit(EXTI_Line5);
}

인터럽트 서비스 프로그램은 stm32f10xit.c 중.이 부분의 내용은 전편에 대한 보충이다.부족한 점은 환영합니다.

좋은 웹페이지 즐겨찾기