![](https://i-blog.csdnimg.cn/blog_migrate/2b91ad85706cc18dec182427c7961605.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a2a8ad0358ec449ac6afe5be12504d79.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2925e0b7dcac2e0f0a14dcff78cbad6d.png)
设置中断函数
#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屏显示 小灯亮的次数**