您的位置 首页 模拟

从滴答时钟了解STM32库操作

STM32的库函数操作给设计开发人员带来了诸多的便利,开发人员不必十分了解STM32的内部寄存器及硬件机制,只要有C语言基础,即可完成单片机的开发,缩短了开发周期,降低了开发难度,因而备受工程师喜

  STM32库函数操作给规划开发人员带来了许多的便当,开发人员不用非常了解STM32的内部寄存器及硬件机制,只需有C言语根底,即可完结单片机的开发,缩短了开发周期,降低了开发难度,因而备受工程师喜欢。

  根据库函数的开发形式,与根据API(Application Programming Interface)的软件开发有着殊途同归之处,程序员经过调用 API 函数对应用程序进行开发,而又无需拜访源码,或了解内部作业机制的细节,能够减轻编程使命。STM32的根据函数库的开发形式也是相同的道理,因而关于有单片机开发经历的工程师来说,学习STM32,很简略就能够上手。

  尽管能够不考虑库函数内部的细节,不考虑怎么完成硬件寄存器的装备,可是深化了解库函数关于进步编程才能是很有优点的,下面以体系滴答时钟为例,详解其作业流程。

  滴答时钟是STM32内部的一个24位守时器,其操作相对简略,装备寄存器较少。大体的作业流程是这样的,守时器首要要有时钟源,时钟源装备好之后,设置守时时刻,然后守时器发动,当守时时刻届时,置位标志位,重载守时器初值,体系可选用查询标志位和中止两种作业方法做出相应的呼应,下面来看看程序怎么完成延时功用。

//初始化装备函数

Void Delay_Init()

{

       RCC_ClocksTypeDef RCC_ClocksStatus;

    RCC_GetClocksFreq(&RCC_ClocksStatus);//获取时钟频率

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//时钟源装备为体系主时钟频率/8

       SysTick_ITConfig(DISABLE);//不使能中止,选用查询方法

delay_fac_us = RCC_ClocksStatus.HCLK_Frequency / 8000000;// 1us的守时初值

}

 

//完成延时Nus的延时功用

void Delay_us(u32 Nus)

{

SysTick_SetReload(delay_fac_us * Nus);//载入初值

SysTick_CounterCmd(SysTick_Counter_Clear);//计数器清零

SysTick_CounterCmd(SysTick_Counter_Enable);//计数器开端计数

do

{

     Status = SysTick_GetFlagStatus(SysTick_FLAG_COUNT);

}while (Status != SET);//不断查询标志位,当载入初值与计数器持平时,标志方位位。

SysTick_CounterCmd(SysTick_Counter_Disable);//封闭计数器

SysTick_CounterCmd(SysTick_Counter_Clear);//清零计数器

}

//完成闪灯

Delay_Init();

While(1)

{

LED1(ON);

       Delay_us(500000);//延时500ms

       LED1(OFF);

}

  下面来看看库函数怎么完成相应的寄存器装备。

void SysTick_ITConfig(FunctionalState NewState)

{

  /* Check the parameters */

  assert_param(IS_FUNCTIONAL_STATE(NewState));

 

  if (NewState != DISABLE)

  {

    SysTick->CTRL |= CTRL_TICKINT_Set;

  }

  else

  {

    SysTick->CTRL &= CTRL_TICKINT_Reset;

  }

}

  这个函数的作用是装备寄存器敞开/封闭中止,FunctionalState是自界说的数据类型,是一个枚举类型,typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;

  枚举类型是一种根本数据类型而不是构造类型,它用于声明一组命名的常数,将变量的值逐个列出来,变量的值只限于罗列出来的值的范围内,因而当一个变量有几种或许的取值时,能够将它界说为枚举类型。

  assert_param(IS_FUNCTIONAL_STATE(NewState));

  这句话的作用是判别参数NewState的值是否正确,假如发现参数犯错,它会调用函数assert_failed()向程序员陈述过错。

void assert_failed(uint8_t* file, uint32_t line)

{

while (1)

{}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/118106.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部