最近在学习STM32单片机,之所以选择这款单片机作为入门原因有以下几点:

       1. 配套资料详细  

       2. 工作中正在用这款单片机,有疑问可以请教同事,熟悉了这款单片机能更好服务于工作 

       3. ST单片机非常火爆,很多公司都在用

对于单片机小白的我,想要学好一款单片机,不仅仅是一时的冲动,凭借的更是长期的毅力和兴趣,这点觉悟必须具备。为什么要写博文呢?因为怕忘记,有时候花很长时间琢磨的函数,再见面只有相见无言唯有泪千行!!!所以做笔记尤其重要啊!!!

 

使用一个外设时,必须先使能它的时钟,这些时钟函数可大致分为三类:一)外设时钟使能函数    二)时钟源和倍频因子配置函数    三)外设复位函数

外设时钟使能函数又包括外设时钟使能和时钟源使能,因为外设是挂在AHB和APB总线上的,所以使能外设时钟就是使能对应外设所挂的总线时钟,比如GPIO 外设它是挂接在APB2 总线上的,如果使用GPIO 外设,就需要先调用 RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);函数使能APB2时钟,外设时钟使能函数有两个形参,第一个是你所使用的外设所挂接的时钟,第二个是选择你用的外设时钟使能还是失能。比如我们要使能端口GPIOC,那么第一个传递的参数是:RCC_APB2Periph_GPIOC 宏,第二个传递的参数是ENABLE 使能。下面为具体函数:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
 
  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    RCC->APB2ENR |= RCC_APB2Periph;
  }
  else
  {
    RCC->APB2ENR &= ~RCC_APB2Periph;
  }
}

首先来看下这个函数assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));这是个断言函数,意思就是如果外设是挂在APB2总线上的,程序就继续执行,如果不是则做其它处理。

 

再来看下IS_RCC_APB2_PERIPH(RCC_APB2Periph)这个宏,具体如下:

#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))

其实这个宏的目的就是识别APB2的外设,那为什么是0xFFC00002呢?来看下APB2总线上的所有外设时钟是如何定义的

#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)

 

以RCC_APB2Periph_GPIOC为例,想要使能RCC_APB2Periph_GPIOC的时钟,就要将RCC->APB2ENR 寄存器的相应位置1,即bit4=1,所以RCC_APB2Periph_GPIOC= (uint32_t)0x00000010,其它以此类推,如果使能APB2总线上的所有外设时钟那么 RCC->APB2ENR=0x003FFFFD,取反就是0xFFC00002

最后是,使能外设时钟的具体操作

if (NewState != DISABLE)
  {
    RCC->APB2ENR |= RCC_APB2Periph;//将APB2ENR寄存器中相应的外设时钟使能位置1
  }
  else
  {
    RCC->APB2ENR &= ~RCC_APB2Periph;//APB2ENR寄存器中相应的外设时钟使能位为置0,其它位保持不变

  }

 

 

STM32时钟使能函数


关键字:STM32  时钟使能函数 引用地址:STM32时钟使能函数

上一篇:STM32学习札记--ADC的有关函数个人见解
下一篇:STM32关于GPIO的8种模式理解

推荐阅读

近两年,重庆制造亮点频出,先有重庆永川引进埃马克、利勃海尔、埃斯维、德根等世界知名机床制造商,近日又传出日本发那科将落户重庆两江新区。据新华社报道,日本发那科机器人重庆基地项目日前在两江新区开工建设,预计2019年上半年竣工。据悉,发那科机器人重庆基地项目计划投资1亿元,将建成发那科机器人重庆技术中心,主要从事机器人系统的生产、销售...
#include <intrins.h>#include <STC8.H>sbit lcd_sclk=P5^0; /*接口定义:lcd_sclk就是CLK*/sbit lcd_sid=P5^1; /*接口定义:lcd_sid就是MOSI*/sbit lcd_rs=P5^2; /*接口定义:lcd_rs就是DC*/sbit lcd_cs1=P5^3; /*接口定义:lcd_cs1就是OLED的片选CS1*/sbit Rom_OUT=P5^4; /*字库IC接口定义:Rom_OUT就是FSO*/sbit Rom_CS=P5^5; ...
1.天线用软导线或其它硬质金属(如拉杆天线),长度大约20cm(315MHz )或18cm(434MHz ) ,尽量拉直使用。不要靠近金属物体。 2.电源电压要求稳定且波纹系数低,需多级滤波(如增加磁珠﹑电感﹑电容等)。3.若配合单片机使用建议MCU时钟频率在4MHZ以下并且晶体尽量远离RF 接收模块,否则晶体的高次谐波会影响通讯距离。 4.注意编码IC和解...
下面是一个STM32芯片的时钟树图1、LSI是低速内部时钟,RC振荡器,频率为32kHz左右。供独立看门狗和自动唤醒单元使用。2、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。3、HSE是高速外部时钟,课接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。我们开发板接的是8M的晶振。HSE也可以直接作为系统时钟或者PLL输入...

史海拾趣

问答坊 | AI 解惑

应用于手机的TD-SCDMA无线芯片集框图

中国对3G蜂窝电话的选择是TD-SCDMA系统。本文列出了一个详细的手机收发信机框图,其中,MAX2361作为发射机集成电路,MAX2291作为功率放大器(PA),MAX2388和MAX2309构成接收器,一个VCO缓冲放大器提供良好隔离性能以保持一个无干扰的LO信号。 引言 T ...…

查看全部问答∨

温度计毕业论文

温度计毕业论文…

查看全部问答∨

FPGA的时钟约束

FPGA的时钟约束,FPGA设计中的重要问题…

查看全部问答∨

万能的坛啊,帮我看看这个电路

请高手指点下图中D4与D5的接法各有什么好处,各实用于什么灯电路. …

查看全部问答∨

Windows CENET及其在嵌入式系统中的应用.pdf

Windows CENET及其在嵌入式系统中的应用.pdf…

查看全部问答∨

SOPC中edit component的时候添加signal的问题

SOPC中edit component的时候添加signal的时候该如何选择interface和signal type?有没有相关的资料,大家提供一下。。 如:我的信号表示error的输入输出,所以interface设为avalon_streaming_souce/sink,但type选为error时总是提示应该为valid ty ...…

查看全部问答∨

自动问候电路

<IMG height=662 src="http://www.21ic.com/d/file/200906/6070e4288a0a7e362f25bd5783c5cf9f.gif" width=909>…

查看全部问答∨

SMT标准汇集目录

  在柔性印制电路板(FPC)上贴装SMD的工艺要求在电子产品小型化发展之际,相当一部分消费类产品的表面贴装,由于组装空间的关系,其SMD都是贴装在FPC上来完成整机的组装的.FPC上SMD的表面贴装已成为SMT技术发展趋势之一.对于表面贴装的工艺要求 ...…

查看全部问答∨

51单片机串口初始化

很有用,看看不错。…

查看全部问答∨

STM8S105K4TIM2应用的问题

这样配置: TIM2_PSCR |= TIM2_Prescaler; TIM2_CNTRH = (INT8U)(TIM2_Period >> 8);   TIM2_CNTRL = (INT8U)(TIM2_Period);   /* Set the Autoreload value */   TIM2_ARRH = (INT8U)(TIM2_Period ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved