程序调试
1、串口调试
2、显示屏调试
3、软件调试(例如keil的debug)
------------------这是一条分割线---------------------
中断系统:
1、各种中断类型:定时中断、外部中断
2、中断优先级,区分各中断的紧急程度
3、嵌套中断:根据中断优先级程序执行逻辑
4、NVIC:中断管理,外接各种中断引脚,管理中断的优先级,处理好顺序再输出给CPU。在优先级寄存器(4位,取值范围:0~15)中进行中断优先级的管理.
5、响应优先级:中断事件通过此级别进行排队,一般是由优先级寄存器的4-n位寄存器决定。在当多个响应中断外设申请中断时通过此优先级进行事件排队。
6、抢占优先级:如果正在执行的中断事件抢占等级低于正在排队的中断事件,则此事件暂停执行,执行抢占等级比较高的中断事件,执行完毕后再进行执行之前未完成的函数。一般是由优先级寄存器的高n位进行排序
EXTI(Extern Interrupt外部中断)
原理:监测指定GPIO的电平信号,根据触发方式进行判断是否申请中断。
触发方式:上升沿触发、下降沿触发、双边沿触发(上升和下降都触发)、软件触发
支持触发方式:支持所有GPIO口配置此中断,但相同的pin口不能同时触发中断(例如PA0和PB0)不同的pin口可以同时触发(例如PA0和PB1、PA1)
触发响应方式:中断响应(触发中断,CPU处理)/事件响应(不进行中断触发,直接执行事件触发别的外设操作,不经过CPU处理)
AFIO(中断引脚选择):主要用于复用功能引脚重定义和中断引脚选择。一般最多只有16个通道通向EXIO标记端口号0~15,但每个GPIO组都有16个引脚,所以不同组的相同引脚号的引脚不能同时响应外部中断。
小tips:ST公司为了节省资源,EXTI通道9~5和通道15~10会分别执行两个同样的中断函数。
EXTI框图:
上面画的两个红色图是或门(左边框是弧形的)和与门(左边框是直线)
旋转编码器:机械式、霍尔传感器、光栅式。
光栅式旋转编码器有两个触点、一个旋转盘,当转动旋转盘时触点不连续的被连通,然后分别输出两个方波信号(正交波形),由于旋转盘的特殊设计会使两个方波信号有90°的相位差,用来区分正转和反转(例如A触点相位大于B触点相位则为反转,反之则为正转)
------------------这是一条分割线---------------------
使用外部中断:
1、配置外设的RCC(时钟),将涉及的外设时钟都打开。(只需要初始化AFIO和引脚组)EXTI自动打开状态、NVIC是内核控制
2、配置GPIO,输入模式
3、配置AFIO,选择端口
4、配置EXTI,选择触发方式和响应方式
5、配置NVIC,配置中断号和中断事件(触发外设事件)
配置AFIO步骤及关键函数:
GPIO_EventOutputConfig:不重要
GPIO_EvenOutputCmd:不重要
GPIO_PinRemapConfig:重定义引脚的映射功能。
GPIO_EXITLineConfig:AFIO配置外部中断,选择引脚
GPIO_MediaInterfaceConfig:
配置EXTI:
四个函数:
1、EXTI_DeInit:复位外部中的配置
2、EXIT_Init:初始化外部中断的引脚,配置触发模式(事件触发、中断触发)等
配置NVIC:
初始化NVIC选用的中断通道,配置优先级及抢占级等
实现中断函数:中断名称要从startup文件里去获取,名字不能出错。
注:每次中断结束后要将标志位清零,否则会一直执行此中断。
配置代码