完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
直接用我的代码呢?
|
|
|
|
老师好!我的板子三个按键分别接PA8,PD3,PA0,且一端都接地。端口时钟使能及模式设置都写了。中断配置改成了这样:
GPIOA->ODR|=1<<0; //PA0上拉 GPIOA->ODR|=1<<8; //PA8上拉 GPIOD->ODR|=1<<3; //PD3上拉 Ex_NVIC_Config(GPIO_A,8,FTIR); Ex_NVIC_Config(GPIO_D,3,FTIR); Ex_NVIC_Config(GPIO_A,0,FTIR); MY_NVIC_Init(2,1,EXTI9_5_IRQChannel,2);//user1键(PA8)中断初始化 MY_NVIC_Init(2,1,EXTI3_IRQChannel,2); //user2键(PD3)中断初始化 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //key_wake键(PA0)中断初始化 中断服务函数如下: void EXTI0_IRQHander(void)//PA0(wake键)触发的外部中断服务函数 { delay_ms(10); //消抖 if(key_wake==0) { led1=!led1; led2=!led2; } EXTI->R=1<<0;//清除line0中断线上的中断标志位 } void EXTI19_5_IRQHand(void) //PA8(user1键)触发的外部中断服务函数 { delay_ms(10); if(key0==0) led1=!led1;//二极管从led1开始 EXTI->R=1<<8; } void EXTI3_IRQHandler(void)//PD3(user2键)触发的外部中断服务函数 { delay_ms(10); if(key1==0) led2=!led2; EXTI->R=1<<3; } 问题何在?感谢老师不吝赐教! |
|
|
|
|
|
|
|
仿真执行到中断就只能停止了……工程文件如下:
exti.h代码: #ifndef _EXTI_H #define _EXTI_H void exti_init(void); #endif exti.c代码: #include"exti.h" #include"led.h" #include"key.h" #include"delay.h" #include"usart.h" void EXTI0_IRQHander(void)//PA0(wake键)触发的外部中断服务函数 { delay_ms(10); //消抖 if(key_wake==0) { led1=!led1; led2=!led2; } EXTI->R=1<<0;//清除line0中断线上的中断标志位 } void EXTI19_5_IRQHand(void) //PA8(user1键)触发的外部中断服务函数 { delay_ms(10); if(key0==0) led1=!led1; EXTI->R=1<<8; } void EXTI3_IRQHandler(void)//PD3(user2键)触发的外部中断服务函数 { delay_ms(10); if(key1==0) led2=!led2; EXTI->R=1<<3; } void exti_init(void) { RCC->APB2ENR|=1<<2;//使能portA时钟 RCC->APB2ENR|=1<<5;//使能portD时钟 JTAG_Set(JTAG_SWD_DISABLE); //KEY0设置 GPIOA->CRH&=0XFFFFFFF0; //PA8设置成输入模式 GPIOA->CRH|=0X00000008; //PA8进一步设置成上下拉输入模式 //KEY1设置 GPIOA->CRL&=0XFFFFFFF0; //PA0设置成输入模式 GPIOA->CRL|=0X00000008; //PA0进一步设置成上下拉输入模式 //wake_up设置 GPIOD->CRL&=0XFFFF0FFF; //PD3设置成输入模式 GPIOD->CRL|=0X00008000; //PD3进一步设置成上下拉输入模式 GPIOA->ODR|=1<<0; //PA0上拉 GPIOA->ODR|=1<<8; //PA8上拉,PA0下拉(默认) GPIOD->ODR|=1<<3; //PD3上拉 Ex_NVIC_Config(GPIO_A,8,FTIR); Ex_NVIC_Config(GPIO_D,3,FTIR); Ex_NVIC_Config(GPIO_A,0,FTIR); MY_NVIC_Init(2,1,EXTI9_5_IRQChannel,2);//user1键(PA8)中断初始化 MY_NVIC_Init(2,1,EXTI3_IRQChannel,2); //user2键(PD3)中断初始化 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //key_wake键(PA0)中断初始化 } test.c代码: #include #include"sys.h" #include"usart.h" #include"delay.h" #include"led.h" #include"key.h" #include"exti.h" int main() { Stm32_Clock_Init(9); delay_init(72); uart_init(72,9600); led_init(); exti_init(); while(1) { printf("ok "); delay_ms(1000); } } 整个工程编译通过,没贴出来的led.h等都调试通过了,系统代码用的您的。麻烦老师再帮忙看一下。 |
|
|
|
终于找到你的问题了.
你中断函数的名字没写正确. void EXTI3_IRQHandler(void) void EXTI19_5_IRQHand(void) void EXTI0_IRQHander(void) 居然3个handler,都不一样,你牛逼!!! |
|
|
|
|
|
|
|
什么都用中断,也不好。尽量不用。
|
|
|
|
前几天在忙其他的事,刚调好了。以后还是得先多找自己的问题呵呵……灰常感谢!
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1537 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1490 浏览 1 评论
910 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
654 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1538 浏览 2 评论
1845浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
598浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
499浏览 3评论
499浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
483浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 23:21 , Processed in 0.896883 second(s), Total 91, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号