嵌入式培训—12.13

① 异常(中断)

        中断的过程:

                            (1)保护现场(压栈);

                            (2)返回地址(终端地址的下一地址)压栈;

                            (3)PC,ISR(终端子程序);

② 中断嵌套(NVIC)

        1、优先级高的可以打断优先级低的;

                (1)抢占式优先级

                (2)响应式优先级

        2、优先级特性:

                  (1)中断嵌套,抢占高的可以打断抢占低的;

                  (2)抢占优先级相同时,相应优先级高的起作用;

                  (3)均相同时,看向量表中位置;

        3、使能。

③ EXTI(外部中断)

        1、16根线对应十六个管脚号;

        2、边沿触发

                    (1)上升沿;

                    (2)下降沿;

                    (3)双边沿;

④ 使用中断方式控制按键

            成果:呼吸灯工作,KEY_1控制按下时蜂鸣器响,不按时不响,KEY_2控制呼吸灯颜色。

            代码:

#include "Key_Use.h"

#define MAX 20

static u32 j=MAX, i=0, k=0, l=0, a=0, b=0;

void LED_Breath()

{

while(1)

{

if(a==3)

a=0;

if(a == 0)

{

LED_G_OFF();

LED_B_OFF();

LED_R_ON();

HAL_Delay(i);

LED_R_OFF();

HAL_Delay(j);

}

if(a == 1)

{

LED_R_OFF();

LED_B_OFF();

LED_G_ON();

HAL_Delay(i);

LED_G_OFF();

HAL_Delay(j);

}

if(a == 2)

{

LED_R_OFF();

LED_G_OFF();

LED_B_ON();

HAL_Delay(i);

LED_B_OFF();

HAL_Delay(j);

}

if(l < MAX)

{

l++;

i++;

j--;

}

if(l == MAX)

{

k++;

i--;

j++;

}

if(k == MAX)

{

HAL_Delay(100);

k = 0;

l = 0;

}

}

}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

if(GPIO_Pin == P_0)

{

if((Key_1_Scan() & 0x01) == 0x01)

BEEP_ON();

if((Key_1_Scan() & 0x01) == 0x00)

BEEP_OFF();

}

if(GPIO_Pin == P_13)

a++;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容