STM32一些特殊引脚做IO使用的注意事项

1 PC13、PC14、PC15的使用

   这三个引脚与RTC复用,《STM32参考手册》中这样描述:  

 

 

PC13 PC14 PC15需要将VBAT与VDD连接,实测采用以下程序驱动4个74HC165可以不用上拉电阻,输出速度配置为2MHz(实测50MHz也能输出正常),但是还是建议加上拉电阻比较好。

最新文档中已经删除“在同一时间只有一个引脚能作为输出”也就是三个引脚可以同时作为输出引脚,其他条件未变

库函数版本程序如下:


 

  1. RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE );
  2. PWR_BackupAccessCmd( ENABLE );/* 允许修改RTC和后备寄存器,取消备份区写保护*/
  3. RCC_LSEConfig( RCC_LSE_OFF ); /* 关闭外部低速时钟OSC32,PC14+PC15可以用作普通IO*/
  4. BKP_TamperPinCmd(DISABLE); /* 关闭TAMPER入侵检测功能,PC13可以用作普通IO*/
  5. PWR_BackupAccessCmd(DISABLE); /* 禁止修改RTC和后备寄存器,备份区写保护*/
  6. /*注意PC13 PC14 PC15通过电源开关进行供电,只能吸收3mA电流,输出只能工作在2MHz,最大驱动30pF,不能驱动LED*/
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;   //PC13=SH/LD,PC14=SCLK,PC15空
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_Out_PP;
  10. GPIO_Init(GPIOC, &GPIO_InitStructure);



寄存器版本程序初始化如下:


 

  1. RCC->APB2ENR|=1<<4; //使能PORTC时钟
  2. RCC->APB2ENR|=1<<0; //使能AFIO时钟
  3. GPIOC->CRH&=0X000FFFFF; //PC13,14,15设置成输出 2MHz 推挽输出
  4. GPIOC->CRH|=0X22200000;
  5. PWR->CR|=1<<8; //取消备份区写保护
  6. RCC->BDCR&=0xFFFFFFFE; //外部低俗振荡器关闭 C14,PC15成为普通IO
  7. BKP->CR&=0xFFFFFFFE; //侵入检测TAMPER引脚作为通用IO口使用
  8. PWR->CR&=0xFFFFFEFF; //备份区写保护

 

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

 

 

 

 2 PB3、PB4、PA15引脚做GPIO使用(SWD下载程序)

    PB3、PB4、PA15分别与JTDO、JNTRST和JTDI复用,做普通口需要禁用JTAG,使用SWD下载程序。

程序如下:


 

  1. GPIO_InitTypeDef GPIO_InitStructure;
  2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
  3. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE );
  4. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

 

  1. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  2. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  4. GPIO_Init(GPIOA, &GPIO_InitStructure);
  5. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  6. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;
  7. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9. GPIO_Init(GPIOB, &GPIO_InitStructure);



 

posted on 2021-10-30 11:54  飘一点红  阅读(3313)  评论(0编辑  收藏  举报