(06)---STM32的Systick定时器与ADC

目录

【1】Systick定时器

概念

工作原理

时钟基准

【2】HAL_Delay函数分析

【3】定时器         

基本概念    

定时器分类

定时器组成

1.计数器

2.自动重装寄存器

3.预分频器

 定时器计数原理

实验

2.PWM

定义

参数

工作原理

应用

练习:通过PWM信号调节LED灯亮度

练习:实现呼吸灯效果

3.蜂鸣器

    简介:

    分类:

蜂鸣器发声实验

【4】ADC

1.定义

2.ADC简介

3.ADC特性

4.ADC时钟

5.工作模式   

6.单通道单次转换实验


【1】Systick定时器

   概念:

     SysTick又称滴答定时器。是一个定时设备,位于Cortex-M0内核中,和NVIC捆绑,产生SysTick异常(IRQ异常号15)可以对输入的时钟进行计数,系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。

工作原理

工作原理:

滴答定时器是一个24位递减定时器,也就是最多能计数2^24(0xFFFFFF)。

SysTick设定初值并使能后,每来一个时钟信号,计数值就减1。

计数到0时,触发中断,SysTick计数器自动重装初值并继续减一,循环不断。

系统默认开启滴答定时器。

 

时钟基准

        探究:systick多久触发一次异常?

首先看Systick每次触发异常在异常处理程序中做了哪些工作

每次systick触发中断后会让uwTick自加1

这个uwTick的值就作为我们系统的时钟基准。

然后再来研究一下,uwTick多久会被加1.

在main.c中main函数首个执行的函数HAL_Init(),会对systick进行初始化。

在HAL_Init中通过调用HAL_InitTick函数,对Tick进行初始化

传递参数为:

TICK_INT_PRIORITY  =  0   作为systick的中断优先级

调用HAL_SYSTICK_Config函数用于配置systick时基

SystemCoreClock / (1000U /(uint32_t)uwTickFreq)

 uint32_t SystemCoreClock = 16000000UL;   

   16000000 / 1000 / 1  = 16000 

   将16000作为参数传递给了HAL_SYSTICK_Config函数

Systic_Config函数对Systick的重装值、初值、优先级和校准值都进行了配置。

  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)  //如果systick初值大于最大值0xFFFFFF

  {

         return (1UL);        //返回1 说明配置失败                                        

  }

  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* 重载的计数值 */     16000 - 1

  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

                   SysTick_CTRL_TICKINT_Msk   |

                   SysTick_CTRL_ENABLE_Msk;                      

  return (0UL); 

先来看一下每次重装的值为多少

  SysTick->LOAD  = (uint32_t)(ticks - 1UL);  //即16000 - 1

从16000 - 1开始递减到0,总共需要计数16000次

当前时钟频率16Mhz,说明计一个数用时1/16M s 

计16000个数需要用时  16000 *  1/16000000 s  = 1/1000 s = 1ms

因此Systick每隔1ms会触发一次异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值