一、时钟系统
单片机时钟是单片机系统中的重要组成部分,它提供了系统运行的基本节拍和时间基准。在单片机中,时钟不仅仅是用来显示时间,控制着单片机的操作速度和外设的工作状态。
单片机时钟的工作原理
在单片机中,时钟不仅提供了CPU的工作频率,还控制着各种外设的工作。不同的外设可能需要不同频率的时钟,因此在设计时需要根据外设的要求选择合适的时钟源和频率。例如,某些外设可能需要较高频率的时钟以保证快速响应,而某些外设则可以使用较低频率的时钟以降低功耗。时钟信号可以通过外部振荡器或内部振荡器产生。例如,STM32单片机具有多种时钟源,包括高速内部时钟(HSI)、高速外部时钟(HSE)、低速内部时钟(LSI)、低速外部时钟(LSE)和锁相环倍频输出(PLL)。
1)时钟系统的组成:
振荡器(信号源)、唤醒定时器、倍频器、分频器
为什么要设置倍频器和分频器?
晶体振荡器的价格远远高于倍频器和分频器,但是不同外设和CPU的工作频率各不相同,需要不同的时钟频率,为了节约成本增加倍频器和分频器。
2)时钟源
晶体振荡器(有源[4根引脚]、无源振荡器[2根引脚])、RC振荡器
(1)晶体振荡器:分为有源晶振、无源晶振;
- 无源晶振是有2个引脚的无极性元件,需要借助于时钟电路才能产生振荡信号,自身无法振荡起来。(谐振器)
- 有源晶振有4只引脚,是一个完整的振荡器,其中除了石英晶体外,还有晶体管和阻容元件,因此体积较大。有源晶振不需要CPU的内部振荡器,信号稳定,质量较好,而且连接方式比较简单。(振荡器)
(2)RC振荡器(Resistor-Capacitor Oscillator):RC振荡器使用电阻和电容器构成一个简单的振荡回路。当电容器充放电达到某个阈值时,会产生周期性的振荡信号。RC振荡器通常成本低、结构简单,但其频率稳定性较差,受到温度、供电电压等环境因素影响较大。
(3)区别:
RC振荡器 |
晶体振荡器 |
|
构成 |
电阻电容 |
石英晶体 |
优点 |
成本低 |
稳定、精度高 |
缺点 |
震荡频率会有误差、受温湿度影响 |
价格高、需接起振电容 |
外部通过晶体振荡器调节(芯片外部),RC振荡器在芯片内。
外部时钟源和内部时钟源的区别?
外部的更精准,内部的易受影响;一般会增加外部的,用于需要精确的定时需求!
3)STM32U5时钟源
HSI(High Speed Internal) : 高速内部时钟,由RC振荡器产生16Mhz的时钟频率。
HSE(High Speed External):高速外部时钟,由外部石英晶体/陶瓷谐振器产生4-50Mhz的时钟信号,咱们外接12Mhz晶振。
LSI(Low Speed Internal):低速内部时钟,由低速RC振荡电路产生32Khz的时钟频率。
LSE(Low Speed External):低速外部时钟,由低速晶振产生32.768Khz的时钟频率
二、 SYSTICK定时器(CPU内部的定时器)
1)定时器TIM1、TIM2……是在单片机的片上外设!但是滴答定时器是在CPU内部的!
2)基本概念
SysTick又称滴答定时器。是一个定时设备,位于Cortex-M33内核中,和NVIC配合使用(可以产生异常信号(等价与中断,在CPU内部产生的叫做异常,在CPU外部产生的叫做中断)),产生SysTick异常可以对输入的时钟进行计数,系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。
频率:一秒钟震荡的次数 单位是HZ KHZ MHZ,符号:f
周期 :震荡一次所需的时间 单位是S ms us 符号:T
1HZ 表示1s震荡1次
KHZ 表示1ms震荡1次 1s震荡1000次
MHZ 表示1us震荡1次
3)工作原理
滴答定时器是一个24位递减定时器,也就是最多能计数2^24(0xFFFFFF) 16,777,216。
①SysTick设定初值并使能后,每来一个时钟信号,计数值就减1;②计数减到0时,触发异常,SysTick计数器自动重装,初值并继续减1,循环不断。
如何设置寄存器的数值?
输入时钟频率为4MHZ,计1ms该计多少个数,如何配置寄存器?
时钟频率是4MHZ——>可得周期:震动一次需要时间1/4us——>4次所需要1us——>1ms需要4000次——>重载数值寄存器4000-1
三、定时器
定时器本质其实是记次器,需要根据单片机的频率才可以计算出时间;就需要引入时钟系统。
滴答定时器是ARM公司设计的,TIM定时器是芯片厂商设计的
(一)基本概念
用于生成①周期性的定时中断或作为②计数器来计数外部事件的脉冲数。
例如1秒钟进入定时器中断干一件事;定时器可以配置为产生脉冲宽度调制(PWM)信号,用于控制电机速度、LED亮度调节,风扇风速调节,等应用。
(二) STM32U5定时器
定时器是存在于STM32U5单片机中的一个外设,总共有11个定时器,分别是2个高级定时器(TIM1,TIM8)7个通用定时器(TIM2,TIM3,TIM4,TIM5,TIM15,TIM16,TIM17)和2个基本定时器(TIM6,TIM7)
定时器的基本结构是通用的,很多模块电路都能用到,所以STM32定时上扩展了非常多的功能,根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。
1)基本定时器
(1)基本定时器结构框图
ARR:自动重装载寄存器
CNT:计数器
PSC:预分频器
16位的:0~65535
表示的分频数为1~65536
新的预分频数值在下一个更新事件时起作用
①预分频
预分频就是将基准时钟信号进行除法操作:1分频(1+1)就是原本的时钟脉冲两个成一个
②计数器
③自动重装载寄存器
(2)计算公式如下
(PSC(预分频器)+1)*(ARR(计数值)+1)= 输入时钟频率*定时时间
32MHZ 计时10ms 需要配置那些寄存器,如何配置?
32*10^6 *1*10^-2 = PSC*ARR
32* 10^4 = PSC*ARR
加上PSC = 8-1 ARR = 4*10^4 = 40000-1
PSC = 16-1 ARR = 2*10^4 = 20000-1
PSC = 32-1 ARR = 1*10^4 = 10000-1
2)通用定时器
通用定时器有输入捕获、输出比较和PWM模式功能
(1)通用寄存器的结构框图
①输入捕获:
输入捕获可以用来捕获外部事件,比如引脚的电平变化(上升沿,下降沿),并记录下变化的时间,通常可以用来测量外部信号的频率或者电平持续的时间
②输出比较:
此项功能是用来控制一个输出波形,当计数器与捕获/比较寄存器的内容相同时,输出比较功能做出相应动作,比如电平的翻转。通常用于生成PWM波形。
输出过程:
当0-t1这段时间,计数器寄存器的CNT的值是小于CCR,输出高电平。
当t1-t2这段时间,计数器寄存器的CNT的值是大于CCR且小于ARR的,输出低电平。
当CNT的值达到ARR里的值时,产生溢出事件,自动清零再次从0开始向上计数。
补充知识:
PWM,全称为脉冲宽度调制(Pulse Width Modulation),是一种调节信号的方法。简单来说,PWM 就是通过改变信号的高电平和低电平的时间比例来控制输出的平均电压或功率。
占空比:在一个脉冲周期内,高电平的时间占整个周期时间的比例,单位是%
上述占空比:CCR/(ARR+1)