STM32学习(十三)

通用定时器简介

  • 通用定时器有TIM2、TIM3、TIM4、TIM5
  • 16位递增、递减、中心对齐计数器(0~65535)
  • 16位预分频器(1~65536)
  • 可用于触发DAC、ADC
  • 在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求。
  • 4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式
  • 使用外部信号控制定时器且可实现多个定时器(级联:用一个定时器的溢出事件来驱动下一个定时器进行计数)互连的同步电路。
  • 支持编码器和霍尔传感器电路等。
    STM32学习(十三)_第1张图片

通用定时器框图

STM32学习(十三)_第2张图片

通用定时器具备基本定时器所有功能

通用定时器时钟源:内部时钟,内部触发输入时钟,外部时钟模式1、外部时钟模式2

  1. 时钟源
  2. 控制器
  3. 时基单元(计数器)
  4. 输入捕获——测量脉冲时间
  5. 捕获/比较(公共)
  6. 输出比较

4和6部分的通道是分时复用,配置通道为输入就4部分生效,配置通道为输出就6部分生效。

计数器时钟源

STM32学习(十三)_第3张图片

  1. 内部时钟(CK_INT),来自外设总线APB提供的时钟。
  2. 外部时钟模式1:外部输入引脚(TIx),来自定时器通道1或者通道2引脚的信号。TI1F_ED是双边沿检测信号,TI1FP1和TI2FP2是单边沿检测信号。
  3. 外部时钟模式2:外部触发输入(ETR),来自可以复用为TIMx的ETR的IO引脚。
  4. 内部触发输入(ITRx),用于与芯片内部其它通用/高级定时器级联、

通用计数器时钟源设置方法
STM32学习(十三)_第4张图片

外部时钟模式1

STM32学习(十三)_第5张图片

  • TIMx_SMCR的SMS[2:0]设置为111,外部时钟模式1被选中,且ECE设置为0.

外部时钟模式2

STM32学习(十三)_第6张图片

使用一个定时器作为另一个定时器的预分频器

STM32学习(十三)_第7张图片

RTC(Real Time Clock)

实时时钟,本质是一个计数器,计数频率通常为秒(1Hz),专门用来记录时间。
STM32学习(十三)_第8张图片
普通定时器无法作为时钟,因为普通定时器无法掉电运行。
而RTC具有特性:

  1. 能提供时间(秒钟数)
  2. 能在MCU掉电后运行
  3. 低功耗

常用的RTC方案

STM32学习(十三)_第9张图片
STM32学习(十三)_第10张图片
1,一般都需要设计RTC外围电路;
2,一般都可以给RTC设置独立的电源;
3,多数RTC的寄存器采用BCD码存储时间信息;

STM32学习(十三)_第11张图片

  1. RTC预分频器:32767
  2. RTCCLK:实时时钟源:选择LSE
    STM32学习(十三)_第12张图片
    后备区域VBAT,RTC工作在后备区域,VDD掉电仍正常工作。

RTC相关寄存器

  • 部分寄存器写保护:RTX_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器不会被系统复位,各个寄存器都有2个,每个都有16位。
  • 数据存储功能:RTC和后备寄存器不会被系统或电源复位;当从待机模式唤醒时也不会被复位;后备寄存器可用于保存掉电时的数据。
  • RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT引脚供电,在VBAT供电时仍可以继续工作。
  • 两个独立复位:APB1接口由系统复位,RTC核心只能由后备域复位。

RTC基本配置步骤

  1. 使能对RTC的访问:使能PWR&&BKP时钟、使能对后备寄存器和RTC的访问权限。
  2. 设置RTC时钟源:激活LSE,设置RTC的技术时钟源为LSE。
  3. 进入配置模式:等待RTOFF位为1(上一次对RTC寄存器的写操作已经完成),设置CNF位为1。
  4. 设置RTC寄存器,设置分频值、计数值等,一般只先设置分频值,CNT的设置独立。
  5. 清除CNF位,等待RTOFF为1即配置完成。

STM32学习(十三)_第13张图片

RTC基本驱动步骤

  1. 使能电源时钟并使能后备域访问:__HAL_RCC_PWR_CLK_ENABLE 使能电源时钟,_HAL_RCC_BKP_CLK_ENABLE 使能备份时钟,
    HAL_PWR_EnableBkUpAccess 使能备份访问
  2. 开启LSE/选择RTC时钟源/使能RTC时钟,HAL_RCC_OscConfig 开启LSE,HAL_RCCEx_PeriphCLKConfig 选择RTC时钟源,__HAL_RCC_RTC_ENABLE 使能RTC时钟
  3. 初始化RTC,设置分频值以及工作参数,HAL_RTC_Init 初始化RTC,HAL_RTC_MspInit完成RTC底层初始化工作。
  4. 设置RTC的日期和时间:操作寄存器方式实现rtc_set_time
  5. 获取RTC当前日期和时间:rtc_get_time函数

时间设置和读取

F1的RTC没有日历寄存器,使用时只存储总秒数(CNT),不利于直接设置和显示,所以我们还需要编写函数把时间变成我们日常的日历时间。
STM32学习(十三)_第14张图片
全局的结构体变量canlendar存储时间信息
STM32学习(十三)_第15张图片

你可能感兴趣的:(stm32,stm32,单片机,学习)