灵动微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即可。

上一篇下一篇

猜你喜欢

热点阅读