完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是想利用中断去唤醒MCU,不是wakeup事件; 是利用PC13与PA0的外部中断去唤醒; 现在的问题是;PC13无法触发外部中断; 由于PC13的默认功能不是GPIO 我首先将PC13配置为GPIO模式 然后就开始配置了;但是现在一直不能进中断;我用的是SMT32F030C8T6 下面是我的代码 USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; EXti_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC,ENABLE); /* Configure pins as AF pushpull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA,&GPIO_InitStructure); //FP_EN GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PWR_EN GPIO_Init(GPIOB,&GPIO_InitStructure); //FP 中断配置 PC13 RTC->TAFCR &= 0xFFF7FFFF; //PC13 作为GPIO用 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Line = EXTI_Line13; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource13);//PC13 中断线映射 EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_InitStructure.USART_BaudRate = 115200;//串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式. USART_Init(USART1, &USART_InitStructure); //初始化串口 USART_Cmd(USART1, ENABLE); //使能串口 下面是中断服务函数 void EXTI4_15_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line13)!=RESET) { //FP_Verify(); printf("rn FP Verify"); } EXTI_ClearITPendingBit(EXTI_Line13); } 我用GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13); 是能够读到触发的电平的,所以外部信号确认是有的; 不知道哪位大师做过这个 |
|
相关推荐
9个回答
|
|
感谢;标准库的 帮助文档里面确实有;我都没想到去看
加一句 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); 就可以了 |
|
|
|
不是有例子吗??
|
|
|
|
|
|
|
|
我有个同样的例子,不过是hal库写的,贴上来你看看吧
|
|
|
|
//首先、把PC13设置为下降沿中断
/*Configure GPIO pin : PC13 */ GPIO_InitStruct.Pin = GPIO_PIN_13; // PC13设置为下降沿中断 GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
其次、 设置PC13终端优先级
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0x06, 0); // PC13 HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); |
|
|
|
再次、写个PC13中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == GPIO_PIN_13) // PC13触发的中断 { Just_Wkup = TRUE; } } |
|
|
|
最后、写唤醒程序
while(1) { if(Just_Wkup == TRUE) { Just_Wkup = FALSE; SystemClock_Config(); // 初始化系统时钟 } } |
|
|
|
标准库写的和hal库只是写法不同,思路是一样的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2049 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1893 浏览 3 评论
4485 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2040 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2549 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 00:21 , Processed in 0.693185 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号