江协科技stm32————5-2对射式红外传感器&旋转编码器计次

目录

EXTI基本结构

 配置步骤

代码

CountSensor.c

main.c


EXTI基本结构

 配置步骤

 第一步,时钟配置

EXTI和NVIC两个外设的时钟是一直开的 ,NVIC内核外设都是不需要开启时钟


第二步,配置GPIO端口为输入模式

对于EXTI来说,模式为浮空输入|上拉输入|下拉输入;不知该写什么模式,可以看参考手册中的外设GPIO外设配置表

第三步,配置AFIO外设中断引脚选择
AFIO的库函数是和GPIO在一个文件里,可以查看Library文件中的gpio.h查看函数 

GPIO_PinRemapConfig 配置引脚重映射

GPIO_EXTILineConfig 配置AFIO的数据选择器,选择想要的引脚


第四步,配置EXTI,这样PB14的电平信号就能够通过EXTI通向下一级的NVIC了

第五步,配置NVIC,NVIC是内核外设,所以它的库函数在misc.h

代码

CountSensor.c

#include "stm32f10x.h"                  // Device header

uint16_t CountSensor_Count;

void CountSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//1、RCC给GPIO和AFIO供电
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;//2、定义GPIO结构体,每个成员都定义出来(上拉电阻)
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB , GPIO_PinSource15);//3、配置AFIO外部中断引脚选择,具体用的是GPIOA还是B,几脚
	
	EXTI_InitTypeDef EXTI_InitStructure;//4、定义外部中断的结构体,定义每个成员的参数,(几脚、使能、立即中断、下降沿触发)
	EXTI_InitStructure.EXTI_Line = EXTI_Line15;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
	EXTI_Init(&EXTI_InitStructure);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置几个优先几个从占
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
}

uint16_t CountSensor_Get(void)
{
	return CountSensor_Count;
}

void EXTI15_10_IRQHandler(void)//启动文件里复制来10-15引脚的中断名(固定的)
{
	if(EXTI_GetITStatus(EXTI_Line15) == SET)
	{	
		CountSensor_Count ++;
		EXTI_ClearITPendingBit(EXTI_Line15);
	}		
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Encoder.h"

int16_t Num;

int main(void)
{
	OLED_Init();
	Encoder_Init();
	
	OLED_ShowString(1,1,"Num:");//字符串
	
    while (1)     
    {
		Num += Encoder_Get();
		OLED_ShowSignedNum(1,5,Num,5); 
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值