灵动微MM32F0010硬件最小系统 --- SWD脚位复用设置
2021-03-09 本文已影响0人
黄开通
近期在做一个小项目,准备把手头闲置的烤箱改造成小型回流焊接机。原计划用MM32F003TW做主控,但它的可用gpio只有16个,不能满足需求。于是改用MM32F0010AT,有18个可用GPIO,虽然也不够,但是勉强能用。
这里就遇到一个问题,SWD接口不能像普通GPIO那样初始化,就能够使用。灵动微的官方例程又没有提供相应demo例程。印象中MM32F003TW的例程里有SWD复用例程的。于是参考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);
}
重点就是,当SWD做普通GPIO使用时,需要将其配置为一个空的AF功能,比如这里就设置成AF4;恢复SWD功能,将其配置为AF0即可。