STM32F407学习笔记 通用定时器输出比较部分

//通用定时器:
//STM32F407的通用定时器有哪几个:
    TIM2---TIM5与TIM9---TIM14
    
//通用定时器的功能:
    1.继承了基本定时器的所有功能,延时、更新中断
    2.输出比较功能(常用脉冲宽度调制):PWM方波,用于调LED亮度、控制舵机角度、控制空心杯电机转速
    3.输入捕获功能:捕获外界过来的波形(计算一段高电平/低电平时间、波形频率)
    
//与基本定时器相比较,通用定时器有两个额外的功能(输出比较与输入捕获)

//通用定时器的分布与各自的特点:
    TIM2---TIM5(常见):
        1.通用定时器包含一个16位(TIM3、TIM4)或32位(TIM2、TIM5)递增、递减和递增/递减自动重载计数器,该计数器由16bit可编程预分频器驱动
        2.用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比较和PWM)
        3.16位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于1到65536之间
        4.使用外部信号控制定时器且可实现多个定时器互连的同步电路(定时器级联)
        5.多达4个独立通道
    
    TIM9和TIM12:
        1.TIM9和TIM12计数器16bit,计数方向:递增
        2.16位可编程预分频器
        3.多达2个独立通道
    
    TIM10/TIM11和TIM13/TIM14:
        1.16 位自动重载递增计数器(属于中等容量器件)
        2.16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 和 65536 之间
        3.独立通道
        
//不同:
1.TIM2和TIM5计数器为32bit,其他通用定时器计数器为16bit
2.TIM2 - TIM5计数方向:递增、递减、中心边沿对齐,其他通用定时器只支持递增计数
3.TIM2-TIM5:4个独立通道        TIM9和TIM12:2个独立通道       TIM10/TIM11和TIM13/TIM14:1个独立通道

//通用定时器框图:

//时钟源部分:
    内部时钟源:
        由时钟树与挂靠总线频率决定,与基本定时器时钟源一致
        一般情况下都用内部时钟源(比较稳定)
    外部时钟源:
        ETR:外部管脚
        TI1PF1:定时器输入通道1对应的管脚
        TI2PF2:定时器输入通道2对应的管脚
        ITRx:定时器级联
        
    若用了定时器级联建议查看中文参考手册表76.TIMx内部触发连接
    
//TIM9 / TIM12时钟源没有外部时钟模式2
//TIM10、TIM11、TIM13、TIM14时钟源只有内部时钟源可选

//框图总结:
    时钟源部分:内部时钟源、外部时钟模式1、外部时钟模式2
    //大部分情况都使用内部时钟源
    //原因:
            1.通用定时器都可以使用内部时钟源
            2.方便代码配置
    时基单元:与基本定时器基本一样
    
    
//输出比较的PWM模式介绍:
//pwm:脉冲宽度调制
//占空比 = 有效电平的时间占整个周期的比例

//改变PWM的占空比:
    通过修改通用定时器的CCR寄存器的值来达到修改占空比的目的
    
//如果CCR直接设置为1000(ARR)可以吗?
    CCR可以直接设置为1000,但是会一直输出有效电平


//定时器驱动IO输出PWM配置寄存器
    见中文参考手册的通用定时器的TIM2--TIM5部分


//代码框架:
{
    //初始化IO口
    //打开GPIOC时钟
    //配置PC6模式  ---  复用模式
    //配置IO口与片上外设关系   AFR

    //初始化TIM3
    SMCR:
    //时钟源  ---   内部时钟
    CR1:
    //计数方式
    //计数方向
            //设置TIM3时基单元
    PSC、ARR
    //配置输出比较通道1
    //CCMRx
    //CCER

    //使能定时器

}


//例程:(通过通用定时器的PWM模式改变LED灯的亮度)
/*
  函数功能:TIM3输出比较初始化
    返回值:void
    形参: u16
    函数说明:
    LED3-------PC6-------TIM3_CH1
    LED4-------PC7-------TIM3_CH2
    IO口——>定时器-->输出比较通道
*/
void TIM3_Init(void)
{
    //打开GPIOC的时钟
    RCC->AHB1ENR |= 1 << 2;
    
    GPIOC->MODER &=~ (3 << 12);//模式寄存器清零
    GPIOC->MODER &=~ (3 << 14);//模式寄存器清零
    GPIOC->MODER |= 2 << 12;//PC6配置为复用模式
    GPIOC->MODER |= 2 << 14;//PC7配置为复用模式
    GPIOC->AFR[0] |= 2 << 24;//配置PC6与TIM3映射关系
    GPIOC->AFR[0] |= 2 << 28;//配置PC7与TIM3映射关系
    //TIM3初始化
    RCC->APB1ENR |= 1 << 1;//打开TIM3时钟
    TIM3->CR1 &=~ (3 << 5);//计数方式选择边沿对齐
    TIM3->CR1 &=~ (1 << 4);//设置为递增计数
    TIM3->SMCR &=~ (7 << 0);//选择时钟源为内部时钟
    //设置TIM3的时基单元     1000hz
    TIM3->PSC = 84 - 1;//预分频数
    TIM3->ARR = 1000 - 1;//重装载值
    TIM3->EGR |= 1 << 0;//UG位置一
    TIM3->SR &=~ (1 << 0);//清除标志位
    //TIM3通道初始化
    TIM3->CCMR1 |= 6 << 4;//ch1选择输出模式为PWM模式一
    TIM3->CCMR1 |= 6 << 12;//ch2选择输出模式为PWM模式一
    TIM3->CCMR1 |= 1 << 3;//使能CH1   CCR寄存器影子寄存器的缓冲功能
    TIM3->CCMR1 |= 1 << 11;//使能CH2  CCR寄存器影子寄存器的缓冲功能
    TIM3->CCMR1 &=~ (3 << 0);//TIM3_CC1通道一配置为输出
    TIM3->CCMR1 &=~ (3 << 8);//TIM3_CC2通道二配置为输出
    
    TIM3->CCER &=~ (1 << 3);//手册:配置为输出,此位保持清零
    TIM3->CCER &=~ (1 << 7);//手册:配置为输出,此位保持
    TIM3->CCER |= 1 << 1;//设置有效电平为高电平
    TIM3->CCER |= 1 << 5;//2设置有效电平为高电平
    TIM3->CCER |= 1 << 0;//使能通道的输出比较功能
    TIM3->CCER |= 1 << 4;//使能通道二的输出比较功能
    
    TIM3->CCR1 = 0;//CNT始终大于CCR,输出无效电平
    TIM3->CCR2 = 0;//CNT始终大于CCR,输出无效电平
    
    //使能TIM3
    TIM3->CR1 |= 1 << 0;
}


    

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值