一、对射式红外传感器计次
1)配置对射式红外传感器初始化函数
1、外部中断配置:
第一步:因为对射式红外传感器模块DO数据传感器模块会给引脚发送高低电平信号来触发中断计次,所以需要配置该引脚外部中断初始化。
第二步:按照图示初始化所涉及到的外设:
①先开启所涉及的外设RCC时钟
②配置GPIO口为输入模式
③配置AFIO选择所需要用到的Pin口连接到EXTI
④配置EXTI选择边沿出发方式,以及触发响应方式
⑤配置NVIC,给中断选择合适的优先级
代码实现:
① RCC开启所需外设的时钟,在这里只需要开启GPIO、AFIO的外设时钟,EXIT和NVIC时钟是默认开启的,NVIC是内核外设不受RCC控制。
代码:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
② GPIO_Init 初始化配置
代码:
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;
③ 配置AFIO初始化,ST公司没有专门给AFIO封装专用函数库,在GPIO内附带配置了专用函数。
GPIO_PinLockConfig 参数指定某个引脚, 那这个引脚配置会被锁定,防止误更改。
GPIO_EventOutputConfig
GPIO_EventOutputCmd 这两个函数用来配置AFIO的事件输出功能的
GPIO_PinRemapConfig 用于引脚重映射,第一个参数选择重映射的方式,第二个参数是新的状态
GPIO_EXTILineConfig 调用这个函数配置AFIO数据选择器,选择先要的中断引脚,虽然开头是GPIO,但是实际操作的是AFIO寄存器。
GPIO_ETH_MediaInterfaceConfig 以太网有关函数
代码:
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
④ 配置EXTI初始化
EXTI_DeInit 清除EXTI的所有配置 恢复上电的初始状态
EXTI_Init 结构体初始化EXTI函数
EXTI_StructInit 调用这个函数可以把参数传递的结构体变量赋一个默认值
EXTI_GenerateSWInterrupt 软件触发外部中断 调用一次 触发一次 如果只需要外部引脚触发中断则不需要次函数
FlagStatus EXTI_GetFlagStatus 获取指定标志位是否被置一
EXTI_ClearFlag 对置一的标志位进行清除
ITStatus EXTI_GetITStatus 获取中断标志位是否被置一
EXTI_ClearITPendingBit 清除中断挂起标志位
这四个函数用语读取状态寄存器内的标志位,
在主函数里面对标志位操作使用前两个函数,前两个函数是一般的读写标志位,没有额外的处理,能不能触发中断标志位,都能读取。
在中断函数里面查看标志位使用下面两个函数,下面两个函数只能操作与中断有关的标志位,并且对中断是否允许做出了判断。
⑤ NVIC初始化设置
NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); 中断分组
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); 根据结构体指定的参数初始化NVIC
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset); 设置中断向量表
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState); 系统低功耗配置
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
pre-emption priority and subpriority先占优先级(抢占优先级)和从占优先级(响应优先级)