单片机(学习)2024.10.15

发布于:2024-10-17 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

时钟系统

时钟基本概念

时钟源

STM32U5时钟源

时钟树

Systick定时器

概念

工作原理

寄存器

滴答定时器定时分析

TIM定时器

基本概念

STM32U5定时器

定时器框图

预分频器

自动重装寄存器

计数器

TIM定时器定时算法训练


时钟系统

时钟基本概念

假如时钟频率是4M,所以运行一条指令的时间是1/4us,那么100条延时时间就是25us

1.时钟是嵌入式系统的脉搏,在电子系统中,时钟信号可以被理解为一个周期性的信号,它确定了系统的节奏和时间基准。处理器内核在时钟驱动下完成指令执行,状态变换等动作,外设部件在时钟的驱动下完成各种工作,例如:串口数据的发送、AD转换、定时器计数等。 因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡不稳、停振等。时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。

2.时钟系统的组成:振荡器(信号源)、唤醒定时器、倍频器、分频器

        振荡器(信号源):产生信号的源头,振荡器是时钟系统的基础,它提供一个稳定的振荡信号作为时钟源。振荡器可以是晶体振荡器、RC振荡器等,它们产生的信号频率决定了时钟系统的基本节拍。

        唤醒定时器(Wake-up Timer):使能、关闭功能,唤醒定时器是一种特殊的定时器,用于在设备处于低功耗模式时定期唤醒设备。它通常基于时钟信号计数,并在设定的时间间隔后触发唤醒信号。

        倍频器(Clock Multiplier):放大频率,倍频器用于将时钟信号的频率进行倍增,以产生更高频率的时钟信号。倍频器通常通过锁相环(PLL)来实现,可以根据需要调整输出时钟频率。

        分频器(Clock Divider):分频,分频器用于将时钟信号的频率进行分频,以产生较低频率的时钟信号。分频器通常通过调整分频比来控制输出时钟频率。

分频器:外设需要不同的频率,为了降低功耗,可以进行分频以提供不同频率时钟信号。

设计倍频器和分频器的作用:

1.为了降低成本(CPU需要更高的时钟频率)

2.减少功耗(外设需要不同的时钟频率)

时钟源

振荡器主要分为晶体、RC、LC

1.晶体振荡器(Crystal Oscillator):晶体振荡器使用石英晶体作为振荡元件。石英晶体具有压电效应,当施加电场时,会以固定频率产生机械振动。晶体振荡器利用石英晶体的这种特性,通过电子电路驱动晶体振荡,产生稳定的振荡信号。晶体振荡器的频率稳定性非常高。

无源:

没有信号源,靠外部给 蜂鸣器

有源:

有信号源,外部不需要给 蜂鸣器

优点:晶体振荡器信号稳定、质量好,连接方式简单。

缺点:价格高,需要较长的启动时间(起振时间)

晶体振荡器分类:

无源晶振是有2个引脚的无极性元件,需要借助于时钟电路才能产生振荡信号,自身无法振荡起来。(谐振器)

有源晶振有4只引脚,是一个完整的振荡器,其中除了石英晶体外,还有晶体管和阻容元件,因此体积较大。有源晶振不需要CPU的内部振荡器,信号稳定,质量较好,而且连接方式比较简单。(振荡器)

2. RC振荡器(Resistor-Capacitor Oscillator):RC振荡器使用电阻和电容器构成一个简单的振荡回路。当电容器充放电达到某个阈值时,会产生周期性的振荡信号。RC振荡器通常成本低、结构简单,但其频率稳定性较差,受到温度、供电电压等环境因素影响较大。

(在芯片内部)

优点:实现的成本比较低,仅由电阻电容构成。

缺点:精度存在问题,振荡频率会存在误差。

RC振荡器

晶体振荡器

构成

电阻电容

石英晶体

优点

成本低

稳定、精度高

缺点

震荡频率会有误差、受温湿度影响

价格高、需接起振电容

STM32U5时钟源

HSI(High Speed Internal)

HSI : 高速内部时钟,由RC振荡器产生16Mhz的时钟频率。

HSE(High Speed External)

HSE :高速外部时钟,由外部石英晶体/陶瓷谐振器产生4-50Mhz的时钟信号,咱们外接12Mhz晶振。

LSI(Low Speed Internal)

LSI :低速内部时钟,由低速RC振荡电路产生32Khz的时钟频率。

LSE(Low Speed External)

LSE:低速外部时钟,由低速晶振产生32.768Khz的时钟频率。

时钟树

Systick定时器

概念

SysTick又称滴答定时器。是一个定时设备,位于Cortex-M33内核中,和NVIC配合使用(可以产生异常信号),产生SysTick异常可以对输入的时钟进行计数,系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。(1ms)

频率 单位是HZ,KHZ,MHZ        符号:f 一秒钟震荡的次数

周期 单位是s,ms,us         符号:T 震荡一次所需的时间

1KHZ 代表1s震荡1000次,震荡一次的时间 1/1000s=1ms

工作原理

滴答定时器是一个24位递减定时器,也就是最多能计数2^24(0xFFFFFF) 16,777,216。

SysTick设定初值并使能后,每来一个时钟信号,计数值就减1。

计数减到0时,触发异常,SysTick计数器自动重装,初值并继续减一,循环不断。

寄存器

输入是1MHZ的话,定时1ms该怎么定?

算出1MHZ的周期,即计一个数所需要的时间,算出为1us,那计时1ms,需要计数1000次,那么就需要我们给重载数值寄存器写1000-1

开始计时时,重载数值寄存器会给定时计数器赋值,将1000-1赋值给计数器,从此每来一个时钟周期计数器-1,当减到0的时候,计数1000个,触发中断,重载数值寄存器重新将1000-1再赋值给计数器,以此往复实现每隔1ms触发一次异常(中断)

所以,所谓的定时器,就是对时钟信号进行计数,当达到相应的计数值的时候,就会触发中断并重新开始计数。

定时器就是计数器

输入时钟频率为4MHZ,计1ms该计多少个数,如何配置寄存器?

4MHZ-->1/4us 1us-->4次 --->1ms--->计4000次

时钟频率:4MHZ

重载数值寄存器:4000-1

计时1ms

输入时钟频率为32KHZ,计200ms该计多少个数,如何配置寄存器?

32KHZ ---> 1/32 ms--->1ms -->32次 --->200ms ---32*200=6400

重载数值寄存器:6400-1

滴答定时器定时分析

从时钟树判断滴答定时器输入频率,滴答定时器的输入时钟是4MHZ,重载数值寄存器的值默认为4000-1,输入频率为4MHZ,可知系统滴答定时器,每隔1ms触发一次中断,既然是中断,那肯定进处理函数,中断处理函数中系统默认每隔1ms让1个叫uwTick的变量自加1

TIM定时器

SysTick(嘀嗒定时器)是在内核里(ARM公司设计)的定时器(ST、芯片厂商)

基本概念

定时器类似于我们生活中的闹钟,可以设定一个时间来提醒我们。定时器可以作为基本的定时器/计数器,用于生成周期性的定时中断或作为计数器来计数外部事件的脉冲数。例如1秒钟进入定时器中断干一件事,定时器可以配置为产生脉冲宽度调制(PWM)信号,用于控制电机速度、LED亮度调节,风扇风速调节等应用。

STM32U5定时器

定时器是存在于STM32U5单片机中的一个外设,总共有11个定时器,分别是2个高级定时器(TIM1,TIM8)7个通用定时器(TIM2,TIM3,TIM4,TIM5,TIM15,TIM16,TIM17)和2个基本定时器(TIM6,TIM7)

定时器的基本结构是通用的,很多模块电路都能用到,所以STM32定时上扩展了非常多的功能,根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。

计数器的分辨率:重装载计数器最大可以写多少

计数器类型:向上、向下计数,向上再向下计数

预分频因子:预分频因子是用于配置定时器和计数器模块的一个参数,用于控制时钟信号的分频比。通过设置不同的预分频因子,可以改变定时器和计数器的计数频率,从而实现不同的定时和计数功能。16位的寄存器,可以设置的值范围为0到65535。设置为0时表示不进行分频,设置为1时表示将输入时钟分频为2,以此类推。

定时器框图

定时器基本三大件

PSC:预分频器

CNT:计数器

ARR:自动重装载寄存器

预分频器

预分频器 Prescaler 之前连接基准计数时钟的输入
基本定时器只能选择内部时钟,可以认为预分频器之前直接连接到输入端也就是内部时钟CK_INT,内部时钟的来源是 RCC_TIMxCLK,频率值一般都是系统的主频 72MHz。故通向时基单元的计数基准频率就是 72MH



预分频器对 72MHz 的计数时钟进行预分频,实际分频系数=预分频器的值+1
预分频器写0时,不分频(又称 1分频),输出频率=输入频率=72MHz
预分频器写1时,2分频,输出频率=输入频率/2=36MHz
预分频器写2时,3分频,输出频率=输入频率/3=24MHz
以此类推
预分频器是16位,最大可以写 65535,即65536 分频

自动重装寄存器

自动重装寄存器也是16位的,存写入的计数目标
运行的过程中,计数值不断白增,自动重装值是固定的计数目标,当计数值=自动重装值时,即计时时间到了
产生中断信号并清零计数器,计数器自动开始下一次的计数计时
基本定时器框图中向上的 折线箭头UI 即中断信号
计数值=重装值产生的中断一般被称为“更新中断”
更新中断后会通往 NVIC,配置好 NVIC 的定时器通道后,定时器的更新终端即可得到 cPu 的响应
基本定时器框图中向下的 折线箭头υ 代表产生一个事件——此时为“更新事件”
更新事件不会触发中断,但是可以触发内部其他电路的工作

计数器

计数器可以对预分频后的计数时钟进行计数
计数时钟每来一个上升沿,计数器的值就加 1
计数器也是 16 位的,所以计数器的值可以从0加到65535,再加就会从 0 开始
计数器的值在计时过程中会不断地自增运行,当自增运行到目标值时产生中断,完成了定时的任务
还需要一个存储目标值的寄存器,那就是自动重装寄存器

TIM定时器定时算法训练

32MHZ 计时10ms 需要配置那些寄存器,如何配置?

PSC:31,31+1=32分频

计数器输入频率:1MHZ

ARR:10000-1;

16MHZ初始频率,计时700ms如何配置?

PSC:15999 16000分频

计数器计数频率:1KHZ

ARR:700-1


网站公告

今日签到

点亮在社区的每一天
去签到