苏联经济落后:stm32简单按键中断

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 06:14:36
    stm32快速学习3——简单按键中断

2011-01-31 09:58:54|  分类: STM32 |  标签:优先级  stm32  中断  led   |字号大中小 订阅

2个按键中断,控制2个LED

Main文件

#include "stm32f10x.h"

void RCC_Configuration(void);

void GPIO_Configuration(void);

void EXTI_Configuration(void);//外部中断设置

void NVIC_Configuration(void);//中断优先级别设置

unsigned char led_bit1=0;

unsigned char led_bit2=0;

int main(void)

{

  RCC_Configuration();

  GPIO_Configuration();

  EXTI_Configuration();

  NVIC_Configuration();

  GPIO_SetBits(GPIOA, GPIO_Pin_0); 

  GPIO_SetBits(GPIOA, GPIO_Pin_1);

  while(1);

}

void RCC_Configuration(void)

{    

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);

}

void GPIO_Configuration(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_8 ;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOD, &GPIO_InitStructure);

}

void EXTI_Configuration(void)

{

    EXTI_InitTypeDef EXTI_InitStructure;

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);

    EXTI_InitStructure.EXTI_Line    = EXTI_Line3;      

    EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  

    EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8);

EXTI_InitStructure.EXTI_Line    = EXTI_Line8;  

    EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;  

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;   

    EXTI_Init(&EXTI_InitStructure);

}

void NVIC_Configuration(void)

{

/*

查看固件库手册,关于中断部分NVIC_IRQChannel

PA3PA8分别设置

EXTI3_IRQChannel  外部中断线 中断 

EXTI9_5_IRQChannel  外部中断线 9-5 中断

关于 中断线 ,查看STM32  Reference Manual 的 9.2.5  外部中断/事件线路映像

 

stm32使用了4个位来保存优先级别

查固件库

Table 273. 先占优先级和从优先级值

占先优先级->

副优先级  ->

号码越小,等级越高

判断主的级别->一个高一个低->ok

判断主的级别->两个都相同  ->判断次的级别->一个高一个低->ok

判断主的级别->两个都相同  ->判断次的级别->两个都相同  ->按照列表顺序运行

*/

    NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //占先优先级、副优先级的资源分配

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //指定中断源

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //占先优先级设定

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        //副优先级设定

    NVIC_InitStructure.NVIC_IRQChannelCmd  = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; 

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       

    NVIC_Init(&NVIC_InitStructure);

}

stm32f10x_it.c中加入

extern unsigned char led_bit1,led_bit2;

void EXTI9_5_IRQHandler(void)

{

    if (EXTI_GetITStatus(EXTI_Line8) != RESET)

    {

        //添加中断处理程序

if(led_bit1)

{

  GPIO_SetBits(GPIOA, GPIO_Pin_1);

  led_bit1=0;

}

else

{

  GPIO_ResetBits(GPIOA, GPIO_Pin_1);

  led_bit1=1;

}

        EXTI_ClearFlag(EXTI_Line8);

    }

}

void EXTI3_IRQHandler(void)

{

    if (EXTI_GetITStatus(EXTI_Line3) != RESET)

    {

        if(led_bit2)

{

  GPIO_SetBits(GPIOA, GPIO_Pin_0);

  led_bit2=0;

}

else

{

  GPIO_ResetBits(GPIOA, GPIO_Pin_0);

  led_bit2=1;

}

        EXTI_ClearFlag(EXTI_Line3);

    }

}

Bkey推荐阅读:
  • 大量学习资料,强烈推荐2009-06-08 17:38:51
  评论这张 转发至微博 0人  |  分享到:          阅读(218)| 评论(0)| 引用 (0) |举报   stm32快速学习2——点亮LED stm32快速学习4——串口发送字符

历史上的今天

相关文章

最近读者

登录后,您可以在此留下足迹。 星辰 豆子 gongjian springch gugongsh 龙佛热 nj_puxia 最爱韩彩

评论

点击登录|昵称: