最近在学习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学习札记--ADC的有关函数个人见解
下一篇:STM32关于GPIO的8种模式理解
推荐阅读
史海拾趣
Acme Electric Corporation是一家专注于生产变压器和电源设备的公司。以下是该公司发展的五个相关故事:
公司成立和初期发展: Acme Electric Corporation成立于1958年,总部位于美国威斯康星州。公司最初是一家小规模的家庭企业,致力于生产各种类型的变压器和电源设备,主要用于工业、商业和农业应用。
技术创新和产品扩展: 随着市场需求的增长和技术进步,Acme Electric Corporation不断进行技术创新,并扩展了产品线。公司推出了一系列高性能、高效率的变压器和电源设备,包括控制变压器、隔离变压器、电源逆变器等,满足不同客户的需求。
市场拓展和客户合作: Acme Electric Corporation积极开拓国内外市场,并与各行各业的客户建立了合作关系。公司的产品被广泛应用于制造业、电力行业、建筑业等领域,为客户提供稳定可靠的电源解决方案。同时,Acme Electric Corporation与客户密切合作,根据客户的需求定制产品,提供个性化的服务。
质量控制和生产管理: Acme Electric Corporation注重产品质量和生产管理,采用先进的生产设备和严格的质量控制体系,确保产品的稳定性和可靠性。公司拥有一支专业的研发团队和生产团队,不断改进工艺流程,提升产品质量和生产效率。
未来发展展望: Acme Electric Corporation将继续致力于变压器和电源设备领域的研发和生产,不断推出更先进、更可靠的产品和解决方案,以满足客户在各个领域的需求。公司将加强国际市场拓展,提升自身在全球市场的竞争力,为行业的发展做出更大的贡献。
在竞争激烈的电子行业中,DBM Optix深知只有不断创新才能保持领先地位。因此,公司始终将研发作为核心竞争力之一,持续投入大量资金用于新技术、新产品的开发。通过与高校、研究机构等合作,DBM Optix不断引入新技术、新材料,并将其应用于产品中,从而不断提升产品的性能和品质。这些创新举措使得DBM Optix在光学通信领域始终保持领先地位。
Fairchild Semiconductor在创立之初就致力于半导体技术的研发与创新。公司推出了多种具有革命性意义的半导体产品,如逻辑门、功率MOSFET、模拟集成电路等,这些产品不仅在当时市场上取得了巨大的成功,更为Fairchild在半导体行业中确立了领导地位。
随着市场的不断变化和客户需求的日益多样化,兵字公司意识到,要想在市场中保持领先地位,就必须不断进行技术创新。于是,公司投入大量研发资源,成功研发出了小型精密互感器。这一创新产品不仅填补了市场空白,还为公司带来了可观的收益。同时,兵字公司也凭借这一技术突破,进一步巩固了在电子元器件领域的领先地位。
随着公司的发展,EM Devices Corporation不断加大对研发的投入,致力于推出更具创新性的产品。一次偶然的机会,公司的研发团队发现了一种新型材料,它具有优异的电气性能和稳定性。经过数月的艰苦研发,公司成功将这种材料应用于产品中,并推出了一款性能卓越的新型电子元件。这一创新产品不仅为公司带来了丰厚的利润,还进一步巩固了公司在行业内的领先地位。
在快速发展的过程中,Erocore意识到供应链管理的重要性。公司开始优化供应链流程,降低采购成本,提高生产效率。通过与供应商建立长期稳定的合作关系,Erocore在保证产品质量的同时,实现了成本的有效控制。这一举措为公司在激烈的市场竞争中赢得了更多的优势。
中国对3G蜂窝电话的选择是TD-SCDMA系统。本文列出了一个详细的手机收发信机框图,其中,MAX2361作为发射机集成电路,MAX2291作为功率放大器(PA),MAX2388和MAX2309构成接收器,一个VCO缓冲放大器提供良好隔离性能以保持一个无干扰的LO信号。 引言 T ...… 查看全部问答∨ |
|
SOPC中edit component的时候添加signal的问题 SOPC中edit component的时候添加signal的时候该如何选择interface和signal type?有没有相关的资料,大家提供一下。。 如:我的信号表示error的输入输出,所以interface设为avalon_streaming_souce/sink,但type选为error时总是提示应该为valid ty ...… 查看全部问答∨ |
|
这样配置: TIM2_PSCR |= TIM2_Prescaler; TIM2_CNTRH = (INT8U)(TIM2_Period >> 8); TIM2_CNTRL = (INT8U)(TIM2_Period); /* Set the Autoreload value */ TIM2_ARRH = (INT8U)(TIM2_Period ...… 查看全部问答∨ |