STM32学习(四)外部中断和中断系统 新手入门及常见问题解决

设置中断函数

#include "stm32f10x.h"                  // Device header
uint16_t countsensor_count;
void countsensor_Init(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
 EXTI_InitTypeDef EXTI_INitstructure;
 NVIC_InitTypeDef  NVIC_InitStruct;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);	 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  //开启AFIO的时钟 EXTI是CPU的内置部分 是一直开启状态 NVIC同理
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 		 //上拉输出 (在EXTI中上拉 下拉 浮空 都是可以的)
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB.5
	
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//配置数据选择器 配置我们要中断的引脚
	//GPIO_PinRemapConfig-引脚重映射
	//外部中断的配置

	
 EXTI_INitstructure.EXTI_Line = EXTI_Line5; //指定要配置的中断线
 EXTI_INitstructure.EXTI_Mode = EXTI_Mode_Interrupt;
 EXTI_INitstructure.EXTI_Trigger = EXTI_Trigger_Falling;
 EXTI_INitstructure.EXTI_LineCmd =  ENABLE; //中断线状态
 EXTI_Init(&EXTI_INitstructure);
//NVIC在misc.h中 配置
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设定分组
  
 NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; 
 NVIC_Init(&NVIC_InitStruct);
	
}
uint16_t countsensor_get(void)
{

return countsensor_count; 
}

void EXTI9_5_IRQHandler(void)//定义一个中断函数 函数名是固定的 要到start(启动函数)里找函数名
{
   
   if(EXTI_GetITStatus(EXTI_Line5) == SET)
   {
      EXTI_ClearITPendingBit(EXTI_Line5);//清除标志位 防止卡死在中断函数
      countsensor_count++;
   }
	
}
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"

 

 	
 int main(void)
 {	 
 	u8 x=0;
	LED_Init();
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 	//串口初始化为115200
 	LED_Init();			     //LED端口初始化
	LCD_Init();
	POINT_COLOR=RED;
			 	
  	while(1) 
	{		 
		
		//delay_ms(10000000);
//		LCD_Clear(WHITE);

		POINT_COLOR=RED;	  
		{
		delay_ms(500);
        led_on();
	    if (GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_5)==0) 
		{
			x=x+1;
		}
		LCD_ShowxNum(30,40,x,1,24,1);
        delay_ms(500);   	
	    led_off();  }            //u32 num, u8 len, u8 size, u8 mode)
		 //u8 num, u8 size, u8 mode)
		//LCD_ShowString(30,40,210,24,24,"WarShip STM32 ^_^"); 
		LCD_Clear(GREEN);   
	} 
	    // LCD_Clear(WHITE);

	
}**用LCD屏显示 小灯亮的次数**

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值