1 PC13、PC14、PC15的使用
這三個引腳與RTC復用,《STM32參考手冊》中這樣描述:
PC13 PC14 PC15需要將VBAT與VDD連接,實測采用以下程序驅動4個74HC165可以不用上拉電阻,輸出速度配置為2MHz(實測50MHz也能輸出正常),但是還是建議加上拉電阻比較好。
最新文檔中已經刪除“在同一時間只有一個引腳能作為輸出”也就是三個引腳可以同時作為輸出引腳,其他條件未變
庫函數版本程序如下:
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE );
- PWR_BackupAccessCmd( ENABLE );/* 允許修改RTC和后備寄存器,取消備份區寫保護*/
- RCC_LSEConfig( RCC_LSE_OFF ); /* 關閉外部低速時鍾OSC32,PC14+PC15可以用作普通IO*/
- BKP_TamperPinCmd(DISABLE); /* 關閉TAMPER入侵檢測功能,PC13可以用作普通IO*/
- PWR_BackupAccessCmd(DISABLE); /* 禁止修改RTC和后備寄存器,備份區寫保護*/
- /*注意PC13 PC14 PC15通過電源開關進行供電,只能吸收3mA電流,輸出只能工作在2MHz,最大驅動30pF,不能驅動LED*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15; //PC13=SH/LD,PC14=SCLK,PC15空
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_Out_PP;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
寄存器版本程序初始化如下:
- RCC->APB2ENR|=1<<4; //使能PORTC時鍾
- RCC->APB2ENR|=1<<0; //使能AFIO時鍾
- GPIOC->CRH&=0X000FFFFF; //PC13,14,15設置成輸出 2MHz 推挽輸出
- GPIOC->CRH|=0X22200000;
- PWR->CR|=1<<8; //取消備份區寫保護
- RCC->BDCR&=0xFFFFFFFE; //外部低俗振盪器關閉 C14,PC15成為普通IO
- BKP->CR&=0xFFFFFFFE; //侵入檢測TAMPER引腳作為通用IO口使用
- PWR->CR&=0xFFFFFEFF; //備份區寫保護
其他鏈接:STM32L PC13當IO口使用驅動LED,PC14,PC15外接晶振,且RTC正常
2 PB3、PB4、PA15引腳做GPIO使用(SWD下載程序)
PB3、PB4、PA15分別與JTDO、JNTRST和JTDI復用,做普通口需要禁用JTAG,使用SWD下載程序。
程序如下:
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE );
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);