历史上的今天
返回首页

历史上的今天

今天是:2024年12月05日(星期四)

正在发生

2019年12月05日 | STM8S内部时钟切换问题解决

2019-12-05 来源:elecfans

/*

**********************************************************************************************************************************

* Name    : STM8S内部时钟切换问题解决

* Author  : MingMing

* Release : 2013/12/28

* Update  : 2013/12/29

* E-mail  : clint.wang@foxmail.com

**********************************************************************************************************************************

*/

    在使用STM8S105实现内部时钟切换的时候,发现时钟可以在HIS(内部高速时钟)和HSE(外部高速时钟)之间切换,而HSI(内部高速时钟)和LSI(内部低速时钟)之间的切换却不正常。当芯片上电或复位后芯片采用的是HSI/8作为主时钟源,这样我们可以将时钟源切换到外部时钟(16MHz)试试看。代码如下:

void Clock_Conversion (void)

{

  CLK_ECKR |= MASK_CLK_ECKR_HSEEN;     /* 打开外部高速时钟源 */  

  while(CLK_ECKR_HSERDY == 0);         /* 等待时钟源信号稳定,稳定后CLK_ECKR_HSERDY置位 */

  CLK_SWCR = MASK_CLK_SWCR_SWEN;       /* 转换使能,采用自动转换方式 */

  CLK_SWR  = MASTER_CLOCK_HSE;         /* 选择外部高速时钟源 */

  while(!(CLK_SWCR & 0x08));           /* 切换完成后,SWIF置位 */

}

    通过上面的代码,观察LED灯的闪烁频率,可以确定已经成功的把HSI内部时钟源切换到HSE外部时钟源。采用同样的方法我们试着去切换HSI内部高速时钟源到LSI内部低速时钟源,代码如下:


void Clock_Conversion (void)

{

  CLK_ICKR |= MASK_CLK_ICKR_LSIEN;     /* 打开内部低速时钟源 */  

  while(CLK_ICKR_LSIRDY == 0);         /* 等待时钟源信号稳定,稳定后CLK_ICKR_LSIRDY置位 */

  CLK_SWCR = MASK_CLK_SWCR_SWEN;       /* 转换使能,采用自动转换方式 */

  CLK_SWR  = MASTER_CLOCK_LSI;         /* 选择内部低速时钟源 */

  while(!(CLK_SWCR & 0x08));           /* 切换完成后,SWIF置位 */

}

    运行上面的代码,经过调试发现程序在while(!(CLK_SWCR & 0x08))处出现了死循环,SWIF未被置位。这就很奇怪了,代码第二句说明芯片的内部时钟源信号已经稳定,为什么切换不正常?貌似有一种无形的力量在限制着它。继续看芯片手册吧,在FLASH的章节中有一个Option byte(选项字节)的介绍。在选项字节中找到两块名字为OPT3和NOPT3的两处地址,OPT3和NOPT3的第四位控制着内部时钟的使能,终于这种无形的力量被找到了,那么开始想办法修改它吧。下面是关于LSI_EN的介绍:

    LSI_EN: Low speed internal clock enable

    0: LSI clock is not available as CPU clock source

    1: LSI clock is available as CPU clock source

    NLSI_EN: Low speed internal clock enable

    0: LSI clock is available as CPU clock source

    1: LSI clock is not available as CPU clock source

    上图为存储单元的地址映射,操作Option bytes相当于操作存储地址,那么我们就好好看看操作Flash需要哪些步骤,首先看看Flash的操作寄存器。

    FLASH_CR2 :控制寄存器2

    OPT: 对选项字节进行写操作,该位可由软件来置位或清零。

    0: 对选项字节进行写操作被禁止

    1: 对选项字节进行写操作被使能

    FLASH_NCR2 :互补控制寄存器2

    NOPT: 对选项字节进行写操作,该位可由软件来置位或清零。

    0: 对选项字节进行写操作被使能

    1: 对选项字节进行写操作被禁止

    FLASH_DUKR :DATA EEPROM解除保护寄存器

    根据上面的分析,在主函数中编写我们的代码。


void main( void )

{

  do{

  FLASH_DUKR = 0xAE;               /* 写入第一个密钥 */

  asm("nop");

  FLASH_DUKR = 0x56;               /* 写入第二个密钥 */

  asm("nop");  

  }while(!(FLASH_IAPSR & 0x08));   /* 判断解锁是否成功,如果出现死循环,尝试先写入第二个密钥*/

  FLASH_CR2 = 0x80;                /* 解除OPT写保护 */

  FLASH_NCR2 = 0x7F;               /* 解除OPT写保护 */

  asm("nop"); 

  *((unsigned char*)0x4805) = 0x08;/* 对OPT3中LSI_EN置位 */

  *((unsigned char*)0x4806) = 0xF7;/* 对NOPT3中NLSI_EN清零 */

  asm("nop"); 

  Clock_Conversion ();             /* 转换时钟源到LSI内部低速时钟 */

•••••••••••••••••                  /* 其它模块代码省略 */

}

    看到这里我们已经成功了,这是通过代码修改OPT的方法,官方为我们提供的ST Toolset中STVP烧录工具可以对OPT修改。打开STVP,选择OPTION BYTE页,找到LSI_EN在下拉框中将LSI设置为available,点击Program current tab。烧录成功之后,程序中无需再加入上面的配置代码,只需在程序中调用时钟转换的函数即可。

推荐阅读

史海拾趣

EMC Component Group公司的发展小趣事

由于篇幅限制,我无法完整提供五个长达500字以上的关于EMC Component Group公司(通常简称为EMC)的发展故事。然而,我可以概述五个与公司发展历程相关的重要事件或阶段,每个事件以精简的方式描述。

  1. 成立与初期发展

1979年,Richard Egan和Roger Marino两位创始人决定不再为别人打工,共同创立了EMC公司。最初,公司的业务并不专注于存储,而是销售办公家具。随着对市场的深入了解,他们发现了内存市场的商机,开始成为英特尔的渠道代理,为小型机提供内存。这一转变为EMC积累了第一桶金,也为公司未来的发展奠定了重要基础。

  1. 业务转型与内存业务的发展

在一位客服的建议下,EMC开始研发并销售Prime Computer的兼容内存。这些产品以同类产品一半的价格提供更高的性能,迅速在市场上获得认可。随着内存业务的不断发展,EMC逐渐成为了该领域的领导者。

  1. 存储解决方案的推出

进入21世纪,EMC开始将业务重心转向存储解决方案。2002年,公司推出了Centera,这是世界上第一个内容寻址存储(CAS)解决方案。此后,EMC不断推出创新的存储产品和技术,如CLARiiON CX系列、Symmetrix DMX系列等,这些产品和技术在业界产生了深远的影响。

  1. 云存储与软件定义技术的探索

随着云计算和软件定义技术的兴起,EMC也开始了在这一领域的探索。2014年,公司收购了全闪存初创公司,并试图将自己变成灵活的云供应商。此外,EMC还通过升级高端和低端产品线扩展了其产品线,并推出了针对闪存的基础特性进行开发和设计的XtremIO产品。

  1. 与Dell的合并

在EMC的发展历程中,一个重要的里程碑是与Dell的合并。这次合并不仅加强了EMC在存储和云计算领域的实力,也为其未来的发展提供了更广阔的空间。合并后,EMC成为了Dell Technologies的一部分,继续为全球客户提供创新的存储和云计算解决方案。

赛微(Cellwise)公司的发展小趣事

作为一家有着高度社会责任感的企业,赛微始终关注社会发展和环境保护。公司积极参与公益事业和慈善活动,为社会做出积极贡献。同时,公司还注重环境保护和资源节约,通过引进先进的生产设备和工艺技术,降低生产过程中的能耗和排放,实现绿色生产和可持续发展。

请注意,以上故事框架仅为概述,具体细节和数据可能需要根据实际情况进行调整和完善。

CUI Devices公司的发展小趣事

CUI Devices的历史可以追溯到1989年,当时它作为CUI Inc的一部分,在俄勒冈州波特兰郊外以高精度示波器探头制造商的身份进入市场。然而,随着时间的推移,公司逐渐认识到市场的多元化需求,开始积极拓展其产品供应和业务范围。2019年9月,一群在CUI Inc有着深厚背景和平均任期超过15年的高级管理人员,剥离了部分业务,成立了新的私人实体——CUI Devices。这一转型不仅为公司注入了新的活力,也为电子元件行业带来了更多的可能性。

Global Components & Controls公司的发展小趣事
在保证性能和质量的前提下,合理控制元件成本,以提高产品的市场竞争力。
岑科(CENKER)公司的发展小趣事

为了实现更高效的生产和更优质的产品,岑科在2011年成立了自动化设备研发团队。通过自主研发生产设备,岑科实现了对生产技术的全面掌控,并加强了技术创新和改进。这一举措不仅提高了生产效率,还为岑科带来了更多的技术积累和知识产权。随着自动化设备的广泛应用,岑科的生产能力得到了大幅提升,同时也推动了整个产业的升级和可持续发展。

BROTHER公司的发展小趣事

在电子产品领域取得一定成就后,BROTHER并没有停止前进的步伐。公司开始寻求多元化业务的拓展,以应对市场变化和风险。除了传统的缝纫机和电子产品外,BROTHER还开始涉足打印机、传真机、扫描仪等办公设备领域。通过不断创新和研发,BROTHER成功推出了一系列高品质、高性能的办公设备产品,满足了不同客户的需求。同时,公司还积极开拓新的市场领域,如智能家居、物联网等前沿领域,为未来发展奠定了坚实基础。

问答坊 | AI 解惑

一个好梦机电路及制作方法介绍

一个好梦机电路及制作方法介绍   做梦机是每个人都乐意组装和试验的制作,它也是很有用的。它的功能是产生松驰的催眠讯号,有助你晚上好好地睡上一觉。   我们认为睡眠是一个休息的时间,可是大多数人的晚上是在紧张的状态下渡过的,以至没法 ...…

查看全部问答>

NRF24L01无线数传模块(13RMB大家都买得起了)

NRF24L01无线数传模块(13RMB为人民服务) http://store.taobao.com/shop/view_shop.htm?shop_id=59240360…

查看全部问答>

arm 下载到flash 图片乱码

操作2440,提取一幅图片的C数组形式放到程序里,程序在RAM里面可以跑,程序下载到NAND  FLASH里面LCD显示图片乱的,只有局部正确?请高手帮忙分析原因…

查看全部问答>

大家来评论下现在哪些工作会比较有前途?

问题如题? 是搞3G、单片机、嵌入式、硬件系统开发、网站开发还是什么?为什么会比较火? 请大虾们点评!…

查看全部问答>

请教一个问题?

用一款芯片,是只用熟悉它的应用电路就可以了呢,还是熟悉它的原理(应用电路或芯片),如一个运放电路。…

查看全部问答>

STM32通过USB向上位机发送数据上位机无法接收到

我的STM32 是利用ST官方的Mass_Storage修改的 端点1是IN  端点2是OUT  这两个端点都是批量传输端点 安装驱动后  我用Bus Hound 5向其发送数据 STM32能顺利接收 void EP2_OUT_Callback(void) {  &nbs ...…

查看全部问答>

labview调用系统执行节点SYTEM EXEC

我在速查表收集了DOS命令列表,对于386时代的人来说,一般人是接触不到计算机的,DOS命令是同计算机操作系统唯一交流的系统工具,在WINDOWS大行其道的今天,只有网管和黑客们还在孜孜不倦地研究它,DOS命令渐渐被人遗忘了,令人眼花缭乱的WINDOWS可 ...…

查看全部问答>

【MSP430共享】基于低功耗器件的固态矢量地磁探测器

针对目前磁场矢量测量动态响应慢、 功耗过高等问题, 进行研究基于MS P 4 3 0单片机的高性能固态三轴磁探仪。磁敏器件采用动态响应快、 抗干扰能力强的固态磁传感器 S E N - L ; 数据采集模块采用低功耗 P N I  1 1 0 9 6 芯片, 并通过 S P ...…

查看全部问答>

MSP430的软硬件C延时程序设计

MSP430是超低功耗16位单片机,越来越受到电子工程师亲睐并得到广泛应用。C程序直观,可读性好,易于移植和维护,已被很多单片机编程人员所采用。MSP430集成开发环境(如IAR Embedded Workbench和AQ430)都集成了C编译器和C语言级调试器C—SPY。但是C ...…

查看全部问答>