今天闲着没事,在博客中想总结一下之前工作时用到的STM8时钟代码,本来觉的很简单,随便写写就完事了。这一细看让我慌了一下,还是有没有搞懂的地方。经过一个下午的努力,并且在好朋友的帮助下,终于稍微理清了一些头绪,且记下来,不对了日后再做补充。
首先上STM8单片机的时钟树图片。
这个图是时钟树的上半部分截图。从图中可以清楚的看到STM8的时钟树相对比STM32还是简单了很多。时钟来源有3种,外部晶振、内部RC 16MHz、内部RC 128KHz。CPU的运行CLK来自Fmaster,可以进行128/64/32/16/8/4/2/1分频,也就是最快等于Fmaster。如果是来自内部RC的16MHz则可以首先进行一次预分频HSIDIV,分频系数有8/4/2/1。
这里详细说一下外部时钟的问题。看一下20X系列的数据手册
从数据手册中可以看出,外部晶振的大小最高可以达到24MHz。STM8一些产品最高可以到16MHz,可以从库函数文件stm8s.h文中看到,截图如下:
假如需要外部晶振16MHz,则只需要进行修改如下所示即可。否则在进行使用串口等外设的时候会系统会错误的时间基准,导致无法正常运行。
代码的配置对库例程进行简单的修改,将内部RC和外部的合并了,使用的时候注释即可。
CLK_DeInit();
/*Configure the Fcpu to DIV1*/ //内部和外部都可以进行分频的地方
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
/*Configure the HSI prescaler to the optimal value */ //内部16MHz独有的预分频
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
/*Configure the system clock to use HSE clock source and to run at 24Mhz */
status =CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
if(status== SUCCESS)
{}
/*Configure the system clock to use HSI clock source and to run at 16Mhz */
status =CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
if(status== SUCCESS)
{}
其中CLK_ClockSwitchConfig库函数遵循上图流程,手动模式暂且不管。配置到这里,其实时钟的配置基本已经OK了,但是仔细阅读库例程的readme.txt和数据手册可以发现在使用外部大于16Mhz情况下的这么一句话
这句话是啥意思呢?经过查阅手册发现
在0个等待周期时速度24MHz。也就是其实需要一些等待时间的,具体是多少呢?
在时钟稳定时需要一个HSECNT的时间延迟稳定;另外一个是当Fcpu>16MHz的时候,需要1 wait state。这2个都是“Option bytes”里可以进行预先配置的。他们的地址和默认配置如下图所示。
也就是说,在使用外部24Mhz一定要“Before using the HSE clock make sure that the "Flash_Wait_States"is set to 1.”确保这个选项字节被配置成当需要读取Flash和EEPROM的时候等待一个周期。并且还要保证在开始启动时有足够的稳定时间来确保时钟脉冲稳定,即HSECNT。配置方法可以使用ST-LINK在软件中进行配置,网上教程一堆。也可以在程序中对该地址进行读写操作,可以参考风驰STM8的方法。风驰大哥也有时钟配置的教程很详细,但是对那个等待一个周期解释的不够详细,让我这种小白很是头疼。经过一下午的奋斗,在好哥们的教导下我略微明白了一些,下面就将自己浅显的理解暂且记下,不对的地方日后更正。
在数据手册的首页上面刚开始就说了,STM采用的是哈佛结构3级流水线,也就是同时进行着3个步骤的操作,具体百度,我怕吹牛逼说错了误导别人。其中第一步骤是对Flash进行取指令,当速度大于16MHz的时候STM8要求加入1个等待周期,我的理解就是由于硬件技术的限制,当读取速度过高的时候不能保证数据的准确性,所以需要降速读取。那24Mhz的速度岂不是很垃圾,会不会比16MHz还慢呢?其实不会的,其余的操作,只要不涉及Flash的操作,时序都是在CLK=24Mhz的速度下进行的,非常快。哥们给我举例,假如一个乘法指令3个周期,读取Flash一个周期,他们同时进行的时候,即使读取Flash结束了还是要再等2个周期,等乘法指令结束了才能下一步,并不是24MHz全速运行一个周期不浪费,需要从汇编角度进行时序的严格分析才是最标准的。可以肯定,最终的速度低于24MHz,但并不能说明什么。其性能也可以用MIPS(Million Instructions Per Second)这个指标来说明它的速度,STM8的数据手册这样写“Max 20 MIPS @ 24 MHz”。
上一篇:STM8S学习笔记-时钟控制1
下一篇:STM8S学习笔记-时钟控制2
推荐阅读
史海拾趣
AK-Nord_GmbH深知人才是企业发展的核心。因此,公司注重人才培养和团队建设。公司定期举办内部培训和交流活动,提升员工的专业技能和团队协作能力。同时,公司还积极引进外部优秀人才,为公司的创新发展注入新的活力。这些举措使得AK-Nord_GmbH的团队逐渐壮大,为公司的发展提供了有力的人才保障。
在电子行业中,振动控制是一个至关重要的领域。Cedrat Technologies凭借其在压电技术领域的深厚积累,成功开发了一套主动振动控制系统。该系统通过精确监测机械结构或设备的振动情况,利用压电执行器产生相位相反的振动信号,有效抵消原始振动。这一技术的问世,不仅大幅提升了设备的稳定性和精度,也为机械结构的振动控制开辟了新的途径。Cedrat Technologies因此在电子行业中树立了新的技术标杆。
宝士曼第三代半导体研发生产项目位于苏州东山大道旁,占地50亩,计划建设生产、研发、办公等楼宇。项目整体将分二期建成,总建筑面积约70000平方米。已经封顶的4号楼建筑面积超11600平方米,主要用于第三代半导体器件专用封装设备的研发生产。在施工过程中,宝士曼对环保和施工细节提出了更高的要求,要求地面每5平方米的高度误差要小于3毫米,并在施工中做到“工完场清”,最大程度减少对今后生产的影响。这种对细节的严格要求体现了宝士曼对产品质量和环保责任的重视。
随着公司产品的不断成熟和市场的逐渐扩大,DAPAudio开始将目光投向国际市场。通过与国际知名品牌的合作和自身的市场拓展努力,DAPAudio的产品逐渐进入欧美等发达国家和地区的市场。在国际市场上,DAPAudio凭借其卓越的产品性能和优质的服务赢得了广泛的赞誉和认可。
Eska公司成立于荷兰北部,自创立之初就专注于造纸业务。公司引进了先进的造纸技术和设备,建立了两座灰板纸厂,配备了3台技术领先的纸板机和2台造纸机。凭借高效的生产能力和优质的产品质量,Eska迅速在造纸行业中崭露头角。Eska的灰板纸以“Eska(青蛙)”品牌销售,因其优良且稳定的质量而享誉全球。
Eska公司注重技术传承与创新发展。作为奥地利唯一一家仍在为手套制造业培训学徒和技术工人的企业,Eska坚持手套传统工艺和技术的秉承。同时,公司也积极引入新技术和新材料,不断提升产品的性能和质量。这种技术传承与创新相结合的发展模式,使得Eska在保持传统优势的同时,也能不断适应市场的变化和发展。
C# + Symbol MC1000 程序实现 调整 对比度 ,或者是自己写个注册表文件 来调整MC1000对比度 ? 如题,最近搞个MC1000上面小程序,做过之后感觉屏幕太暗,所以想修改一下对比度,想自己做个注册表文件,但是不知道 对比度 对应注册表里面哪一项。 还有没有其它的方法来实现??求大侠帮忙。。… 查看全部问答∨ |
|
我在一个文件里定义了两个汇编函数,但编译的时候提示说不认识第一个InvalidateTLBs();这是为什么呢? asm void InvalidateTLBs() { addi r5,0,32 mtspr CTR,r5 &nb ...… 查看全部问答∨ |
|
我按照网上的方法为2410wince添加了三个串口驱动,并且将红外部分的注册表注释,改成串口三,使用和串口1、2相同的驱动 现在又出现问题,串口1、2能正常打开读写,在打开串口3时,getlasterro,返回设备不存在的错误 难道我不能去掉红外驱动?? ...… 查看全部问答∨ |
|
曾经搞过oi,对算法和数据结构有一定了解。对c和x86asm很熟悉。后来对hacking skills,linux,network很感兴趣,并学习了一些相关知识。 这就是我大概的情况,现在我想学嵌入式开发,最好是最适合我现在基础的那一方面, ...… 查看全部问答∨ |
|
各位谁用过DM9000,现在我的BSP在开发板上能ping通,在我的板子上不行,DM9000一块电路是完全一样的,怎么快速定位硬件错误,请用过的朋友指点下,谢谢先… 查看全部问答∨ |
活动刚开始时,小志让看一看那个图是否有问题,然后我粗略地看了一下,感觉没会问题。 然后回了小志说板子没问题,可以打样。可今天焊接时发现有点小问题。在此跟大家说对不起了~~~ 下面就上我制作过程的一些图: 刚发现这原来用的是USB A型的母 ...… 查看全部问答∨ |