打印
[STM32F4]

STM32F4定时器配置

[复制链接]
154|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
定时器时钟配置
定时器分类
以stm32f4为例,总共包括14个定时器(time2和time5为32位,其余均为16位)
不同种类的定时器挂靠的时钟来源不同


使用特权

评论回复
沙发
wangtaohui|  楼主 | 2023-8-20 23:14 | 只看该作者
定时器时钟
不同的定时器挂载在不同的总线上(APBx,x=1,2),内部时钟图如下图所示:


使用特权

评论回复
板凳
wangtaohui|  楼主 | 2023-8-20 23:14 | 只看该作者
在system_stm32f4xx.c中已经设置APB1和APB2时钟,其中APB1为168/4=42Mhz,APB2为168/2=84Mhz

使用特权

评论回复
地板
wangtaohui|  楼主 | 2023-8-20 23:15 | 只看该作者
   但是定时器和挂靠在APB1和APB2的IO口不同,从下图中可以看出,180MHZ经过APBx分频后,
   直接用在普通的IO口;而在定时器使用时,如果当APBx时钟分频为1时,定时器对应的时钟为
   APBx的时钟,当APBx时钟分频不为1时,定时器对应的时钟为APBx的时钟的2倍。从上述表格上
   可以看出APB1 presclaer和APB2 presclaer分别为4、2,不是1,所以定时器的时钟为
   (CK_INT)为84MHZ/168MHZ(视挂载情况决定)。

使用特权

评论回复
5
wangtaohui|  楼主 | 2023-8-20 23:15 | 只看该作者

其中,定时器时钟频率具体对应多少,其实和RCC-DCKCFGR寄存器有直接关系。

使用特权

评论回复
6
wangtaohui|  楼主 | 2023-8-20 23:15 | 只看该作者
寄存器RCC-DCKCFGR中的TIMPRE位配置如下:

使用特权

评论回复
7
wangtaohui|  楼主 | 2023-8-20 23:16 | 只看该作者
案例
定时器初始化(输入捕获实验)
void TIM5_CH1_Cap_Init(u32 arr)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);          //TIM5时钟使能   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);         //使能PORTA时钟       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //速度100MHz
        //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ; //下拉
        GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0

        GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //PA0复用位定时器5
  
        TIM_TimeBaseStructure.TIM_Prescaler=83;  //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);

        //初始化TIM5输入捕获参数
    TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01         选择输入端 IC1映射到TI1上
    TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕获
    TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
    TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //配置输入分频,不分频
    TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
    TIM_ICInit(TIM5, &TIM5_ICInitStructure);
               
    TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断 ,允许CC1IE捕获中断       
       
    TIM_Cmd(TIM5,ENABLE );         //使能定时器5

    NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、
       
}

使用特权

评论回复
8
wangtaohui|  楼主 | 2023-8-20 23:16 | 只看该作者
(1)TIM_TimeBaseStructure.TIM_Prescaler=83; //定时器分频,Time5挂载在APB1(42Mhz),因为RCC-DCKCFGR中的TIMPRE位影响(RCC-DCKCFGR寄存器仅适用于 STM32F42xxx 和 STM32F43xxx 设备。在STM32F407默认TIMPRE为0),Time5时钟分频为84Mhz,

使用特权

评论回复
9
wangtaohui|  楼主 | 2023-8-20 23:16 | 只看该作者
(2)TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; Timex-CR1中的CKD位控制。

使用特权

评论回复
10
wangtaohui|  楼主 | 2023-8-20 23:16 | 只看该作者
(3)初始化TIM5输入捕获参数

使用特权

评论回复
11
wangtaohui|  楼主 | 2023-8-20 23:17 | 只看该作者
Time5的滤波和分频在Timex-CCMR1中进行设置

使用特权

评论回复
12
wangtaohui|  楼主 | 2023-8-20 23:17 | 只看该作者
    TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断 ,允许CC1IE捕获中断        
       
    TIM_Cmd(TIM5,ENABLE );         //使能定时器5

    NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;

使用特权

评论回复
13
wangtaohui|  楼主 | 2023-8-20 23:17 | 只看该作者
有更新中断和捕获中断两种方式,但是TIM5_IRQn对应全局中断。在stm32f4xx.h中进行配置。
  CAN1_TX_IRQn                = 19,     /*!< CAN1 TX Interrupt                                                 */
  CAN1_RX0_IRQn               = 20,     /*!< CAN1 RX0 Interrupt                                                */
  CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                                */
  CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                                */
  EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                                     */
  TIM1_BRK_TIM9_IRQn          = 24,     /*!< TIM1 Break interrupt and TIM9 global interrupt                    */
  TIM1_UP_TIM10_IRQn          = 25,     /*!< TIM1 Update Interrupt and TIM10 global interrupt                  */
  TIM1_TRG_COM_TIM11_IRQn     = 26,     /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */
  TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                                    */
  TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                             */
  TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                             */
  TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                             */
  I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                              */
  I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                              */
  I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                              */
  I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                              */
  SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                             */
  SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                             */
  USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                                           */
  USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                                           */
  USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                                           */
  EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                                   */
  RTC_Alarm_IRQn              = 41,     /*!< RTC Alarm (A and B) through EXTI Line Interrupt                   */
  OTG_FS_WKUP_IRQn            = 42,     /*!< USB OTG FS Wakeup through EXTI line interrupt                     */
  TIM8_BRK_TIM12_IRQn         = 43,     /*!< TIM8 Break Interrupt and TIM12 global interrupt                   */
  TIM8_UP_TIM13_IRQn          = 44,     /*!< TIM8 Update Interrupt and TIM13 global interrupt                  */
  TIM8_TRG_COM_TIM14_IRQn     = 45,     /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */
  TIM8_CC_IRQn                = 46,     /*!< TIM8 Capture Compare Interrupt                                    */
  DMA1_Stream7_IRQn           = 47,     /*!< DMA1 Stream7 Interrupt                                            */
  FSMC_IRQn                   = 48,     /*!< FSMC global Interrupt                                             */
  SDIO_IRQn                   = 49,     /*!< SDIO global Interrupt                                             */
  TIM5_IRQn                   = 50,     /*!< TIM5 global Interrupt                                             */
  SPI3_IRQn                   = 51,     /*!< SPI3 global Interrupt                                             */
  UART4_IRQn                  = 52,     /*!< UART4 global Interrupt                                            */
  UART5_IRQn                  = 53,     /*!< UART5 global Interrupt                                            */
  TIM6_DAC_IRQn               = 54,     /*!< TIM6 global and DAC1&2 underrun error  interrupts                 */
  TIM7_IRQn                   = 55,     /*!< TIM7 global interrupt                                             */
  DMA2_Stream0_IRQn           = 56,     /*!< DMA2 Stream 0 global Interrupt                                    */
  DMA2_Stream1_IRQn           = 57,     /*!< DMA2 Stream 1 global Interrupt                                    */
  DMA2_Stream2_IRQn           = 58,     /*!< DMA2 Stream 2 global Interrupt                                    */
  DMA2_Stream3_IRQn           = 59,     /*!< DMA2 Stream 3 global Interrupt                                    */
  DMA2_Stream4_IRQn           = 60,     /*!< DMA2 Stream 4 global Interrupt                                    */
  ETH_IRQn                    = 61,     /*!< Ethernet global Interrupt                                         */
  ETH_WKUP_IRQn               = 62,     /*!< Ethernet Wakeup through EXTI line Interrupt                       */
  CAN2_TX_IRQn                = 63,     /*!< CAN2 TX Interrupt                                                 */
  CAN2_RX0_IRQn               = 64,     /*!< CAN2 RX0 Interrupt                                                */
  CAN2_RX1_IRQn               = 65,     /*!< CAN2 RX1 Interrupt                                                */
  CAN2_SCE_IRQn               = 66,     /*!< CAN2 SCE Interrupt                                                */
  OTG_FS_IRQn                 = 67,     /*!< USB OTG FS global Interrupt                                       */
  DMA2_Stream5_IRQn           = 68,     /*!< DMA2 Stream 5 global interrupt                                    */
  DMA2_Stream6_IRQn           = 69,     /*!< DMA2 Stream 6 global interrupt                                    */
  DMA2_Stream7_IRQn           = 70,     /*!< DMA2 Stream 7 global interrupt                                    */
  USART6_IRQn                 = 71,     /*!< USART6 global interrupt                                           */
  I2C3_EV_IRQn                = 72,     /*!< I2C3 event interrupt                                              */
  I2C3_ER_IRQn                = 73,     /*!< I2C3 error interrupt                                              */
  OTG_HS_EP1_OUT_IRQn         = 74,     /*!< USB OTG HS End Point 1 Out global interrupt                       */
  OTG_HS_EP1_IN_IRQn          = 75,     /*!< USB OTG HS End Point 1 In global interrupt                        */
  OTG_HS_WKUP_IRQn            = 76,     /*!< USB OTG HS Wakeup through EXTI interrupt                          */
  OTG_HS_IRQn                 = 77,     /*!< USB OTG HS global interrupt                                       */
  DCMI_IRQn                   = 78,     /*!< DCMI global interrupt                                             */
  CRYP_IRQn                   = 79,     /*!< CRYP crypto global interrupt                                      */
  HASH_RNG_IRQn               = 80,     /*!< Hash and Rng global interrupt                                     */
  FPU_IRQn                    = 81      /*!< FPU global interrupt                                              */
  

使用特权

评论回复
14
wangtaohui|  楼主 | 2023-8-20 23:17 | 只看该作者
注意:当中断向量不对应所有中断时,应选择对应的中断向量。例如Time1对应多种中断向量,在编写时要选择对应的中断向量。

使用特权

评论回复
15
wangtaohui|  楼主 | 2023-8-20 23:17 | 只看该作者
  TIM1_BRK_TIM9_IRQn          = 24,     /*!< TIM1 Break interrupt and TIM9 global interrupt                    */
  TIM1_UP_TIM10_IRQn          = 25,     /*!< TIM1 Update Interrupt and TIM10 global interrupt                  */
  TIM1_TRG_COM_TIM11_IRQn     = 26,     /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */
  TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt     

使用特权

评论回复
16
帛灿灿| | 2024-2-21 08:27 | 只看该作者

当电路出现异常过压并达到其击穿电压时

使用特权

评论回复
17
Bblythe| | 2024-2-21 09:30 | 只看该作者

例如下图中在SPI信号线上串联电阻就是为了改善匹配情况

使用特权

评论回复
18
周半梅| | 2024-2-21 11:26 | 只看该作者

即原/副边交错通断。

使用特权

评论回复
19
Pulitzer| | 2024-2-21 12:29 | 只看该作者

般只要关注值、精度、额度功率

使用特权

评论回复
20
童雨竹| | 2024-2-21 14:25 | 只看该作者

然后将其用作在PCB组装过程中放置在另一个板上的独立部件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

274

帖子

0

粉丝