当前位置:网站首页>STM32外部中断(寄存器版本)
STM32外部中断(寄存器版本)
2022-07-24 05:50:00 【夜路难行々】
初始化你的按键输入口PA0,PA15,PC5。
eg.PA0-15为EXTI0的外部中断输入源
因为IO口设置的时候将PC5和PA15设置为了上拉输入,PA0为下拉输入,所以触发条件就是PC5和PA15当电位变化由高到低的时候(下降沿触发)触发中断,PA0则反之。
Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM) 三个参数分别为:GPIOA-G,需要使能的位,触发条件
RTIR:上升沿触发 FTIR:下降沿触发
其次,需要设置中断分组的问题
抢占优先级和响应优先级:
1.序号越小,优先级越高。
2.抢占优先级高的中断组可以打断抢占优先级低的中断组,但当两个抢占优先级同时到达的时候,会先执行响应优先级高的中断组,但当不是同时到达的时候,即使后来高的响应优先级到达的时候,也不可以打断当前的正在执行的较低的中断组,抢占优先级和响应优先级可以分为五组,每组都有16中分配方式。例如组2,抢占属性和响应属性,,抢占和响应即11:11,所以抢占和响应的选择都是四种(0-3).

MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
分别指的是:抢占优先级的数值,响应优先级的数值,io口对应的中断服务函数,组别。
//设置触发条件
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发 wake_up 电位由低到高而触发输出变化 原本是下拉电阻
Ex_NVIC_Config(GPIO_C,5,FTIR); //下降沿触发 key0 电位由高到低而触发输出变化 原本是上拉电阻
Ex_NVIC_Config(GPIO_A,15,FTIR); //下降沿触发 key1 电位由高到低而触发输出变化 原本是上拉电阻
//设置中断分组
MY_NVIC_Init(2,2,EXTI0_IRQn,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI9_5_IRQn,2); //抢占2,子优先级1,组2
MY_NVIC_Init(2,0,EXTI15_10_IRQn,2); //抢占2,子优先级0,组2 exti.c(中断使用完后需要清除中断标志位)
//外部中断0服务程序
void EXTI0_IRQHandler(void)
{
delay_ms(10); //消抖
if(WK_UP==1) //WK_UP按键
{
LED0=!LED0;
LED1=!LED1;
}
EXTI->PR=1<<0; //清除LINE0上的中断标志位
}
//外部中断9~5服务程序
void EXTI9_5_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY0==0) //按键0
{
LED0=!LED0;
}
EXTI->PR=1<<5; //清除LINE5上的中断标志位
}
//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY1==0) //按键1
{
LED1=!LED1;
}
EXTI->PR=1<<15; //清除LINE15上的中断标志位
}
//外部中断初始化程序
//初始化PA0,PC5,PA15为中断输入.
void EXTI_Init(void)
{
KEY_Init();
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发 wake_up 电位由低到高而触发输出变化 原本是下拉电阻
Ex_NVIC_Config(GPIO_C,5,FTIR); //下降沿触发 key0 电位由高到低而触发输出变化 原本是上拉电阻
Ex_NVIC_Config(GPIO_A,15,FTIR); //下降沿触发 key1 电位由高到低而触发输出变化 原本是上拉电阻
MY_NVIC_Init(2,2,EXTI0_IRQn,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI9_5_IRQn,2); //抢占2,子优先级1,组2
MY_NVIC_Init(2,0,EXTI15_10_IRQn,2); //抢占2,子优先级0,组2
}int main()
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
EXTI_Init(); //外部中断初始化
while(1)
{
printf("lalala\r\n");
delay_ms(1000);
}
}边栏推荐
- Mac can't connect to local MySQL server through socket '/tmp/mysql Sock '(2) problem
- Kubernetes rapid installation
- kubernetes简介(kubernetes优点)
- It's not too much to fight a landlord in idea!
- These 10 kinds of timed tasks have been learned, and you can float directly
- Depth first search (template use)
- OSS authorizes a single bucket permission
- Introduction, architecture and principle of kubernetes
- sojson jsjiami.com.v6 爬虫js逆向
- Directory and file management
猜你喜欢

Redis special data type hyperloglog
![[small object velocimeter] only principle, no code](/img/df/b8a94d93d4088ebe8d306945fd9511.png)
[small object velocimeter] only principle, no code

XXL execute node error log swiping

mysql获取自增行标(区别mysql版本)

安装snownlp包过程出现Requirement already satisfied:及Read timed out.问题解决方法

【LVGL(2)】LVGL入门,在CodeBlock上进行模拟以及移植STM32

These 10 kinds of timed tasks have been learned, and you can float directly

metaRTC5.0实现君正的纯C的webrtc版IPC

Learn more about when to use MySQL two locks (table lock and row lock)

sql server 同步数据库 跨网段无公网ip几个常见小问题问题
随机推荐
Browser local storage
这10种定时任务学会了,直接飘
XXL execute node error log swiping
Special effects - cobweb background effects
[lvgl (5)] label usage
歹徒逃亡3
Special effects - Cherry Blossom falling background effects
(静态,动态,文件)三个版本的通讯录
kubernetes简介(kubernetes优点)
类的加载器 和 双亲委派机制详解
Redis distributed cache learning notes
[lvgl (2)]
Special effects - click the mouse, and a random color of love will appear
HashSet to array
PyQt5入门——学生管理系统
Talk about strong cache and negotiation cache
These 10 kinds of timed tasks have been learned, and you can float directly
类加载的过程(生命周期)详情分析
Redis特殊数据类型-GEO
Several common problems of SQL server synchronization database without public IP across network segments