当前位置: 首页 > article >正文

STM32学习(十三)

通用定时器简介

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

通用定时器框图

在这里插入图片描述

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

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

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

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

计数器时钟源

在这里插入图片描述

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

通用计数器时钟源设置方法
在这里插入图片描述

外部时钟模式1

在这里插入图片描述

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

外部时钟模式2

在这里插入图片描述

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

在这里插入图片描述

RTC(Real Time Clock)

实时时钟,本质是一个计数器,计数频率通常为秒(1Hz),专门用来记录时间。
在这里插入图片描述
普通定时器无法作为时钟,因为普通定时器无法掉电运行。
而RTC具有特性:

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

常用的RTC方案

在这里插入图片描述
在这里插入图片描述
1,一般都需要设计RTC外围电路;
2,一般都可以给RTC设置独立的电源;
3,多数RTC的寄存器采用BCD码存储时间信息;

在这里插入图片描述

  1. RTC预分频器:32767
  2. RTCCLK:实时时钟源:选择LSE
    在这里插入图片描述
    后备区域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即配置完成。

在这里插入图片描述

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),不利于直接设置和显示,所以我们还需要编写函数把时间变成我们日常的日历时间。
在这里插入图片描述
全局的结构体变量canlendar存储时间信息
在这里插入图片描述


http://www.kler.cn/a/5910.html

相关文章:

  • Python爬虫应用领域
  • SpringBoot日常:集成Kafka
  • 【机器学习:八、逻辑回归】
  • C++和Python中负数取余结果的区别
  • 腾讯云AI代码助手-每日清单助手
  • LeetCode 3019.按键变更的次数:遍历(转小写)
  • 讲解有哪些实用的数据恢复工具
  • 【C语言】整形数据的存储和读取过程
  • 【算法】【数组与矩阵模块】矩阵中的最短通路值
  • Autodesk AutoCAD 2023(CAD设计软件)自动化工具介绍以及图文安装教程
  • Python项目部署上线
  • 【Docker学习笔记】9.Docker Machine及Swarm 集群管理
  • 嵌入式linux网卡bonding配置
  • 13.Template Method模板方法(行为型模式)
  • ChatGPT编程秀:做一个简单爬虫程序
  • JDBC数据库驱动的下载与安装与连接
  • LeetCode-119. 杨辉三角 II
  • Azure SQL基础到实战(2)-部署
  • 提高工作效率,这 10 款 AI 工具不能错过
  • 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】
  • python接口自动化---接口测试报告模板(详解)
  • Linux第二次总结
  • MySQL数据库——MySQL是什么?它有什么优势?
  • 【完美走位】
  • 51单片机(IIC协议OLED屏)
  • 【JavaEE】多线程之阻塞队列(BlockingQueue)