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);



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM