时钟

上一章节对CKS32F107xx系列时钟做了整体介绍,本章节以使用HSI内部高速时钟为例对时钟具体配置方法进行讲解。

1.png

图1 SYSCLK生成流程

2.png

图2 APB频率生成流程

根据图1,产生SYSCLK时,内部HSI时钟经过二分频,输入PLLSCR模块,再通过PLLM倍频系数产生PLLCLK,即SYSCLK。

由图2可知,SYSCLK通过AHB预分频产生APB即HCLK等时钟系统。

配置寄存器

CKS32F107xx系列时钟配置寄存器     

在使用HSI对系统时钟进行配置时,有两个较为重要的RCC寄存器,分别为RCC_CR、RCC_CFGR:

3.png

图3 RCC_CR寄存器

在RCC_CR寄存器中,我们需要关注如下几位:

4.png

图4 HSI启动及状态寄存器

5.png

图5 PLL启动及状态寄存器

6.png

图6 RCC_CFGR寄存器

在RCC_CFGR寄存器中,我们需要关注如下几位:

7.png

图7 PLL倍频系数位

8.png

图8 PLL时钟源位

9.png

图9 APB2预分频位

10.png

图10 其他RCC_CFGR控制位

在对系统时钟进行初始化过程中,一般也会对闪存访问时间进行配置,如下为CKS32F107xx系列闪存访问时间与系统时钟的对应关系:

11.png

图11 闪存访问时间

CKS32F107xx系列时钟配置代码

依据上一章节中对寄存器的基本介绍,即可在函数SetSysClock()中对程序时钟进行相关配置,本文以HSI为时钟源,进行36MHz SYSCLK/HCLK/APB1/APB2配置。

/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    

/* Enable HSI */

RCC->CR |= ((uint32_t)RCC_CR_HSION);


/* Wait till HSI is ready and if Time out is reached exit */


while((RCC->CR & RCC_CR_HSIRDY) == 0){}


/* Enable Prefetch Buffer */

FLASH->ACR |= FLASH_ACR_PRFTBE;


/* Flash 1 wait state */

FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);

FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;    


/*AHB Prescaler set*/

RCC->CFGR |= (uint32_t)RCC_SYSCLK_Div1;

/* HCLK = SYSCLK */

RCC->CFGR |=(uint32_t)RCC_CFGR_HPRE_DIV1;

/* PCLK2 = HCLK */

RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;

/* PCLK1 = HCLK */

RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;


/* PLL configuration: PLLCLK = HSI / 2 * 9 = 36 MHz */

RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);

RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLMULL9);    


/* Enable PLL */

RCC->CR |= RCC_CR_PLLON;

/* Wait till PLL is ready */

while((RCC->CR & RCC_CR_PLLRDY) == 0){}


/* Select PLL as system clock source */

RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    


/* Wait till PLL is used as system clock source */

while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08){}

来源:中科芯MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 10

瑞萨电子近日宣布推出适用于有线基础设施、数据中心和工业应用的全新超低25fs-rms时钟解决方案——FemtoClock™ 3,从而扩展其时钟解决方案产品阵容。新的产品家族包含8路和12路差分输出的超低抖动时钟发生器及抖动衰减器,可为下一代高速互连系统实现高性能、简单易用和高性价比的时钟树设计。新产品的目标应用包括电信交换机和路由器、机架式数据中心交换机、医疗影像、广播音视频等。

1713492512202643.jpg

瑞萨超低抖动FemtoClock™ 3产品家族

时钟发生器和抖动衰减器实现25fs-rms的业界超低抖动

FemtoClock 3产品具有行业领先的超低的相位噪声和抖动,可满足112Gbps SerDes速率的需要,以及在48MHz至73MHz频率的无源晶振输入时,满足下一代224Gbps SerDes设计需求。本高集成度产品可具有多达四个时钟域,并提供具有出色信噪比(PSRR)的集成LDO(低压差稳压器),从而降低了电路板的复杂度与成本。

Zaher Baidas, Vice President of the Timing Division for Renesas表示:“瑞萨电子凭借数十年的经验和专利技术,致力于提供高品质的时钟解决方案,推动行业的进步。FemtoClock 3产品通过在单个器件中实现超低抖动的多时钟与同步功能,极大的优化印刷电路板设计、降低解决方案的面积及成本,从而支持行业的持续发展与创新。”

Vincent Ho, CEO at UfiSpace表示:“FemtoClock 3是一款能为我们提供超低抖动性能,同时还能保持低功耗、优化印刷电路板设计并降低下一代交换机解决方案的PCB板面积的时钟解决方案。借助瑞萨打造的时钟解决方案,让我们有能力以高效率和低成本的方式推出先进产品。”

瑞萨全新FemtoClock™ 3时钟解决方案演示:https://mp.weixin.qq.com/s/6iQBTWoExwyn4qz7eiY_Pw 

FemtoClock 3产品家族的关键特性

  • 业界领先的25fs-rms抖动性能超过下一代112Gbps和224Gbps SerDes参考时钟要求

  • 支持多达4个时钟域,允许从单个器件生成所有系统时钟

  • 产品型号多样,可提供抖动衰减、时钟同步和时钟产生功能,并具有8或12个差分输出端

  • 功耗低至1.2W,使用1.8V单电源供电

  • 集成非易失性存储器,可在工厂进行器件出厂定制且客户无需承担额外费用

  • 小型7mm×7mm 48引脚VFQFPN封装,和9mm×9mm 64引脚VFQFPN封装

  • 符合ITU-T G.8262和G.8262.1标准,用于增强型同步以太网

  • 支持多种工作模式的单芯片方案,极大的简化了整体时钟树

FemtoClock 3支持多种工作模式,包括同步、抖动衰减和时钟发生。客户可将全新FemtoClock 3解决方案与瑞萨公司的ClockMatrix™、VersaClock、时钟驱动器和有源晶振等时钟解决方案组合在一起,以满足高性能有线基础设施和数据中心的高要求、高可靠性复杂时钟设计需求。

FemtoClock 3与瑞萨IC Toolbox(RICBox)应用程序无缝结合,使用户能够对评估板上的器件进行配置及编程。此外,RICBox还可与云平台上的瑞萨实验室(Renesas Lab)连接,为用户带来虚拟连接至真实实验室环境的能力。

成功产品组合

瑞萨将FemtoClock 3与其产品组合中的众多兼容器件相结合,创建了广泛的“成功产品组合”,包括1600G固定外形交换机。这些“成功产品组合”基于相互兼容且可无缝协作的产品,具备经技术验证的系统架构,带来优化的低风险设计,以加快产品上市速度。瑞萨现已基于其产品阵容中的各类产品,推出超过400款“成功产品组合”,使客户能够加速设计过程,更快地将产品推向市场。更多信息,请访问:https://www.renesas.cn/cn/zh/applications 

1600G固定外形交换机解决方案的更多信息请访问:

https://www.renesas.cn/cn/zh/applications/communications-infrastructure/networking-fixed-access/1600g-fixed-form-factor-switch 

供货信息

FemtoClock 3产品和评估板现可从瑞萨及其分销合作伙伴处购买。了解样品订购和工厂定制等的更多信息,请点击文末阅读原文访问查看。

关于瑞萨时钟解决方案

瑞萨提供业界理想的广泛且深层次的芯片时钟产品组合,包括各种时钟缓冲器、有源晶振、时钟发生器、抖动衰减器和时钟同步器产品,可应对众多应用中的时钟挑战。瑞萨凭借在模拟和数字时钟产品领域超过20年的成熟专业知识,打造了具有极低相位噪声和超高性能,并采用先进时钟技术的产品组合。瑞萨带来业内唯一的“一站式”时钟解决方案,涵盖从全功能系统解决方案到简单时钟组件所需器件的专业知识及产品。

有关瑞萨时钟解决方案的更多信息请访问:

https://www.renesas.cn/cn/zh/products/clocks-timing 

来源:瑞萨电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 21

01、车规MCU为什么需要考虑时钟的功能安全

ISO 26262 要求汽车整车厂及其零件供应商必须遵循并记录功能安全开发流程(从开始制定规格直到量产发布),以使汽车获得运行资格。根据定义,功能安全要大幅降低发生故障的风险,这些故障可分为两类:系统故障和随机故障,前者只能通过变更制造过程、操作流程、文档的设计或其它相关因素消除。后者是在硬件的生命周期内发生的不可预知的故障,按照概率分布,这些故障可能是由于永久性或短暂的干扰环境,也可能是在系统的生命周期中,由内部技术的性能导致。

MCU作为汽车的重要控制元件之一,归类为ISO 26262中的特殊类型元素(SEooC, Safety Elements out of Context),其功能安全在定义直至量产阶段需严格遵循ISO 26262,SEooC要求使用假设(AoU)来反映将使用的预期安全概念,要求和机制。MCU内部时钟架构复杂,时钟信号的频率对芯片的工作的正确性和性能至关重要,如果频率超出指定的限制,则可能导致性能、协议和定时故障。如下是FC7300系列中部分时钟架构:

1.png

FC7300系列支持的时钟源包括内部晶振(SIRC/SIRC32K/FIRC)、外部晶振(SOSC/FOSC)和锁相环(PLL0/1, 其参考时钟可以是FIRC和FOSC),由SCG统一管理,其中FIRC/FOSC/PLL0可以作为系统时钟,所有的时钟源可以作为功能时钟。当MCU系统时钟频率出现问题,可能会导致对内部外设资源的访问不成功或者因为不满足FLASH时序导致指令读取失败等;如果系统时钟丢失时则会导致整个芯片停止工作影响与其他系统的交互。而当功能时钟频率出现问题或者丢失时,依赖于功能时钟的外设,如串口,CAN,PWM等功能受到影响,从而导致与其他系统的通信或者电机的控制出现错误等。

因此,车规MCU为了保证使用过程中的功能安全等级,需要在芯片设计过程中考虑一种或多种有效的安全机制保证:在芯片的时钟信号因受到辐射或其他真实使用场景中其他因素导致的时钟频率误差或者丢失时,在不影响使用的前提下可以产生事件让系统复位或让用户感知介入操作,从而保证安全。

02、我们如何实现时钟的功能安全

FC全系列支持CMU,CMU模块用于保证芯片上时钟信号频率的稳定性,其可以检测被监控时钟(Monitor Clock)的频率是否在用户指定的可编程频率范围内。CMU用一个时钟(Reference Clock)作为频率检查操作的基准参考,假定这个参考时钟的频率在规定的范围内,则CMU可以正确运行,反之如果参考时钟在运行参数之外,CMU则不能保证的行为。因此在FC系列中,FOSC/RTC/FIRC的频率监测使用SIRC,同时使用FIRC来保证SIRC的频率安全。

2.png

如图,CMU实现的基本原理是在编程的采样时间内计算被监控时钟的翻转次数,两个内部计数器(Reference Counter和Monitor Counter)在监测使能之后在不同的时钟域内并行计数,采样完成后和用户定义的阈值进行比较,当采样值不在用户期许的频率范围内时,即可配置产生中断。CMU支持频率阈值的自定义,内部实现两个寄存器以便用户编程指定被监测时钟频率的上下限值(MIN/MAX),同时CMU支持监测时间的可编程(REF_WINDOW),当在用户设定的监测时间范围内(称为一次测量),被检测时钟的频率不在用户定义的范围时,产生MIS事件;在两次测量内,时钟都没有进行过任何翻转则产生LOC事件。并且CMU可选的支持周期监测,7300系列中每1ms监测PERIOD[WINDOW]次后CMU停止工作,可用于降低系统的功耗。

FC7300支持5个CMU:CMU0-4,分别监测RTC_CLK(可选时钟,包括SIRC32K,SIRCDIV_32K,SOSC等),FOSC,FIRC,SIRC和系统时钟,监测系统时钟的参考时钟可选为SIRC和FOSC。所有CMU支持中断报警,CMU1/2/4还支持报告给全局故障监控模块FCSMU,可选的配置为中断报警或者系统复位,并且由于SIRC和系统时钟的特殊性,CMU3/4可选的支持复位整个系统。

为了保证CMU的功能有效性,在每次系统上电之后,可以对CMU进行自检,在计算完期待的频率阈值之后,给定一个阈值范围外的配置使能CMU,检测系统的响应,在收集到期许 的故障反应之后,失能CMU然后重新给予正确的配置进入系统主程序,否则报错进入到故障状态。并且在系统运行过程中可以使用同样的方式定时自检,以确保在整个运行过程中该安全机制始终有效。

除了CMU之外,FC系列的SCG内部还支持对FOSC/SOSC/PLL以及系统时钟进行监测,在对应的时钟丢失之后,即在设定的时间内时钟没有翻转时,可以产生中断或者直接对MCU进行复位。

总之在系统工作的过程中,尤其是在使用timer定时调度的系统中,时钟在预定的频率范围内直接影响到正常的功能流转,在MCU设计过程中,实现多种有效的安全机制保证时钟出现非预期的故障时能被发现在功能安全生命周期中至关重要。

来源:旗芯微Flagchip

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 70

很多应用场合需要检测系统时钟是否在正常范围内,以保证MCU能正常工作,CLASS B功能安全实现系统时钟自检的方法是采用两个独立时钟源交叉检查来进行测量,可使其中一个作为定时器的时钟源,另一个作为定时器的输入。SPIN0280含有微控制器时钟输出(MCO)功能,允许时钟输出到外部 MCO 引脚上,可以很便捷的输出HSI内部时钟信号到引脚上,配置外部时钟HSE为MCU的系统时钟,使用Timer3对引脚上的HSI信号进行捕获,以实现内部HSI和外部HSE交叉检测的功能。

微控制器时钟输出(MCO)

微控制器时钟输出(MCO)允许时钟输出到外部 MCO引脚上。相应 GPIO端口的配置寄存器必须被配置为复用输出功能。可以选择以下五个时钟信号中的一个作为 MCO输出时钟:

1.png

MCO 与时钟源对应关系

微控制器时钟输出(MCO)配置为在PA8引脚上输出,此时PA8引脚需配置为AF0复用模式。

2.png

TIM3 通用定时器

由一个16位可实时编程预分频器和一个16位计数方向可调的自动装载计数器组成,可以为用户提供便捷的计数定时功能,计数器时钟由预分频器分频得到。

TIM3具有多种用途:输入功能(测量输入信号的脉冲宽度、频率,PWM输入等),输出功能(PWM输出、单脉冲模式输出等)。

本次主要使用TIM3的输入捕获功能,输入捕获部分包括数字滤波器、多路复用、预分频器等,结构如下:

3.png

输入捕获模式下,当检测到信号ICx上的有效边沿后,计数器的当前值被锁存到对应的影子寄存器上,再复制到对应的捕获比较寄存器中。当开启了中断或DMA使能,发生捕获事件时,将产生相应的中断或DMA请求。发生捕获事件时,会将状态寄存器(TIM3_SR)中的捕获标志位 CCxIF 置 1,通过配置 CCxIF=0或读取TIM3_CCRx中的数据,清除CCxIF标志位。当CCxIF未被清零时,发生输入捕获事件,重复捕获标志位CCxOF将会被置1,通过配置CCxOF=0,可以清除CCxOF标志位。

SPIN0280的通用定时器TIM3有4路输入捕获通道,本文采用TIM3_CH2对HSI进行捕获。

4.png

SPIN0280 Timer3捕获内部HSI时钟具体步骤

1. 使用外部HSE时钟(8M)并倍频到96M作为系统时钟

2. TIM3_CH2的引脚配置,配置为PA7的AF1复用功能

3. TIM3挂载在APB1上,使能TIM3时钟

4. 配置TIM3,计数器清空,由低向高计数,上升沿触发,时钟不分频

5. 配置MCO输出在PA8引脚上,配置PA8为AF0复用功能,HSI信号128分频输出

6. 开启TIM3的时钟中断,并配置NVIC和编写中断函数

7. 开启Timer3外设

示例代码如下:

5.png

6.png

7.png

8.png

示例输出结果:

9.png

10.png

与实际硬件测试的结果相符。

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 20

资料链接如下:

BD网盘链接:

https://pan.baidu.com/s/1IsFqi-bdPQcilu71JMrsVA 

提取码:n99y

1. DS1302是一款集成了实时时钟(RTC)功能的芯片。RTC是一种能够精确测量和跟踪时间的电子设备,可以提供准确的日期和时间信息。DS1302实时时钟芯片由Maxim Integrated(美信半导体)生产,具有以下主要特点:

①时钟精度:DS1302采用32.768kHz的晶体振荡器来提供基准时钟信号。它具有较高的时钟精度,使得它可以提供准确的时间信息,每月的时间偏差非常小。

②时钟和日历功能:DS1302可以跟踪秒、分钟、小时、日期、月份和年份。它提供了完整的时钟和日历功能,可以准确地记录时间和日期。

③低功耗设计:DS1302芯片采用了低功耗设计,因此在电池供电时可以提供长时间的运行时间。

④数据保持功能:DS1302具有数据保持功能,使得即使在电源断电的情况下,时钟和日历数据仍然可以得到保持,确保数据的可靠性和连续性。

⑤简化的接口:DS1302通过串行接口(2线或3线),与微控制器或其他外部设备进行通信。这种简化的接口使得它更容易与其他系统集成,实现实时时钟功能。

DS1302实时时钟芯片被广泛应用于各种应用领域,如电子设备、仪器仪表、自动化系统、安防系统等需要准确时间信息的场合。它的易用性、低功耗以及稳定的性能使得它成为常用的实时时钟解决方案之一。

2.本实验用到了CW32 Cortex-M实训套件实验箱、DS1302实时时钟模块及Keil5开发环境。

1.png

CW32 Cortex-M实训套件

2.png

DS1302实时时钟模块实物

3.png

DS1302原理图

3.DS1302具体工作原理可观看视频,或参考以下链接中的文章

https://blog.csdn.net/u013184273/article/details/78843881

4.核心代码

/*
用TFT屏幕显示年、月、日、星期、时、分、秒
显示界面如下:
----------------
DS1302 Real Time 

Year :xxxx
Month:xx
Day  :xx
Week :xx
xx:xx:xx

----------------
*/

#include "main.h"
#include "config.h"
#include "Ds1302.h"        //DS1302底层驱动代码
#include "Lcd_Driver.h"
#include "LCD_calculate.h"

char strings[2];         //储存要显示的数字

int main()
{  
    u8 value = 0;   
    
    RCC_Configuration(); //配置时钟   
    
    Lcd_Init();  
    Lcd_Clear(GRAY0);   
    
    Ds1302_GPIO_Init();  //GPIO配置 
    
    //  Ds1302_Config(23,7,7,5,14,58,55); //初始化DS1302,2023年7月7日星期五23点59分55秒   

    Gui_DrawFont_GBK16(0,0,WHITE,RED,"DS1302 Real Time"); //显示界面  
    Gui_DrawFont_GBK16(0,32,WHITE,RED,"Year :20  ");  
    Gui_DrawFont_GBK16(0,48,WHITE,RED,"Month:    ");  
    Gui_DrawFont_GBK16(0,64,WHITE,RED,"Day  :    ");  
    Gui_DrawFont_GBK16(0,80,WHITE,RED,"Week :    ");  
    Gui_DrawFont_GBK16(0,96,WHITE,RED,"  :  :    ");   

    while(1)  
    {        
        Ds1302_GetHour(&value);                  //小时    
        sprintf(strings,"%d",value/10);    
        Gui_DrawFont_GBK16(0,96,WHITE,RED,strings);    
        sprintf(strings,"%d",value%10);    
        Gui_DrawFont_GBK16(8,96,WHITE,RED,strings);     
    
        Ds1302_GetMinite(&value);                //分钟    
        sprintf(strings,"%d",value/10);    
        Gui_DrawFont_GBK16(24,96,WHITE,RED,strings);    
        sprintf(strings,"%d",value%10);    
        Gui_DrawFont_GBK16(32,96,WHITE,RED,strings);     
        
        Ds1302_GetSecond(&value);                //秒钟    
        sprintf(strings,"%d",value/10);    
        Gui_DrawFont_GBK16(48,96,WHITE,RED,strings);    
        sprintf(strings,"%d",value%10);    
        Gui_DrawFont_GBK16(56,96,WHITE,RED,strings);       
    
        Ds1302_GetDay(&value);                  //星期    
        sprintf(strings,"%d",value/10);    
        Gui_DrawFont_GBK16(40+8,80,WHITE,RED,strings);    
        sprintf(strings,"%d",value%10);    
        Gui_DrawFont_GBK16(48+8,80,WHITE,RED,strings);     
    
        Ds1302_GetDate(&value);                 //日期    
        sprintf(strings,"%d",value/10);    
        Gui_DrawFont_GBK16(32+16,64,WHITE,RED,strings);    
        sprintf(strings,"%d",value%10);    
        Gui_DrawFont_GBK16(40+16,64,WHITE,RED,strings);    
       
        Ds1302_GetMonth(&value);                //月份    
        sprintf(strings,"%d",value/10);    
        Gui_DrawFont_GBK16(48,48,WHITE,RED,strings);    
        sprintf(strings,"%d",value%10);    
        Gui_DrawFont_GBK16(55,48,WHITE,RED,strings);     
    
        Ds1302_GetYear(&value);                 //年份    
        sprintf(strings,"%d",value/10);    
        Gui_DrawFont_GBK16(56+8,32,WHITE,RED,strings);    
        sprintf(strings,"%d",value%10);    
        Gui_DrawFont_GBK16(64+8,32,WHITE,RED,strings);  
    }
}

5.实验最终现象

把程序下载进DS1302模块,DS1302经过程序初始化后将开始计时。

4.png

实验箱接线 

5.png

显示时间   

 6.png

断电30s重新上电  

来源:CW32生态社区

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 8

页面

订阅 RSS - 时钟