近期在做一個小項目造烁,準(zhǔn)備把手頭閑置的烤箱改造成小型回流焊接機。原計劃用MM32F003TW做主控汽摹,但它的可用gpio只有16個李丰,不能滿足需求。于是改用MM32F0010AT逼泣,有18個可用GPIO趴泌,雖然也不夠,但是勉強能用拉庶。
這里就遇到一個問題嗜憔,SWD接口不能像普通GPIO那樣初始化,就能夠使用氏仗。靈動微的官方例程又沒有提供相應(yīng)demo例程痹筛。印象中MM32F003TW的例程里有SWD復(fù)用例程的。于是參考003的代碼,直接拷貝到001的工程帚稠,又不能直接用的谣旁。
于是又一頓代碼比對,查看用戶手冊滋早¢螅總算是折騰成功了,下面就列出修改方法杆麸,供大家參考搁进。
void setPA13PA14SWDasPushPullGPIO(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource13, GPIO_AF_4); //AF to not pararell
GPIO_PinAFConfig(GPIOA, GPIO_PinSource14, GPIO_AF_4); //AF to not pararell
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void setPA13PA14asSWD(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource13, GPIO_AF_0); //Set PA13 as SWDIO
GPIO_PinAFConfig(GPIOA, GPIO_PinSource14, GPIO_AF_0); //Set PA14 as SWDCLK
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //Pull-up input
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
重點就是,當(dāng)SWD做普通GPIO使用時昔头,需要將其配置為一個空的AF功能饼问,比如這里就設(shè)置成AF4;恢復(fù)SWD功能揭斧,將其配置為AF0即可莱革。