STM32 PC13开启RTC后不能控制

STM32 使用HAL库,开启RTC后,PC能正常控制输出,但是一旦设置RTC时间日期后PC13就不能控制输出,永远输出高电平。各种尝试无果后果断放弃PC13更换一个管脚来控制。

### STM32F103RBT6 PC13作为RTC唤醒功能的接线方法和配置教程 #### 配置概述 STM32F103RBT6微控制器支持通过外部中断或RTC唤醒事件来实现低功耗模式下的唤醒操作。PC13引脚可以被配置为EXTI Line用于检测外部事件,也可以配合RTC模块完成定时唤醒的功能。 #### 硬件连接 为了使PC13能够响应RTC产生的唤醒信号,在硬件上需确保PC13已正确连接至电路板上的适当位置,并且该线路应能传递来自RTC模块的脉冲信号[^4]。 #### 软件初始化过程 在软件层面,需要执行如下几个主要步骤: - **启用相关外设时钟** 开启APB2总线上GPIO端口C与时钟控制(RCC)接口的访问权限;同时开启APB1总线下备份区域(BKP)及时钟管理单元(PWR)的操作许可。 - **设置PC13为输入模式** 将PC13设定为浮空输入状态以便于捕捉外界变化。 - **配置EXTI (External Interrupt/Event line)** 把PC13映射到对应的EXTI线上并允许其触发中断请求。 - **启动RTC及其报警机制** 初始化实时时钟组件,定义好期望的时间间隔后激活相应的警报源以发出唤醒指令给CPU核心部分。 - **进入待机模式前准备** 执行必要的预处理工作如保存上下文环境等之后调用`PWR_EnterSTANDBYMode()`函数让系统进入休眠等待状态直到下一次有效的唤醒条件达成为止。 以下是具体的代码示例展示上述流程中的关键环节: ```c #include "stm32f1xx_hal.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); // Enable Power and Backup interface clocks. __HAL_RCC_PWR_CLK_ENABLE(); __HAL_RCC_BKP_CLK_ENABLE(); // Allow access to backup domain settings. PWR->CR |= PWR_CR_DBP; // Configure the system time using LSI as clock source for RTC. RCC_OscInitTypeDef osc_init; osccfg.OscillatorType = RCC_OSCILLATORTYPE_LSI; osccfg.PLL.PLLState = RCC_PLL_NONE; osccfg.LSIState = RCC_LSI_ON; HAL_RCC_OscConfig(&osccfg); // Select LSI as RTC Clock Source. RCC_PeriphCLKInitTypeDef periph_clkinitstruct; periph_clkinitstruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; periph_clkinitstruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; HAL_RCCEx_PeriphCLKConfig(&periph_clkinitstruct); // Initialize RTC with default parameters. RTC_HandleTypeDef hrtc; hrtc.Instance = RTC; if(HAL_RTC_Init(&hrtc)!= HAL_OK){ Error_Handler(); } // Set up an alarm event that will trigger after one minute from now. RTC_AlarmTypeDef sAlarm; sAlarm.AlarmTime.Hours = ... ;//Set hour value here sAlarm.AlarmTime.Minutes = ...;//Set minutes value here sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES; sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL; if(HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm,RTC_FORMAT_BIN)!= HAL_OK){ Error_Handler(); } // Map EXTI Line 13 to GPIO Pin C13 which is connected to RTC Alarm output. SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13); // Configure EXTI Line 13 interrupt request. EXTI_InitStruct.Line=EXTI_Line13 ; EXTI_InitStruct.Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.GPIOSelction = EXTI_GPIOSourceGPIOC; HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0x03 , 0 ); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn ); // Enter Standby mode until next valid wake-up signal arrives. HAL_PWR_EnterSTANDBYMode(); } __weak void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){ // Handle wakeup action when
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值