stm32高级定时器

高级定时的通道1、2、3可以分别输出2路互补信号,互补输出一般用于驱动H桥电路。
频率周期相同,相位差180度。
引入死区时间,一般mos管器件关断慢,开通快。会造成短路,导致器件烧毁。
刹车信号,连接brk,可以用作输入信号,去操作DTG寄存器,然后处理突发事件。
重复计数器,比如可以生成有限次的pwm,生成3次,只需要重复次数写2。
对于高级定时器必须发生RCR+1次溢出动作后才可以产生更新事件。对于通用或基本定时器,每溢出一次就可以产生更新事件。

Driver_TIM1.c

#include "Driver_TIM1.h"
#include "stdio.h"
#include "Driver_USART.h"

void Driver_TIM1_Init(void)
{
    /* 1. 开启时钟 */
    /* 1.1 TIM1的时钟 */
    RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
    /* 1.2 GPIO的时钟 */
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

    /* 2. 给PA8配置复用推挽输出 CNF=10  MODE=11*/
    GPIOA->CRH |= (GPIO_CRH_CNF8_1 | GPIO_CRH_MODE8);
    GPIOA->CRH &= ~GPIO_CRH_CNF8_0;

    /* 3. 时基单元的配置  频率是2Hz的PWM*/
    /* 3.1 预分频 */
    TIM1->PSC = 7200 - 1;
    /* 3.2 自动重装载寄存器的值 */
    TIM1->ARR = 5000 - 1;
    /* 3.3 计数方向 0=向上计数 1=向下计数*/
    TIM1->CR1 &= ~TIM_CR1_DIR;
    /* 3.4 重复寄存器 RCR=4 表示CNT计数器溢出5次,才会产生更新时间(中断)*/
    TIM1->RCR = 4;

    /* 4. 输出部分配置 */
    /* 4.1 把通道1配置为输出*/
    TIM1->CCMR1 &= ~TIM_CCMR1_CC1S;
    /* 4.2 配置捕获比较寄存器的值 */;
    TIM1->CCR1 = 2500; /* 占空比 50% */
    /* 4.3 输出的极性 0=高电平有效 1=低电平有效 */;
    TIM1->CCER &= TIM_CCER_CC1P;
    /* 4.4 使能通道1 */;
    TIM1->CCER |= TIM_CCER_CC1E;
    /* 4.5 配置通道1输出模式: PWM1=110   */
    TIM1->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1);
    TIM1->CCMR1 &= ~TIM_CCMR1_OC1M_0;
    /* 4.6 主输出使能(只有高级定时器需要配置)*/
    TIM1->BDTR |= TIM_BDTR_MOE;
    
    /* 4.7 防止一启动就进入更新中断: 1. 使用UG位产生一个更新事件 2.然后预分频和重复计数器的值更新到影子寄存器 */;
    TIM1->EGR |= TIM_EGR_UG;
    TIM1->SR &= ~TIM_SR_UIF;
    
    /* 5. 配置中断 */
    /* 5.1 定时器更新中断使能 */
    TIM1->DIER |= TIM_DIER_UIE;
    /* 5.2 NVIC的配置 */
    NVIC_SetPriorityGrouping(3);
    NVIC_SetPriority(TIM1_UP_IRQn, 3);//更新中断
    NVIC_EnableIRQ(TIM1_UP_IRQn);
    
    
}

void Driver_TIM1_Start(void)
{
    TIM1->CR1 |= TIM_CR1_CEN;
        
             
}

void Driver_TIM1_Stop(void)
{
    TIM1->CR1 &= ~TIM_CR1_CEN;
}

void TIM1_UP_IRQHandler(void)
{
    // 停掉计数器
    printf("a\r\n");
    //清除更新事件标志位(UIF)
    TIM1->SR &= ~TIM_SR_UIF;
    Driver_TIM1_Stop();
    
    
}


    

Driver_TIM1.h

#ifndef __DRIVER_TIM1_H
#define __DRIVER_TIM1_H

#include "stm32f10x.h"

void Driver_TIM1_Init(void);
void Driver_TIM1_Start(void);


#endif

相关推荐

  1. stm32高级定时器

    2024-07-13 20:56:03       17 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 20:56:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 20:56:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 20:56:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 20:56:03       69 阅读

热门阅读

  1. Jupyter Notebook 使用教程

    2024-07-13 20:56:03       21 阅读
  2. 基于SpringBoot就医管理系统设计与实现(测试项)

    2024-07-13 20:56:03       21 阅读
  3. C语言 求两个整数的最大公约数和最小公倍数

    2024-07-13 20:56:03       17 阅读
  4. 《我的编程学习之旅启程》

    2024-07-13 20:56:03       20 阅读
  5. Python基础-循环语句

    2024-07-13 20:56:03       19 阅读
  6. 深入理解C++ 中的可调⽤对象

    2024-07-13 20:56:03       18 阅读
  7. Ceph应用

    2024-07-13 20:56:03       21 阅读
  8. DP讨论——桥接模式

    2024-07-13 20:56:03       18 阅读