C8T6只有四个定时器(T1-T4),一个高级,三个通用。定时器向下兼容,高级含有通用所有功能,通用含有基本所有功能。
基本定时器:
结构:基准时钟(和系统主频相同)→预分频器→计数器 ,构成时基单元,每来一个上升沿,计数器+1
自动重装载值写入的是计数目标(51单片机自动重装值写入的是溢出后的起始值),每次计数器自增后会自动与自动重装载寄存器比较,加到自动重装载值后计数器清零,产生一个“更新中断或更新事件”到NVIC;也可以设置只产生“更新事件”,不产生中断,触发内部其他电路工作。
计数模式:向上计数(到重装值清零,重新计数)
主从触发模式:
让内部硬件不受程序控制自动运行。避免一直中断主程序,可以极大减轻CPU负担。
主模式:更新事件通过主模式映射到TRGO(Trigge Out),直接触发需要使用的电路,例如DAC
通用定时器:
计数模式:向上计数,向下计数(从重装值开始自减,减到0触发中断,同时回到重装值再次自减),中央对齐计数(从0开始自增到重装值,申请中断,同时从重装值自减到0,再次申请中断,在0和重装值中间震荡)。
内外时钟源选择和主从触发模式结构
外部时钟模式2
外部时钟模式1:
1、输入:ETR、ITR(内部时钟级联可以使用此接口)
2、 TI1F_ED连接的是输入捕获单元,从CH1引脚获得时钟,这一路输入的时钟上升沿和下降沿均有效。
3、TI1FP1、TI2FP2是CH1、CH2的输入时钟。
总结:外部输入模式1的输入可以是ETR、ITR(其他定时器时钟)、CH1引脚边沿、CH1引脚、CH2引脚
主模式输出
输出比较电路
输入捕获电路
捕获比较寄存器
高级定时器
定时中断结构框图:
1、产生中断时,会先在状态寄存器中置一个中断标志位,通过中断输出控制(中断输出控制是中断的允许位,允许中断则开启,不允许中断则关闭),到NVIC申请中断。
2、预装时序:ARPE=1 启动预装时序,预装时序可以理解成自动重装载寄存器的影子寄存器,生效的是影子寄存器。当启动预装时序时,计数中途更改自动重装载寄存器的值,不会立即生效,会在产生更新中断或者更新事件时才会生效。当不启动预装时序时,计数中途更改自动重装载寄存器的值会立即生效,如果计数器当前值 未超过 自动重装载寄存器值,则计数到自动重装载寄存器值时,自动中断,如果计数器当前值 超过 自动重装载寄存器值,则计数到FFFF计数器归0后重新计数才会生效自动重装载寄存器值。
分频器也有类似的影子寄存器,功能类似,起缓冲作用,避免误更改导致的运行异常。
RCC时钟树
1、RCC时钟树,在systemInit函数内,已经由函数库配置好了,竖线左边是时钟产生的电路,右边是时钟的使用电路。
2、四个震荡源:内部8MHz高速RC振荡器,外部4-16MHz高速石英晶体振荡器,外部32.768KHz低速晶振(给RTC提供时钟),内部40KHz低速RC振荡器(给看门狗提供时钟)。
两个高速晶振提供系统时钟(AHB APB1 APB2),系统刚启动会默认选择8MHz内部RC振荡器提供时钟,外部高速晶振一般是8MHz,通过PLL锁相环倍频后成为72MHz频率替换默认的8MHz的RC振荡器,继续给系统提供时钟。
CSS是时钟安全控制系统,一旦外部高速时钟失效,会通过CSS切换回内部时钟。保证系统正常运行,防止程序卡死。
3、所有 定时器的时钟都是72MHz。