历史上的今天
返回首页

历史上的今天

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

正在发生

2018年09月05日 | STM32时钟使能及应用总结

2018-09-05 来源:eefocus

STM32的新手,一般都会对一个问题很纠结。我也是,就是所谓的”时钟问题“。我们在尽心STM32编程时,会痛苦地发现这样一个事实:不管你要干嘛,你首先要做的一件事就是使能时钟。而且可能每一次的时钟还是不同的。 


你就会问:为什么要使能时钟?为什么每次使能的时钟还不一样呢?为什么51单片机中没有这些鬼?在学51单片机的时候,基本上接触不到I/O方向和外设时钟的概念,I/O想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。这样在初学时的确方便了很多,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。但是作为初学者,谁还管这个啊?能让程序跑起来就已经让我们兴奋得几个晚上睡不着觉了。说这话不太合适,但事实上很多芯片生产厂


可是随着电子产品集成度越来越高,功耗和发热越来越严重,芯片厂商非常无奈也在开始想办法避免这个问题,而最直接的思路当然就是用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗,所以就出现了这么多的时钟和IO配置。说白了,时钟的功能就好像是一个小开关,你要用什么寄存器就先对应的打开开关,即:使能对应的时钟。 


实际上,在这里面还涉及到一个时钟门控技术,而这又涉及到同步电路,我们都知道(默认你们都知道)在同步电路中总是有一个时钟控制。这里我就不赘述了,如果你和我一样是一个强迫症患者,请你回去翻翻一本叫《数字电子技术基础》的书,你一定可以找到答案的,相信我吧。 


到这里你就差不多能够理解为什么STM32编程需要不断地使能时钟了,因为默认情况下这些时钟都是disable的。你要使用它,当然需要enable了。因为:寄存器是由D触发器组成的,只有送来了时钟,触发器才能被改写值,这样寄存器才能工作。只不过,在51单片机一个时钟系统把一切都包了,在STM32中,我们很明确地做好了分工,让大家各司其职,其实这样还有一个好处就是,不是每个外设都需要系统时钟那么高的频率,就好像是:哪个公司会让CEO去做底层代码工作一样。


STM32有好多时钟主要应用的有以下几种:


一、 STM32 通用定时器简述

①STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 

②、STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能包括: 

1)16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。 

2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~ 

65535 之间的任意数值。 

3)4 个独立通道(TIMx_CH1~4),这些通道可以用来作为: 

A.输入捕获 

B.输出比较 

C.PWM 生成(边缘或中间对齐模式) 

D.单脉冲模式输出 

4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外 

一个定时器)的同步电路。 

5)如下事件发生时产生中断/DMA: 

A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) 

B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) 

C.输入捕获 

D.输出比较 

E.支持针对定位的增量(正交)编码器和霍尔传感器电路 

F.触发输入作为外部时钟或者按周期的电流管理 

由于 STM32 通用定时器比较复杂,这里我们不再多介绍,请大家直接参考《STM32 参考 

手册》第 253 页,通用定时器一章。


二、 systick定时器简述

systick 定时器是包含在 Cortex-M3 内核里面,它是捆绑在 NVIC 中。它 

是 24 位倒计数的定时器,当定时器计数到 0 的时候,将从 RELOAD 寄存器中自动重 装定时器初值,如果开启中断的话,同时它还是产生异常中断信号。 我们知道,定时器还必须要有一个时钟来驱动,而 systick 定时器的时钟来源 是来自系统时钟,不过它的时钟可以选择成直接取自系统时钟,还可以将系统时 钟8 分频之后再赋给 systick 定时器。一般用来设计精准延时函数。


三、通用定时器初始化

    初始化函数

/****************************************

* 函 数 名 : time_init 

* 函数功能 : 定时器 3 端口初始化函数 

* 输 入 : 无 

* 输 出 : 无 

**************************************/


void time_init()

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //声明一个结

构体变量,用来初始化 GPIO

NVIC_InitTypeDef NVIC_InitStructure;

/* 开启定时器 3 时钟 */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除 TIMx 的中断待处理位:TIM 中断源

TIM_TimeBaseInitStructure.TIM_Period = 2000;//设置自动重装载寄存器周期的值

TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;//设置用来作为 TIMx时钟频率预分频值,100Khz 计数频率

TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up;//TIM 向上计数模式

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);

TIM_Cmd(TIM3,ENABLE); //使能或者失能 TIMx 外设

/* 设置中断参数,并打开中断 */

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE ); //使能或者失能指定的TIM 中断

/* 设置 NVIC 参数 */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //打开 TIM3_IRQn 的全局中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级为 0

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //响应优先级为 1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能

NVIC_Init(&NVIC_InitStructure);

}

2) 定时器中断 函数

void TIM3_IRQHandler() //定时器 3 中断函数

{

  static u8 i=0;

  TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

  GPIO_Write(GPIOC,(u16)~(0x01<

  if(i==8)i=0;

}0


推荐阅读

史海拾趣

GeneSiC公司的发展小趣事

FWBELL公司在电子行业中的五个发展故事

故事一:创立与早期发展

FWBELL公司,全称F.W. Bell Inc.,由Floyd Bell于1944年在美国创立。创立之初,公司专注于设计和制造霍尔发电机,这一创新性的产品迅速在市场中获得了认可。在随后的几十年里,FWBELL始终保持着在测量电流和磁场仪器领域的领先地位。从第一批配备固态电子设备的高斯计,到后续不断迭代的产品线,FWBELL的技术革新推动了整个行业的发展。这段早期的发展历程奠定了FWBELL在电子行业中的坚实基础。

故事二:产品线扩展与全球影响力

随着技术的不断进步和市场需求的扩大,FWBELL的产品线逐渐扩展,涵盖了高斯计、特斯拉计、霍尔元件、霍尔电流传感器以及标准磁铁等多个领域。这些产品凭借其卓越的性能和极高的性价比,在全球范围内赢得了广泛的客户群体。FWBELL的产品不仅被用于商业运输、军事、公务和通用航空等高端领域,还深入到了石油和天然气、工业、医疗以及空间探索等多个行业。这种广泛的行业覆盖进一步提升了FWBELL在全球电子行业中的影响力。

故事三:技术革新与领导地位

FWBELL一直致力于技术革新,不断推出具有领先技术水平的新产品。例如,其高斯计和特斯拉计采用了特有的探头动态补偿技术,确保了量程内的基本精度,并内置软件消除了复杂的校准过程。这些技术创新使得FWBELL的产品在性能上始终保持领先地位。同时,FWBELL还积极参与国际标准的制定和推广工作,为整个行业的发展贡献了自己的力量。

故事四:加入Meggitt集团与资源整合

2010年,FWBELL成为了Meggitt PLC.的全资子公司OECO LLC的一部分。这一战略性的整合为FWBELL带来了更多的资源和支持。Meggitt是一家全球工程集团,专注于为航空航天、国防和能源市场提供极端环境组件和智能子系统。加入Meggitt后,FWBELL得以与其他行业先驱如Securaplane、TFE Electronics和Artus等共同合作,进一步提升了其在电子行业中的竞争力。

故事五:中国市场拓展与本地化服务

近年来,FWBELL积极拓展中国市场,并在中国设立了分支机构以提供更便捷的本地化服务。这些分支机构不仅负责产品的销售和推广工作,还为客户提供专业的技术支持和售后服务。通过与中国本土企业的合作与交流,FWBELL得以更好地了解中国市场的需求变化和技术趋势,从而不断优化其产品和服务以满足客户的实际需求。这一系列的举措不仅加深了FWBELL在中国市场的影响力,也为其在全球范围内的持续发展奠定了坚实的基础。

Dionics Inc公司的发展小趣事

为了进一步拓展国际市场,Dionics Inc开始寻求与国际知名企业的战略合作。经过多次洽谈,公司最终与一家国际知名电子企业达成战略合作协议,共同开发新一代智能穿戴设备。通过这一合作,Dionics Inc不仅获得了宝贵的技术支持和市场资源,还成功将其产品推向了国际市场。

Global Navigation Systems公司的发展小趣事
减少远程无线防盗报警系统的误报率可以从以下几个方面入手:首先,选择合适的探测器和安装位置,避免将探测器安装在易受干扰或误触发的位置;其次,合理设置探测器的灵敏度和报警阈值,避免过度敏感导致误报;最后,定期对系统进行维护和检查,及时发现并排除潜在的故障和隐患。
Connect-Tech Products Corp公司的发展小趣事

Connect-Tech Products Corp公司始终将产品质量视为企业发展的生命线。公司建立了严格的质量管理体系,从原材料采购、生产加工到产品出厂,每一个环节都严格把控。此外,公司还注重持续改进,不断优化生产流程和技术创新,确保产品质量的稳定性和可靠性。这些措施使得Connect-Tech Products Corp公司的产品在市场上赢得了良好的口碑和信誉。

EVERLIGHT公司的发展小趣事

面对未来,EVERLIGHT有着明确的发展规划。公司将继续加大研发投入,不断推出创新型的LED产品和技术解决方案。同时,公司还将加强与国际知名品牌的合作,拓展更广阔的市场空间。此外,EVERLIGHT还将积极应对市场变化和竞争挑战,不断提升自身的核心竞争力和市场影响力。在未来的发展中,EVERLIGHT将继续秉持创新、品质、环保的理念,为电子行业的发展做出更大的贡献。

Amphenol RF公司的发展小趣事

进入21世纪,随着全球电子产业的快速发展,EVERLIGHT迎来了市场扩张的机遇。公司不仅巩固了在台湾市场的领先地位,还积极开拓国际市场。通过与国际知名品牌的合作,EVERLIGHT的产品逐渐进入全球市场,赢得了广泛认可。同时,公司还加强了对新兴市场的开拓,如中国大陆、东南亚等地区,为公司的持续发展注入了新的动力。

问答坊 | AI 解惑

一种小功率单级功率因数校正电路

摘要:讨论一种单级功率因数校正电路的原理,并分析其实验结果。对于较小功率的变换器,若采用复杂的功率因数校正电路来提高源侧功率因数,会导致成本增加,失去应用价值。本文所讨论的电路为采用升压电感和双正激电路组合的方式,完成功率因数校正 ...…

查看全部问答>

MSP430常见问题与解答

由Texas Instruments提供,如果你是一位MSP430初学者。希望这些能帮到你吧,这是一个不错的综合问题。如果认为此论坛对你有用,请帮忙宣传吧... 1-问:JTAG 与 I/O 功能之间的 MSP430 引脚复用 答: 四个引脚 P1.7 - P1.4 在 20 与 28 引脚 MSP4 ...…

查看全部问答>

视频采集模块。

有哪位牛人拿单片机做过视频或是图像采集的,期待指点下在下,期待交流。392630827  具体Q上谈。…

查看全部问答>

VXworks wdStart()的最小延时单位

请问: VXworks 中调用看门狗定时器wdStart(timerID, delayTicks)的时候,delayTicks允许的最小值是多少?0可以吗? 我查了大量的资料,没有找到资料说明这个问题。请高手解答。…

查看全部问答>

串口如何正确发送接收数组?(附程序)

#include    #include           #define INBUF_LEN 5 //数据长度          unsigned char ch;       bit read_flag= 0 ;   &n ...…

查看全部问答>

伟福V8仿真调试Winbond77E58不能正常使用片上1K外部存贮器的问题

我用伟福V8/L仿真调试Winbond77E58板子, W77E58有片上1K外部存贮器,我不知是我的编译环境设置不对, 还是伟福不能仿真片上1K外部存贮器?在下面的程序中,将 int xdata iii; 改为: int data iii; 就正常。 调试下列程序, ------- ...…

查看全部问答>

如何采购电子元器件之我见

如何采购电子元器件   有些新来的朋友在论坛上发贴采购电子元器件,发现问题不少。而有些朋友直接咨询如何采购电子元器件。有鉴于此,本人从82年开始邮购到后来的在网上采购,有一些实践经验和体会,现在写出来供初入门者参考,有不足的地方 ...…

查看全部问答>

c6747 UART使用EDMA传输方式求解

tms320c6747 uart传输fifo是16bytes。当我使用EDMA方式时,一次发送大于16个字符,16以后的就会丢失。分开成多个部分发送也不行,前面部分等于16字节,最后一部分小于等于16,只发送了第一部分。请教怎么控制发送全部数据。之间不能加入等待,否则 ...…

查看全部问答>

ASIC与FPGA是相互融合还是相互竞争?

最近参加了一个研讨会,富士通半导体ASIC/COT业务部在推广他们明年推出的两套创新55nm标准单元,针对国内厂商提供ASIC设计服务。N年前,曾看到某专家有关FPGA将取代ASIC的言论,但时隔多年ASIC依然健在,青春焕发,专家果然是”砖家”!不知道论坛上 ...…

查看全部问答>