STM32时钟使能及应用总结

发布者:西周以前的最新更新时间:2018-09-05 来源: eefocus关键字:STM32  时钟使能  应用总结 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:STM32  时钟使能  应用总结 引用地址:STM32时钟使能及应用总结

上一篇:STM32 can配置PA11 PA12
下一篇:stm32单片机时钟理解

推荐阅读最新更新时间:2024-03-16 16:12

stm32PVD电源监测使用
正确操作步骤: 开时钟;配置电源检测;配置中断优先级 /* Includes ------------------------------------------------------------------*/ #include stm32f10x.h #include stm32_eval.h void EXTI_Configuration(void); void NVIC_Configuration(void); int main(void) { STM_EVAL_LEDInit(LED1); GPIO_SetBits(GPIOC, GPIO_Pi
[单片机]
STM32-中断优先级
中断作为系统资源里面尤为重要的一种系统资源,可以对于硬件的运行发挥着不可或缺的地位。基本每一个硬件都会有相应的中断,只不过是中断类型和中断数量多少的问题。像51单片机的硬件就拥有比较简单中断类型,例如定时器中断、串口接收中断、外部中断等几个简单中断,用起来也是十分简单。 对于STM32来说因为它使用的基于M3和M4的内核,就M3内核而言,支持256个中断其中包含了16个内核中断和240个外部中断,而且具有256级的可编程中断设置。但是STM32并没有将这些中断都添加到自身的硬件资源中而是使用了其中的部分中断,一种拥有84个中断,包括了16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。103系列只有60个可屏蔽中
[单片机]
STM32的学习心得之RCC(时钟)
从51单片机转到STM32单片机有点困难,很多理解都停留在51的概念上,对STM32单片机学习需要重新认识,比如RTC...... RTC是STM32单片机的脉搏,是单片机的驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。 STM32单片机的时钟可以由以下3个时钟源提供: 1、HSI:高速内部时钟信号 stm32单片机内带的时钟 (8M频率) 精度较差 2、HSE:高速外部时钟信号 精度高 来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟
[单片机]
STM32系统中的五个时钟源介绍
时钟信号好比是单片机的脉搏,了解STM32时钟系统很有必要。下图是STM32F1xx用户手册中的时钟系统结构图。 在STM32F1xx中,有五个时钟源,分别为HSI、HSE、LSI、LSE、PLL。 HSI是高速内部时钟,RC振荡器,频率为8MHz HSE是高速外部时钟,可接石英/陶瓷谐振器或者接外部时钟源,频率范围为4MHz~16MHz LSI是低速内部时钟,RC振荡器,频率为40kHz LSE是低速外部时钟,接频率为32.768kHz的石英晶振 PLL为锁相环倍频输出,其输出频率最大不得超过72MHz SYSCLK系统时钟SYSCLK最大频率为72MHz,它是供STM32中绝大部分部件工作的时钟源。系统时钟可由PLL、
[单片机]
<font color='red'>STM32</font>系统中的五个<font color='red'>时钟</font>源介绍
stm32 pwm波 输出的对应通道
(1) 定时器通道的管脚是确定的,不能随意改动。博主现在用的是STM32f103c8,其它的可以查相应的手册。 详细配置如下: TIM1_CH1- PA8; TIM1_CH2- PA9; TIM1_CH3- PA10; TIM1_CH4- PA11; TIM2_CH1- PA0; TIM2_CH2- PA1; TIM2_CH3- PA2; TIM2_CH4- PA3; TIM3_CH1- PA6; TIM3_CH2- PA7; TIM3_CH3- PB0; TIM3_CH4- PB1; TIM4_CH1- PB6; TIM4_CH1- PB7; TIM4_CH1- PB8; TIM4_CH1- PB9; (
[单片机]
STM32定时器的TRGO信号
定时器的框图中有一个TRGO信号输出,此信号可以用来触发ADC、DAC、其他定时器等。 此信号怎么产生呢? 要使用 TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); 函数来选择TRGO信号的事件源,这个函数给TIMx_CR2寄存器的位6到位4赋值,位6到位4是MMS ,描述如下: 如果MMS 值为000:当TIMx_EGR寄存器的UG位有效,就会触发TRGO输出。 如果MMS 值为010:当产生更新事件时,就会触发TRGO输出。 另外: 当配置MMS 值为010:当产生更新事件时,就会触发TRGO输出。还可以配合重复计数寄存器来使用: 即重复多少
[单片机]
<font color='red'>STM32</font>定时器的TRGO信号
STM32】HAL库 STM32CubeMX教程四---UART串口通信详解
前言: 今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收, 本系列教程将HAL库与STM32CubeMX结合在一起讲解 ,使您可以更快速的学会各个模块的使用 所用工具 : 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 5、 串口: 使用USART1 PA9,PA10 知识概括: 通过本篇博客您将学到: STM32CubeMX创建串口例程 HAL库UATR函数库 重定义printf
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32CubeMX教程四---UART串口通信详解
意法与厦门大学合作研发32位嵌入式系统
        微控制器设计开发的厂商意法半导体协同其增值服务商深圳市博巨兴,宣布与厦门大学签订合作协议,成立“ST嵌入式系统联合实验室”,并举行实验室揭牌仪式。意法半导体持续推动校园合作计划,与中国的大学携手开发嵌入式应用技术和培训电子工程专业学生,再迈出重要的一步。   作为32位微控制器的主导厂商之一,意法半导体将向厦门大学提供先进的基于32位ARM CORTEX-M3的STM32微控制器及其开发工具,信息科学与技术学院(通信工程系、电子工程系、自动化系、计算机系及智能科学与技术系)的本科生及研究生将参与意法半导体的实际项目的开发。此外,意法半导体将提供所需的全部培训和技术支持,从事教学和学术研究,协助大学院校及产业
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved