时尚类网站设计公司,邯郸模板建站教程,室内设计效果图怎么收费,昆明企业制作网站设置按键中断#xff0c;按键1按下#xff0c;LED亮#xff0c;再按一次#xff0c;灭按键2按下#xff0c;蜂鸣器响。再按一次#xff0c;不响按键3按下#xff0c;风扇转#xff0c;再按一次#xff0c;风扇停
src/key_it.c
#includekey_it.h
//GPIO初…设置按键中断按键1按下LED亮再按一次灭按键2按下蜂鸣器响。再按一次不响按键3按下风扇转再按一次风扇停
src/key_it.c
#includekey_it.h
//GPIO初始化
void all_led_init()
{//RCC使能RCC-MP_AHB4ENSETR | (0X14);//设置PE10 PF10 PE8为输出GPIOE-MODER (~(0X320));GPIOE-MODER | (0X120);//设置推挽输出GPIOE-OTYPER (~(0X110)); //设置三个管脚低速输出GPIOE-OSPEEDR (~(0X320));//设置三个管脚输出时无上拉电阻和下拉电阻 GPIOE-PUPDR (~(0X320));
}
void all_spi_init()
{//RCC使能RCC-MP_AHB4ENSETR | (0X31);//设置PE10 PF10 PE8为输出GPIOB-MODER (~(0X312));GPIOB-MODER | (0X112);//设置推挽输出GPIOB-OTYPER (~(0X16)); //设置三个管脚低速输出GPIOB-OSPEEDR (~(0X312));//设置三个管脚输出时无上拉电阻和下拉电阻 GPIOB-PUPDR (~(0X312));
}
void all_fan_init()
{//RCC使能RCC-MP_AHB4ENSETR | (0X34);//设置PE10 PF10 PE8为输出GPIOE-MODER (~(0X318));GPIOE-MODER | (0X118);//设置推挽输出GPIOE-OTYPER (~(0X19)); //设置三个管脚低速输出GPIOE-OSPEEDR (~(0X318));//设置三个管脚输出时无上拉电阻和下拉电阻 GPIOE-PUPDR (~(0X318));
}
//按键2的配置
void key2_it_config()
{//RCC使能GPIOF时钟RCC-MP_AHB4ENSETR | (0x15);//pf7GPIOF-MODER (~(0x314));//pf7EXTI-EXTICR2 (~(0xFF24));EXTI-EXTICR2 | (0x524);//pf7EXTI-FTSR1 | (0x17);//PF7EXTI-C1IMR1 | (0x17);//PF7 97号中断GICD-ISENABLER[3] | (0X11); //PF7GICD-IPRIORITYR[24] (~(0X1F11)); //pf7 97中断GICD-ITARGETSR[24] (~(0X38));GICD-ITARGETSR[24] | (0X18);
}
//按键1 按键3以及GICC层的配置
void key_it_config()
{//RCC使能GPIOF时钟RCC-MP_AHB4ENSETR | (0x15);//设置PF9 PF7 PF8GPIO输入//PF9GPIOF-MODER (~(0x318));//PF8GPIOF-MODER (~(0x316));//设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx//pf8EXTI-EXTICR3 (~(0xFF0));EXTI-EXTICR3 | (0x50);//pf9EXTI-EXTICR3 (~(0xFF8));EXTI-EXTICR3 | (0x58);//设置事件触发方式为下降沿触发EXTI_FTSR1//pf8EXTI-FTSR1 | (0x18);//pf9EXTI-FTSR1 | (0x19);//设置EXTI事件触发不屏蔽EXTI_IMR1//PF8EXTI-C1IMR1 | (0x18);//PF9EXTI-C1IMR1 | (0x19);//使能中断能转发到特定的CPU接口层GICD_ISENABLERx//PF8 98号中断GICD-ISENABLER[3] | (0X12); //PF9 99号中断GICD-ISENABLER[3] | (0X13); //GICD_ISENABLERx设置中断优先级//PF8GICD-IPRIORITYR[24] (~(0X1F19)); //PF9GICD-IPRIORITYR[24] (~(0X1F27)); //设置当前中断被转发到哪一个CPU处理GICD_ITARGETSRx//pf8 98中断GICD-ITARGETSR[24] (~(0X316));GICD-ITARGETSR[24] | (0X116);//pf9 99中断GICD-ITARGETSR[24] (~(0X324));GICD-ITARGETSR[24] | (0X124);//使能组0转发中断GICD_CTLRGICD-CTRL | 0X1;//设置中断优先级掩码GICC_PMRGICC-PMR | (0x1F3);//使能CPU可以处理组0转发的中断GICC_CTLRGICC-CTRL | 0X1;}
src/do_irq.c #include key_it.hextern void printf(const char *fmt, ...);unsigned int i 0;void do_irq(void) {static int flag0;static int flag10;static int flag20;int irqno;//保存中断号irqnoGICC-IAR 0X3FF;switch(irqno){case 99://key1//按键1中断处理//printf(KEY1 INT\n);if(0flag){//LED1亮GPIOE-ODR | (0X110);flag1;}else if(1flag){//LED1灭GPIOE-ODR (~(0X110));flag0;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x13);//清除中断触发标志位EXTI_FPR1EXTI-FPR1 | (0x19);break;case 97://key2//按键2中断处理//printf(KEY2 INT\n);if(0flag1){//蜂鸣器响GPIOB-ODR | (0X16);flag11;}else if(1flag1){//蜂鸣器不响GPIOB-ODR (~(0X16));flag10;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x11);//清除中断触发标志位EXTI_FPR1EXTI-FPR1 | (0x17);break;case 98://key3//按键3中断处理// printf(KEY3 INT\n);if(0flag2){//风扇转GPIOE-ODR | (0X19);flag21;}else if(1flag2){//风扇停GPIOE-ODR (~(0X19));flag20;}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0x12);//清除中断触发标志位EXTI_FPR1EXTI-FPR1 | (0x18);break;}//清除处理完的中断号GICC_EOIRGICC-EOIR irqno;}
include/key_it.h
#ifndef __KEY_IT_H__
#define __KEY_IT_H__
#include stm32mp1xx_rcc.h
#include stm32mp1xx_gpio.h
#include stm32mp1xx_exti.h
#include stm32mp1xx_gic.hvoid key_it_config();
void key2_it_config();
void all_led_init();
void all_spi_init();
void all_fan_init();#endif
main.c
#include uart.h#include key_it.hint main(){uart4_init();//串口初始化all_led_init();//中断初始化key_it_config();key2_it_config();all_spi_init();all_fan_init();while(1){//保证主程序不结束} return 0;}