电赛菜鸟营培训(二)——STM32F103CB之中断控制

一、中断的概念

image

        中断可以理解为一个有激励给它就会立马给你响应的一个东东。就是说在你执行main函数的内容时,当有这个触发时便会跳转到这个中断内存,执行这段代码。

Attention:

1、中断的用法,可以使用中断作为第二main函数,但是前提是必须中断代码的时间复杂度要远远低于main,才可以这样做。

2、中断也分优先级,也有中断的嵌套,这个需要根据相关的芯片去查对应的数据手册即可。

 

image

 

二、按键中断

1、使用按键控制LED灯的亮灭

#include "stm32f10x.h"

unsigned char i=0;

int main()
{
    GPIO_InitTypeDef GPIO_InitStructure;    //配置IO口结构体
    NVIC_InitTypeDef NVIC_InitStructure;          
    EXTI_InitTypeDef EXTI_InitStructure;     
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;         
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                       
  NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;           
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;      
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;             
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);
  EXTI_InitStructure.EXTI_Line=EXTI_Line15;                  
  EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;      
  EXTI_InitStructure.EXTI_LineCmd=ENABLE;
  EXTI_Init(&EXTI_InitStructure);                                               
    
    GPIO_SetBits(GPIOA, GPIO_Pin_0);
    
  while(1)
  {  
  }
}

void EXTI15_10_IRQHandler()
{
  if(EXTI_GetITStatus(EXTI_Line15)!=RESET)
  {
    GPIO_ResetBits(GPIOA, GPIO_Pin_0); 
    EXTI_ClearITPendingBit(EXTI_Line15);
  }
}

         由于备注,我实在是受不了乱码问题,所以直接附图。

image

image

 

三、定时器中断

#include "stm32f10x.h"

unsigned char i=0;

int main()
{
    GPIO_InitTypeDef GPIO_InitStructure;    
                NVIC_InitTypeDef NVIC_InitStructure;    
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;         //ÕâÒ»ÐÐÖеÄËٶȻù±¾ÎÞÓ°Ïì
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
    
  NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);
    

 TIM_TimeBaseStructure.TIM_Period=10000;     
  TIM_TimeBaseStructure.TIM_Prescaler=7199; 
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
  TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
  TIM_Cmd(TIM3, ENABLE);                                            
  GPIO_SetBits(GPIOA, GPIO_Pin_0);
    
  while(1)
  {  
  }
}


              
void TIM3_IRQHandler()
{
  if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) 
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);            
    {
      i=1;
      GPIO_SetBits(GPIOA,GPIO_Pin_0);
    }
    else if(i==1)                         
    {
      i=0;
      GPIO_ResetBits(GPIOA,GPIO_Pin_0);
    }
  }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旗舰版STM32F103单片机开发板50例实验例程软件工程源码合集: 实验0 新建工程实验 实验1 跑马灯实验 实验10 输入捕获实验 实验11 电容触摸按键实验 实验12 OLED显示实验 实验13 TFTLCD显示实验 实验14 USMART调试实验 实验15 RTC实验 实验16 待机唤醒实验 实验17 ADC实验 实验18 内部温度传感器实验 实验19 光敏传感器实验 实验2 蜂鸣器实验 实验20 DAC实验 实验21 PWM DAC实验 实验22 DMA实验 实验23 IIC实验 实验24 SPI实验 实验25 485实验 实验26 CAN通信实验 实验27 触摸屏实验 实验28 红外遥控实验 实验29 游戏手柄实验 实验3 按键输入实验 实验30 DS18B20数字温度传感器实验 实验31 DHT11数字温湿度传感器实验 实验32 MPU6050六轴传感器实验 实验33 无线通信实验 实验34 FLASH模拟EEPROM实验 实验35 摄像头实验 实验36 外部SRAM实验 实验37 内存管理实验 实验38 SD卡实验 实验39 FATFS实验 实验4 串口实验 实验40 汉字显示实验 实验41 图片显示实验 实验42 照相机实验 实验43 音乐播放器实验 实验44 录音机实验 实验45 手写识别实验 实验46 T9拼音输入法实验 实验47 串口IAP实验 实验48 USB虚拟串口实验 实验49 USB读卡器实验 实验5 外部中断实验 实验50 网络通信实验 实验51 UCOSII实验1-任务调度 实验52 UCOSII实验2-信号量和邮箱 实验53 UCOSII实验3-消息队列、信号量集和软件定时器 实验54 综合测试实验 实验6 独立看门狗实验 实验7 窗口看门狗实验 实验8 定时器中断实验 实验9 PWM输出实验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值