一、对射式红外传感器计次
AFIO 外设
这个函数是用来复位AFIO外设的,调用一下这个函数,AFIO外设的配置就会全部清除
这个函数是用来锁定GPIO配置的,调用这个函数,参数指定某个引脚,这个引脚的配置就会被锁定,防止意外更改(用的不多)
这两个函数是用来配置AFIO的事件输出功能的(用的不多)
这两个函数比较重要,第一个函数可以用来进行引脚重映射,第一个参数可以选择重映射的方式,第二个参数是新的状态;第二个函数是本节外部中断需要用的函数,调用这个函数,可以配置AFIO的数据选择器,来选择中断引脚
这个是和以太网有关的,用不到
配置AFIO外部中断引脚
当执行完这个函数后,AFIO的第14个数据选择器就拨好了,其中输入端被拨到了GPIOB外设上,对应的就是PB14号引脚,输出端固定连接的是EXTI的第14给中断线路,这样,PB14号引脚的电平信号就可以顺利通过AFIO,进入到后级EXTI电路了
配置EXTI
把EXTI的配置都清除,恢复成上电默认的状态
初始化EXTI,可以根据这个结构体里的参数配置EXTI外设
把参数传递的结构体变量赋一个默认值
用来软件触发外部中断,调用这个函数,参数给一个指定的中断线,就能软件触发一次这个外部中断;如果只需要外部引脚触发中断,就不需要这个函数
GetFlagStatus可以获取指定的标志位是否被置1,ClearFlag可以对置1的标志位进行清除,对于这些标志位,有的比较紧急,在置标志位后会触发中断,在中断函数里,如果想查看标志位和清除标志位,可以用下面两个函数
GetITStatus,获取中断标志位是否被置1,ClearITPendingBit清除中断挂起标志位
总结:如果想在主程序里查看和清除标志位,用上面两个函数;如果想在中断函数里查看和清除标志位,用下面两个函数(都是读写状态寄存器)
配置NVIC
CountSensor.c
#include "stm32f10x.h" // Device header
uint16_t CountSensor_Count; //全局变量,用于计数
/**
* 函 数:计数传感器初始化
* 参 数:无
* 返 回 值:无
*/
void CountSensor_Init(void)
{
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO的时钟,外部中断必须开启AFIO的时钟
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //将PB14引脚初始化为上拉输入
/*AFIO选择中断引脚*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);//将外部中断的14号线映射到GPIOB,即选择PB14为外部中断引脚
/*EXTI初始化*/
EXTI_InitTypeDef EXTI_InitStructure; //定义结构体变量
EXTI_InitStructure.EXTI_Line = EXTI_Line14; //选择配置外部中断的14号线
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //指定外部中断线使能
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //指定外部中断线为中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //指定外部中断线为下降沿触发
EXTI_I