如何重映射STM32 TIM2定时器

STM32定时器

文章目录

  • STM32定时器
  • @[TOC](文章目录)
  • 前言
  • 一、问题分析
  • 二、代码
  • 前言

    最近想弄一个多路输出PWM,但是发现TIM2不能用,根据手册也对它进行重映射了,但是还是不能用,用示波器发现驱动能力比较弱,然后禁用jtag搞定了。

    一、问题分析


    重映射的参数在stm32底层文件可以看到

    这里有写

    GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);  //完全映射
    

    1.不重映射时,默认的IO口是PA0、PA1、PA2、PA3

    2.要使用PA15、PB3、PA2、PA3的端口组合,要调用下面的语句进行部分重映射:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //重映射必须要开AFIO时钟

    GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);

    3.要使用PA0、PA1、PB10、PB11的端口组合,要调用下面的语句进行部分重映射:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //重映射必须要开AFIO时钟

    GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE);

    4.要使用PA15、PB3、PB10、PB11的端口组合,要调用下面的语句进行完全重映射:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //重映射必须要开AFIO时钟

    GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);

    同时还要禁用JTAG功能,PA15、PB3、PB10、PB11才会正常输出。

    关于JTAG功能:

    STM32启动时,默认PB4、PB3、PA15三个引脚不是普通IO,而是JTAG调试功能引脚,分别为JNTRST、JTDO、JTDI。要将这些引脚用作

    普通IO口,必须释放掉调试功能才能当普通IO口使用,但首先应开启RCC_APB2Periph_AFIO时钟,否则禁用不了。

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); //SWJ完全失能

    GPIO_Remap_SWJ_NoJTRST :除 JTRST 外 SWJ 完全使能(JTAG+SW-DP)
    GPIO_Remap_SWJ_JTAGDisable :JTAG-DP 失能 + SW-DP 使能
    GPIO_Remap_SWJ_Disable :SWJ 完全失能(JTAG+SW-DP)

    二、代码

    我想使用PA15 PB3 PB10 PB11

      GPIO_InitTypeDef GPIO_InitStructure;  
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);   
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);   
      
      GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);  
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //禁止JTAG功能,把PB3,PB4作为普通IO口使用  
        
      GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;  
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           // 复用推挽输出  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      GPIO_Init(GPIOA, &GPIO_InitStructure);  
      
      GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 | GPIO_Pin_10 | GPIO_Pin_11;  
      GPIO_Init(GPIOB, &GPIO_InitStructure);  
    

    作者:我与nano

    物联沃分享整理
    物联沃-IOTWORD物联网 » 如何重映射STM32 TIM2定时器

    发表回复