由(1)EXTI 基本结构可知:
配置EXTI外部中断,有四个步骤:
1.开启RCC时钟,GPIO口和AFIO口的时钟都要打开。由于NVIC属于单片机内核外设,无需打开时钟。
由于GPIOB和AFIO都属于APB2上的外设,所以代码如下:
2.在开启RCC后,配置GPIO口,这个老生常谈,便直接跳过。
3.配置AFIO口,函数:
我们选择PB14作为中断发生的io口
4.配置EXTI和NVIC:
和配置GPIO口一样,我们这里同样用结构体的方式配置
我选择14线,下降沿触发的方式(当然也可以是其他的触发的方式)
NVIC配置,选择第二种分组方式,即抢占优先级与响应优先级都为3,选择EXTI15_10这条线。
配置完后,写中断函数,由于我选择的是EXTI14,查找后得到
void EXTI15_10_IRQHandler(void)这个专属的中断函数(10-15线都是这个)
代码如上,先判定是否为14线,然后num++(在程序中要设置一个全局变量num)
之后再写一个num的返回函数:
程序到此为止,差不多完成80%左右了,
接下来就是要到主函数main里面,添加相关头文件,由于较为容易,就不赘述了,代码如下:
最后的现象就是:
每一次用挡光片挡住传感器,oled屏幕上就会+1
PS:
由于硬件存在抖动的情况,所以计次有时会变得很快,为了避免这一现象,可由软件改进。
所有内容均根据b站up江协科技而来,笔记写的比较简单基础,属于32入门,如有错误,欢迎指出。
午安。