STM32L PC13当IO口使用驱动LED,PC14,PC15外接晶振,且RTC正常...

本文介绍了STM32F103系列微控制器中PC13引脚作为LED驱动的问题及解决方案。通过配置RTC寄存器解决了PC13无法正常工作的问题,并成功实现了LED的点亮。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:图一,画PCB时,因为看到PC13离LED比较近,就用PC13来驱动LED,查看手册后,也没说不能驱动LED,所以硬件是可以的。但是在调试软件时发现时钟点亮不了LED,然后在网上找资料,但都是STMF103系列的(PC13最大输出速度不能大于2MHZ,且不能驱动LED)。


STM32F103系列,当PC14,PC15外接晶振时,好像PC13不能当IO口使用,用过103的人谁帮忙验证下?

我又仔细看了下STM32L的参考手册(RM0038),7.3.15 Selection of RTC_AF1 alternate function章节,可以当IO口使用,于是启动KEIL调试,查看图二所描述的寄存器,


RTC->CR OSE位L[1:0] = 00;RTC->CR COE位= 0;  RTC_TAFCR TAMP1E位 = 0; RTC->CR TSE位 = 1; PWR_CS EWUP2 = 0;  对照图二发现RTC->CR TSE位被置一了,对应的功能是时间戳侵入和侵入输入,浮空输入,所以只要将改为置0,就能够使用普通IO口功能了。


void LED_Config(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;        
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC,ENABLE);
/* Configure the test LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}


void RTC_Config(void)
{
  /* Enable the PWR clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

  /* Allow access to RTC */
  PWR_RTCAccessCmd(ENABLE);

#if defined (RTC_CLOCK_SOURCE_LSI)  /* LSI used as RTC source clock*/
/* The RTC Clock may varies due to LSI frequency dispersion. */
  /* Enable the LSI OSC */ 
  RCC_LSICmd(ENABLE);

  /* Wait till LSI is ready */  
  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
  {
  }

  /* Select the RTC Clock Source */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

  SynchPrediv = 0xFF;
  AsynchPrediv = 0x7F;

#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */
  /* Enable the LSE OSC */
  RCC_LSEConfig(RCC_LSE_ON);

  /* Wait till LSE is ready */  
  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
  {
  }

  /* Select the RTC Clock Source */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

  SynchPrediv = 0xFF;
  AsynchPrediv = 0x7F;

#else
  #error Please select the RTC Clock source inside the main.c file
#endif /* RTC_CLOCK_SOURCE_LSI */

  /* Enable the RTC Clock */
  RCC_RTCCLKCmd(ENABLE);

  /* Wait for RTC APB registers synchronisation */
  RTC_WaitForSynchro();

  /* Enable The TimeStamp */
        RTC_TimeStampCmd(RTC_TimeStampEdge_Rising, DISABLE);  //RTC->CR TSE位清0
        RTC_TimeStampCmd(RTC_TimeStampEdge_Falling, DISABLE); //RTC->CR TSE位清0
}


成功点亮LED,并且能够使用RTC



### STM32F4 PC13PC14PC15引脚配置及用法 对于STM32F4系列微控制器而言,要使PC13PC14以及PC15作为通用输入/输出(GPIO)端工作,需执行特定初始化操作。这些引脚具有特殊功能,默认情况下可能不完全适合作为标准I/O使用。 #### 初始化设时钟 为了能够访问并配置GPIOC端中的这几位,首先要开启对应的APB2总线上的时钟供应。此过程涉及调用`RCC_APB2PeriphClockCmd()`函数来激活GPIOC及其相关设的功能[^3]: ```c // 开启 GPIOC 及 AFIO 的时钟供给 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); ``` #### 处理备用区域权限 由于PC14PC15还承担着振荡器输入的角色,并PC13可被用于入侵检测,在改变其用途前需要获取对备份域写入的权利。通过启用PWR模块下的相应命令实现这一点: ```c // 获取 RTC 和后备寄存器的修改权利 PWR_BackupAccessCmd(ENABLE); ``` #### 调整低速晶振状态 为了让PC14PC15脱离默认连至LSE的状态而转为常规I/O模式,必须先禁用该低频晶体震荡源。同样地,如果希望PC13也能充当普通的GPIO,则应取消任何与其关联的安全特性如侵入报警等功能: ```c // 停止 LSE 振荡器的操作,使得 PC14PC15 成为普通 I/O RCC_LSEConfig(RCC_LSE_OFF); // 禁用 Tamper 功能,让 PC13 成为普通 I/O BKP_TamperPinCmd(DISABLE); ``` #### 还原保护措施 完成上述更改之后,应当重新锁定对RTC及相关资源的访问控制权,防止意篡改其他敏感参数: ```c // 锁定 RTC 和后备寄存器,阻止进一步改动 PWR_BackupAccessCmd(DISABLE); ``` #### 设置具体的工作方式 最后一步就是按照实际需求定义这三个引脚的具体行为——比如将其设定成推挽输出型态以便驱动LED灯等设备。这里给出一段简单的例子说明如何将它们全部设置为上拉输入模式: ```c GPIO_InitTypeDef GPIO_InitStruct; // 准备结构体成员赋值 GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 或者选择其他模式 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // 应用配置到指定端 GPIO_Init(GPIOC, &GPIO_InitStruct); ``` 以上步骤展示了怎样正确地把STM32F4里的PC13PC14还有PC15转变为一般意义上的数字,并可根据项目具体情况调整相应的属性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值