0%

stm32_note_06day

=============================
2022-8-22
=============================

一.温故知新

    驱动LED灯、蜂鸣器、功能按键、系统定时器
    直接操作外设寄存器、官方LIB库、官方HAL库
    是由ARM核心支持的位带的操作
    系统定时器(system timer | systick)
    是由ARM核心提供的定时器资源
    决定定时长短是由时钟频率和计数值
    时钟频率是通过时钟树的分析得出的SYSCLK / 8 或者 SYSCLK
    计数值是通过ARM的手册分析得出
    控制及状态寄存器		一共有32bit
        第0位		开启定时器的
        第1位		是否触发外部请求
        第2位		时钟源的选择
        第3-15位		保留
        第16位		判断计数是否计到0
        第17-31位		保留
    重装载值寄存器		一共有32bit
        第0-23位		存储重装载值[0 - 16M-1]
        第24-31位		保留
    当前值寄存器
        第0-23位		当前计数值[0 - 16M-1]
        第24-31位		保留

二.中断

    之前写了LED灯的流水灯程序->延时使用的是粗略延时(空循环)
        使用精确的延时->使用了系统定时器
    之前写了功能按键的程序->轮询的方法检测按键是否被按下
        while(1)
        {
            button_status(0);
        }
        由于轮询的方法浪费资源,可以替换成中断的方法
    目的 : 把轮询检测按键的程序,修改成中断的方式处理功能按键
    1.了解轮询和中断的关系
        轮询 : CPU被绑定到检测的函数上,一直不断的调用
        是非常消耗CPU资源
        中断 : 在中断到来之前CPU可以处理任何事情,当中断到来之后
        会打断CPU,CPU调用中断处理函数
    2.介绍中断控制器
        VIC : 向量中断控制器
        NVIC : 可嵌套的向量中断控制器
        GIC : 通用的中断控制器
        一般来说VIC和NVIC是在单片机中使用的中断控制器
        一般来说GIC是在高端芯片中使用的中断控制器
        VIC和NVIC 相对于 GIC来说,在硬件上支持中断向量
        NVIC 相对于 VIC来说,在硬件上支持中断嵌套
    3.我们芯片上的中断控制器
        在STM32F103RBT6芯片中使用的是NVIC
        前提 : 
        有些手册会把NVIC画到ARM核心的内部
        有些手册会把NVIC画到ARM核心的外部
        有些手册会把NVIC画到紧贴着ARM核心
        想要表达的含义就是NVIC和ARM核心是紧密相联的关系
    NVIC和ARM-CORTEX-M3之间是紧密相联的关系
    NVIC中断控制器会做两个操作
        1)会为每一个连接到NVIC上的中断源分配一个中断号
        2)处理优先级的问题
            组优先级(抢占优先级)
            子优先级(占先式优先级)

nvic

    4.GPIO触发中断的方法
        GPIO想要触发中断需要借助EXTI外设
        EXTI叫做外部中断
        EXTI仅仅是NVIC上的一个中断源而已
打开<STM32RBT6\DataSheet\STM32>目录下<STM32F10x中文参考手册.pdf>
    P89	NVIC以及异常向量表
    P91	EXTI的描述
        每组GPIO的0号管脚可以触发EXTI0
        每组GPIO的1号管脚可以触发EXTI1
        ...
        每组GPIO的15号管脚可以触发EXTI15
    ----------------------------------------------------
    已知KEY0按键使用的是PC9管脚,
    将来GPIOC9管脚想要触发中断需要使用EXTI9
    ----------------------------------------------------
    EXTI9只能由PC9触发吗?
    也可以是PA9 PB9 PC9触发,需要通过 AFIO外设 进行选择
    ----------------------------------------------------
    NVIC : 可嵌套的向量中断控制器
    EXTI : 外部中断
    EXTI仅仅是NVIC上的一个中断源而已
    ----------------------------------------------------
    中断号是中断号,外部中断号是外部中断号,是不一样的
    中断号 : 和异常向量表中异常处理函数的顺序有关
    外部中断号 : 和GPIO的管脚编号有关
    ----------------------------------------------------
    有些外部中断会自己享用一个中断号,有些外部中断会共用一个中断号
    

三.驱动外部中断

    把轮询检测按键的程序修改成中断的方式
    KEY0	PC9	EXTI9	上拉输入	下降沿触发
    KEY1	PC8	EXTI8	上拉输入	下降沿触发
    KEY2	PA0	EXTI0	下拉输入	上升沿触发
    需要通过AFIO外设为外部中断选择触发的管脚
    1.初始化eint
        1)通过APB2总线使能GPIOC组和GPIOA组以及AFIO的时钟
        (因为需要通过AFIO为外部中断选择触发的管脚)
        2)初始化功能按键使用的GPIO管脚
            1>把PC9 PC8管脚配置为上拉输入模式
            2>把PA0管脚配置为下拉输入模式
        3)为外部中断选择触发的管脚
            1>为EXTI9选择由PC9触发
            2>为EXTI8选择由PC8触发
            3>为EXTI0选择由PA0触发
        4)初始化NVIC
            1>配置组优先级和子优先级的所占比例
            2>选择中断号
            3>使能该中断
            4>配置组优先级的级别
            5>配置子优先级的级别

优先级所占比例

        5)初始化EXTI
            1>选择外部中断号
            2>使能该外部中断
            3>选择中断的模式
            4>选择触发的方式

============================
作业
1.把今天讲过的内容完完整整的复习一遍
2.把外部中断的项目工程重新搭建一遍
3.使用中断 + 消抖的方法实现按键开关的项目工程
============================