一,中断系统

        1,外部中断条件:引脚发生电频跳变,定时时间到了,串口通信接受到数据

8c9ca73a0098472d8826b65e0d7c3a4e.png二,STM32中断

              1,EXTI外部中断、TIM定时器、ADC模数转换器、USART串口、SPI通信、12C(i方c)通信、RTC实时时钟等

     897628f7f9d04d55bedfd70b5e22a9e7.png

三,NVIC基本结构

        1,NVIC即嵌套中断向量控制器

        2,在STM32中统一分配中断优先级和管理中断的

        3,只有一个输出口告诉CPU处理哪个

        4,同时占用多个通道,有n条线

82406b1c8d084771b194ac31ef92f7a8.png

四,NVIC优先级分组

        1,抢占优先级:上一个在进行中的还没结束,直接进行

        2,响应优先级:插队,上一个进行中的结束了,就进行

        3,四位优先级寄存器可表示0-15的数,对应16个优先级

        4,数越小,优先级越高,0的优先级最高

        5,这4位可以切分,分为高n位的抢占优先级和低4-n位的响应优先级

        6,抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优牛级均相同的按中断号排队(中断号:STM32中断向量表中的数字)

157a3c4459e745c885384fc7fbd8232a.png

五,EXTI简介

        1,上升沿:就是电平从低电平变到高电平的瞬间触发中断

        2,下降沿:就是电平从高电平变到低电平的瞬间触发中断

        3,双边沿:上升沿,下降沿都能触发

        4,软件触发:程序中执行代码,触发中断

        5,相同Pin不能同时触发中断:PA0和PB0不能同时用

        6,中断响应:就是申请中断,让CPU执行中断函数

        7,事件响应:当外部中断检测到引脚电平变化时,正常的流程是选择触发中断。但在STM32中,可以选择触发事件.如果选择触发事件,那外部中断的信号就不会通向CPU,而通向其他外设,触发外设操作(ADC转换,触发DMA等)

87eca3e8dc8b40d88b8400b929192f17.png

六,EXTI基本结构

        1,每个GPIO有16个引脚

        2,相同Pin不能同时触发中断,最终选出16个

        3,四个蹭网的外设

        4,接到NVIC,用来触发中断

        5,外部中断的9-5和15-10分配到一个通道里,

             即外部中断的9~5会触发同一个中断函数,15~10也会触发同一个中断函数

              需要再根据标志位来区分到底是哪个中断进来的

        6,用来触发其它外设操作,即事件响应

13657c69d0e046558d4992305562c6d9.png

七,AFIO复用IO口

八,EXTI框图

        常见逻辑符号:或门与门非门数据选择器(梯形):都是多个输入,一个输出

        数据选择器(梯形)在侧面有选择控制端,根据控制端的数据,从输入选择一个接到输出

0118ca716942443fad3159721a6bb202.png

849582852f8b4491aecb79043ccf0e5f.png

八,旋转编码器

        1,正交波形:相位相差90度,正交波形信号输出的编码器,是可以用来测方向的

        2,正向旋转时,B相输出是滞后A相90度

        3,反向旋转时,B相输出是提前A相90度

        4,非正交输出编码器(也可测方向)一个引脚输出方波信号代表转速,另一个输出高低电平代表旋转方向

        5,

ba8f9096c6bf4fd6879a87ecdcd3ff2d.png

九,旋转编码器硬件

        .左边为A相输出,右边为B相输出

        1,默认没旋转情况下,点1上拉为高电平,通过R3输出到A端口的也是高电平

        2,旋转时,2处内部触电导通,点1,被拉到GND,再通过R3输出,A端口就是低电平了

        3,R3是输出限流电阻,防止模块引脚电流过大

        4,C1是输出滤波电容,防止一些输出信号抖动

        5,C接GND,暂时不用

b3dd262d3ef84c019450f09c1d1dcbfb.png

十,对射式红外传感器计次

初始化函数,配置资源流程

        1,配置RCC,打开时钟

        2,配置GPIO,选择端口为输入模式

        3,配置EXTI,

             选择边沿触发方式,比如上升沿、下降沿或者双边沿

              选择触发响应方式:中断响应(一般)和事件响应

        4,配置NVIC,给中断选择一个合适的优先级

        5,通过NVIC,外部中断信号进入CPU,CPU收到中断信号,才能跳转中断函数中执行中断程序

617e97ac74ae4d8d9a42fce4021f6354.png

配置

        1,GPIOA,GPIOB,AFIO都是APB2总线上外设,调用APB2开启时钟

        2,EXTI(独立外设(不需配置原因不明))和NVIC(内核外设(不需要开启时钟))这两个外设的时钟一直打开,不需要我们再开启了

        3,EXTI模式,参考手册

e7565b04456348fea13b2c22d863b5fa.png

        GPIO_AFIODeInit清除AFIO外设

        GPIO_PinLockConfig可以锁定GPIO配置,调用这个函数,参数锁定某个引脚,配置就会锁定,防止意外更改

        GPIO_PinRemapConfig可以进行引脚重映射参数(重映射方式,新的状态)

        GPIO_EXTILineConfig(GPIO开头,实际操作AFIO)可以配置AFIO数据选择器,选择想要的中断引脚

        GPIO_ETH_MediaInterfaceConfig,与以太网有关,该芯片没有,用不到

        

        EXTI_DeInit  调用它,就可以把EXTI的配置都清除,恢复成上电默认的状态

        EXTI_Init 调用这个函数,就可以根据这个结构体里的参数配置EXTl外设

        EXTI_StructInit 调用这个函数,可以把参数传递的结构体变量赋一个默认值

        EXTI_GenerateSWInterrupt 这个函数用来软件触发外部中断,调用这个函数,参数给一个指定的中断线

        EXTI_GetFlagStatus 获取指定标志位是否被置1了(主程序)

        EXTI_ClearFlag  对置1的标志位进行清除

(主程序)        

        EXTI_GetITStatus  获取中断标志位是否置1(中断函数)

        EXTI_ClearITPendingBit  清除中断挂起标志位(中断函数)

十一,旋转编码器计次

        1,保证正转反转都是转到位了,才执行数字加减的操作:

               B相下降沿和A相低电平时,才判断为正转

               A相下降沿和B相低电平时,才判断为反转

        2,正转1,反转0

        3,注意:int16_t Encoder_Count;        //全局变量,用于计数旋转编码器的增量值
十二,中断编程建议

        1,中断函数中,不要执行耗时过长的代码,中断函数要简短快速,因为中断是处理突发事情

        2,不要在中断函数和主函数调用相同的函数或者操作同一个硬件

作者:nosaes

物联沃分享整理
物联沃-IOTWORD物联网 » STM32-EXTI外部中断

发表回复