|
最近一直在做单片机通信方面的程序测试,成果之一就是以战舰板串口2向野火开发板串口1发送字符或字符串,战舰板作为主机设计了触摸屏界面,可以根据界面随心所欲地向从机发送字符或字符串还包括汉字。基于此,正在设计一个通过战舰板RS485控制西门子S7-200PLC的程序;这也是现在工业自动化最常见的一种控制模式。言归正传:
CM3内核的时钟树很复杂,什么系统时钟,总线时钟,外部时钟,内部时钟的搞得有点乱。其实,把 CM3内核的时钟概念和频率概念搞清楚, CM3就不那么艰难了!不信看下面的描述,错误之处请指正!毕竟这只是我个人的理解。
先从原子的基于STM32的一个延时函数delay_init(u8 SYSCLK) 讲起: void delay_init(u8 SYSCLK) //SYSCLK:系统时钟,战舰板是72
{
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,则使用了ucosII.
u32 reload;
#endif
SysTick->CTRL&=~(1<<2);//SYSTICK使用外部时钟源
fac_us=SYSCLK/8;//不论是否使用ucos,fac_us都需要使用,1/9us就是来自这里
#ifdef OS_CRITICAL_METHOD//如果OS_CRITICAL_METHOD定义了,则使用了ucosII.
reload=SYSCLK/8;//每秒钟的计数次数,单位为K
reload*=1000 000/OS_TICKS_PER_SEC;/*根据OS_TICKS_PER_SEC设定溢出时间;OS_TICKS_PER_SEC是OS每秒时钟节拍数 */
//reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延时的最少单位
SysTick->CTRL|=1<<1; //开启SYSTICK中断
SysTick->LOAD=reload; //每1/OS_TICKS_PER_SEC秒中断一次
SysTick->CTRL|=1<<0; //开启SYSTICK
#else
fac_ms=(u16)fac_us*1000; //非ucos下,代表每个ms需要的systick时钟数
#endif
}
函数比较简单就不分析了; 为了理解上述函数还必须补补课:计算机只认识“0”和“1”信号,说白了就是“开”“关”两种状态。时钟频率就是每秒“开”“关”这两种状态的变化次数。CPU的内部其实就是由大量的寄存器和触发器构成的,这些寄存器或触发器都必须在一定的时钟频率控制下工作才能实现CPU的“有序可控”;这也是CPU“智能化”和“听话”的理论基础。硬件时钟源频率(或者说“开关”速度)越快,CPU的内部的寄存器或触发器等硬件就响应越快。CM3内核中有APB1(最大36mhz)和APB2(最大72mhz)两条片上外设总线,每条总线的时钟频率是不一样的,且每条总线上的外设都有各自的时钟源控制开关,也就是说不同的外设可以根据各自的时钟需求以不同的“开关”速率工作。这样设计主要是基于减少能耗的目的。硬件之间的接口电路的目的就是为了解决时钟源不同步和信号机制不同的问题而设计的。CM3内核有5个时钟源,而51单片机只有一个时钟源11.0592MHZ;时钟源越多说明内核的功能越多,可以适应更多的工作环境和要求。
时钟周期T是时序中最小的时间单位,具体计算是1/时钟源;假设晶振即时钟源是11.0592,则与之对应的时钟周期就是1/11.0592s。机器周期是CPU完成一个操作的最小时间,普通51单片机一个机器周期是12个时钟周期。就CM3内核中的24位计数器来说,如果时钟源频率是9Mhz,如何理解时钟源频率是9Mhz呢?根据上述M3内核的时钟周期(即CPU完成一个操作的最小时间,秒)=1/9MHz;即1/9us;换句话说m3内核的cpu开或关一次操作所需的时间是1/9微秒. 公式如下:
T(周期,单位秒)*F(频率,单位hz)=1(脉冲个数)
在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如1秒)内所产生的脉冲个数称为频率。频率是描述周期性循环信号(包括脉冲信号)在单位时间内所出现的脉冲数量多少的计量名称;频率的标准计量单位是Hz(赫)。电脑中的系统时钟就是一个典型的频率相当精确和稳定的脉冲信号发生器。频率在数学表达式中用“f”表示,其相应的单位有:Hz(赫兹)、kHz(千赫兹)、MHz(兆赫兹)、GHz(千兆赫兹)。其中1GHz=1000MHz,1MHz=1000kHz,1kHz=1000Hz。计算脉冲信号周期的时间单位及相应的换算关系是:s(秒)、ms(毫秒)、μs(微秒)、ns(纳秒),其中:1s=1000ms,1 ms=1000μs,1μs=1000ns。
相信看完上述讲解,会对CM3内核有个更清晰的认识,能解决很多初学者心头的许多疑问。
|
|