完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在用STM32L476,做一个中断唤醒触发计数的应用,遇到一个问题,如下:
1、初始化为4个外部中断下降沿唤醒,MCU外部上拉电阻,同时也使能了内部上拉,设置3个变量,在中断函数内分别对3个变量进行自增计数,并于3个外部中断对应,另一个中断仅用于唤醒,没有计数变量,程序初始化后进入停机模式。 2、程序可以正常唤醒,但是任意一个外部中断触发都会触发所有的引脚中断。 现在不明白什么设置造成了所有中断的触发,有人遇到过吗? 也就是停机模式设置多个外部中断唤醒,从停机唤醒后要确认是那个引脚引起的。 /*Configure GPIO pins : PCPin PCPin PCPin */ GPIO_InitStruct.Pin = A_Count_Pin|B_Count_Pin|C_Count_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOC, GPIO_InitStruct); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = SYS_WKUP1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(SYS_WKUP1_GPIO_Port, GPIO_InitStruct); //引脚中断 void HAL_GPIO_EXti_Callback(uint16_t GPIO_Pin) { // SystemClock_Config(); // HAL_Delay(100); if(GPIO_Pin == GPIO_PIN_0)//PA0 WKUP1 { // HAL_GPIO_TogglePin(RunLed_GPIO_Port,RunLed_Pin); } else if(GPIO_Pin == GPIO_PIN_1)//PC1 { UserData.C_Temp ++; // HAL_GPIO_TogglePin(RunLed_GPIO_Port,RunLed_Pin); } else if(GPIO_Pin == GPIO_PIN_2)//PC2 { UserData.B_Temp ++; // HAL_GPIO_TogglePin(RunLed_GPIO_Port,RunLed_Pin); } else if(GPIO_Pin == GPIO_PIN_3)//PC3 { UserData.A_Temp ++; // HAL_GPIO_TogglePin(RunLed_GPIO_Port,RunLed_Pin); } } |
|
相关推荐
1个回答
|
|
改为直接设置非中断唤醒引脚就可以了.
static void GPIO_LowPower_Config(void)//引脚处理,设置唤醒源中断 错误方式 { /*GPIO端口配置成模拟输入,不使用的时钟全部关闭,GPIOC时钟保留,因使用PC13唤醒*/ GPIO_InitTypeDef GPIO_InitStruct = {0}; MX_GPIO_DeInit();/*不能执行这个,否则唤醒后就进入中断*/ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitStruct.Pin = A_Count_Pin|B_Count_Pin|C_Count_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; HAL_GPIO_Init(GPIOC, GPIO_InitStruct);//PC1:3 GPIO_InitStruct.Pin = SYS_WKUP1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; HAL_GPIO_Init(SYS_WKUP1_GPIO_Port, GPIO_InitStruct);//PA0 /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); HAL_NVIC_SetPriority(EXTI1_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI1_IRQn); HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI2_IRQn); HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI3_IRQn); } /*新的*/ static void GPIO_LowPower_Config(void)//引脚处理,设置唤醒源中断 正确方式 { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, Lora_RST_Pin|W4G_PWR_Pin|ADC_PWR_Pin|DIS_PWR_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(RunLed_GPIO_Port, RunLed_Pin, GPIO_PIN_SET); /*Configure GPIO pins : PBPin PBPin PBPin PBPin */ GPIO_InitStruct.Pin = Lora_RST_Pin|W4G_PWR_Pin|ADC_PWR_Pin|DIS_PWR_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, GPIO_InitStruct); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = W4G_STA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(W4G_STA_GPIO_Port, GPIO_InitStruct); /*Configure GPIO pins : PB11 PB7 */ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, GPIO_InitStruct); /*Configure GPIO pins : PCPin PCPin PCPin PCPin */ GPIO_InitStruct.Pin = Key4_Pin|Key3_Pin|Key2_Pin|Key1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, GPIO_InitStruct); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = RunLed_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(RunLed_GPIO_Port, GPIO_InitStruct); /*Configure GPIO pins : PA11 PA12 */ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); // __HAL_RCC_GPIOA_CLK_DISABLE(); __HAL_RCC_GPIOB_CLK_DISABLE(); // __HAL_RCC_GPIOC_CLK_DISABLE(); __HAL_RCC_GPIOD_CLK_DISABLE(); // __HAL_RCC_GPIOE_CLK_DISABLE(); // __HAL_RCC_GPIOF_CLK_DISABLE(); // __HAL_RCC_GPIOG_CLK_DISABLE(); __HAL_RCC_GPIOH_CLK_DISABLE(); } void MX_GPIO_DeInit(void) { /*GPIO端口配置成模拟输入,时钟全部关闭*/ GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); // __HAL_RCC_GPIOE_CLK_ENABLE(); // __HAL_RCC_GPIOF_CLK_ENABLE(); // __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pin = GPIO_PIN_All; // HAL_GPIO_Init(GPIOA, GPIO_InitStruct); HAL_GPIO_Init(GPIOB, GPIO_InitStruct); HAL_GPIO_Init(GPIOC, GPIO_InitStruct); HAL_GPIO_Init(GPIOD, GPIO_InitStruct); // HAL_GPIO_Init(GPIOE, GPIO_InitStruct); // HAL_GPIO_Init(GPIOF, GPIO_InitStruct); // HAL_GPIO_Init(GPIOG, GPIO_InitStruct); HAL_GPIO_Init(GPIOH, GPIO_InitStruct); // __HAL_RCC_GPIOA_CLK_DISABLE(); __HAL_RCC_GPIOB_CLK_DISABLE(); __HAL_RCC_GPIOC_CLK_DISABLE(); __HAL_RCC_GPIOD_CLK_DISABLE(); // __HAL_RCC_GPIOE_CLK_DISABLE(); // __HAL_RCC_GPIOF_CLK_DISABLE(); // __HAL_RCC_GPIOG_CLK_DISABLE(); __HAL_RCC_GPIOH_CLK_DISABLE(); } void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, Lora_RST_Pin|W4G_PWR_Pin|ADC_PWR_Pin|DIS_PWR_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(RunLed_GPIO_Port, RunLed_Pin, GPIO_PIN_RESET); /*Configure GPIO pins : PCPin PCPin PCPin */ GPIO_InitStruct.Pin = A_Count_Pin|B_Count_Pin|C_Count_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; HAL_GPIO_Init(GPIOC, GPIO_InitStruct);//计数 /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = SYS_WKUP1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; HAL_GPIO_Init(SYS_WKUP1_GPIO_Port, GPIO_InitStruct);//唤醒 /*Configure GPIO pins : PBPin PBPin PBPin PBPin */ GPIO_InitStruct.Pin = Lora_RST_Pin|W4G_PWR_Pin|ADC_PWR_Pin|DIS_PWR_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, GPIO_InitStruct); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = W4G_STA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(W4G_STA_GPIO_Port, GPIO_InitStruct); /*Configure GPIO pins : PB11 PB7 */ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, GPIO_InitStruct); /*Configure GPIO pins : PCPin PCPin PCPin PCPin */ GPIO_InitStruct.Pin = Key4_Pin|Key3_Pin|Key2_Pin|Key1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOC, GPIO_InitStruct); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = RunLed_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(RunLed_GPIO_Port, GPIO_InitStruct); /*Configure GPIO pins : PA11 PA12 */ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); HAL_NVIC_SetPriority(EXTI1_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI1_IRQn); HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI2_IRQn); HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 0); HAL_NVIC_EnableIRQ(EXTI3_IRQn); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:16 , Processed in 0.846425 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号