1. 程式人生 > >stm32 PB3 PB4 PA15引腳作為普通IO口使用指南

stm32 PB3 PB4 PA15引腳作為普通IO口使用指南

stm32的PB3 PB4 PA15引腳可以在使用SWD模擬和燒錄的情況下釋放出來,作為普通IO口使用。

初始化程式碼如下:

  1. GPIO_InitTypeDef GPIO_InitStructure;

  2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

  3. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

  4. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

  5. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  6. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  7. GPIO_Init(GPIOB, &GPIO_InitStructure);

  8. GPIO_SetBits(GPIOB,GPIO_Pin_4);

  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  11. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  12. GPIO_Init(GPIOB, &GPIO_InitStructure);

  13. GPIO_SetBits(GPIOB,GPIO_Pin_3);

  14. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;

  15. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  16. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  17. GPIO_Init(GPIOA, &GPIO_InitStructure);

  18. GPIO_ResetBits(GPIOA,GPIO_Pin_15);

在實際測試的時候,發現工程內PB3 PB15無法當做普通IO使用,最後發現解決辦法為:

上面這段初始化程式碼放在所有IO初始化最後就好了。

通過現象除錯找到問題原因:

當把PB3 PB4 PA15初始化好之後,如果再次呼叫GPIOA GPIOB介面的時鐘程式碼的話,會使得PB3 PA15引腳變回JTAG的引腳

即初始化完之後不能再執行如下程式碼,否則PB3 PA15引腳會變回JTAG的引腳,而無法作為普通IO使用

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

--------------------- 本文來自 物致-皈依 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/a18156289516/article/details/60332934?utm_source=copy