美文网首页
灵动微MM32F0010硬件最小系统 --- SWD脚位复用设置

灵动微MM32F0010硬件最小系统 --- SWD脚位复用设置

作者: 黄开通 | 来源:发表于2021-03-09 16:55 被阅读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即可。

    相关文章

      网友评论

          本文标题:灵动微MM32F0010硬件最小系统 --- SWD脚位复用设置

          本文链接:https://www.haomeiwen.com/subject/aorbqltx.html