1.对射式红外传感器计次
推荐封装为CountSensor。推荐使用的是PB14引脚。使用GPIO_Mode_IPU。
思路如下:
1.开启GPIOB和AFIO的RCC(RCC_APB2Per.....)+2.初始化GPIO(使用库函数GPIO_Init(参数选择GPIO_Mode_IPU))+3.配置AFIO的通道(使用库函数GPIO_EXTIlineConfig(参数选择14引脚对应的14通道))+4.配置EXTI(EXTI_Init(参数Mode=Mode_Interrupt;_line=_line_14;_LintCmd=ENABLE;_Trigger=_Falling))+5.配置NVIC(NVIC_Init(参数_SuvPrior是抢占优先级,_Preemption是响应优先级,此处随意配置+参数通道选择填写为EXTI15_10_IRQn)+NVIC_PriorityGroupConfig(参数选择_2))+6.自定义参数来确定15_10中具体的14通道(推荐自定义函数void EXTI15_10_IRQHandler,里面执行的逻辑是使用查看标志位函数是否被置EXTI_GetITStatus()==SET和读某一位的函数GPIO_ReadInputDataBit()和清除标志位的EXTI_ClearITPendingBit())
补充:库函数如下:EXTI_GetFlagStatus() 查看标志位
EXTI_ClearFlag() 清除标志位
EXTI_GetITStatus() 中断中查看标志位
EXTI_ClearITPendingBit 中断中清除标志位
2.旋转编码器计次:
推荐封装函数为Encoder,初始化环节与对射式红外传感器基本相同。只有如下一点点变化:
初始化GPIO时,使用两个分别为GPIO_PIN_1和GPIO_PIN_0(可自由调整)
选择AFIO的通道时,选择两个通道,分别是GPIO_PinSouce0和GPIO_PinSouce1。
自定义通道函数时,需要定义两个,分别是void EXTI_IRQn0和void EXTI_IRQn1。
自定义函数思路与对射式红外传感器基本相同。先使用EXTI_GetFlagStatus查看标志位是否被置,在使用GPIO_ReadInputDataBit判断是否为1,满足条件就自增1,达到技术效果。
3.定时器定时中断:
推荐封装为Tim
思路:
1.开启RCC的Tim2时钟(在GPIOB上)+2.选择内部时基单元(Tim_InternalClockConfig+)3.初始化内部时钟(Tim_TIMEBaseInit)+4.中断输出控制(Tim_ITConFig(IT_选择_IT_UpData)+TIM_ClearFlag())+5.选择外部通道(NVIC_PriorityGroupConfig(选择_2))+6.初始化NVIC(NVIC_Init())+7.开启定时器(Tim_Cmd)+8.自定义函数选择具体通道(推荐使用Tim2_IRQnHandler,思路基本一致,不再赘述)
4.定时器外部中断:
与定时器定时中断基本相同,此处只写不同的部分,如下:
因为是外部中断,所以需要接外部中断源,如传感器接PB2,所以两个RCC函数,分别是TIM3和GPIOB。
在第二步时,此处选择外部时基单元,使用TIM_ETRClockMode2Config(第二个参数选择_GPSC_OFF不分配,第三个参数Polarity选_NonInvented不反向上升沿有效,第四个参数滤波器需要在0x00~0x0f之间,不使用选择0)
在第三步时,配置时基单元,更改自动重装和预分频器大小分别为10-1和1-1
其他地方基本不变,不再赘述
5.笔记如下: