深圳市航顺芯片技术研发有限公司
直播中

刘丽

7年用户 1273经验值
私信 关注
[问答]

SysTick定时器的计时功能可以实现精准延时吗

什么是定时器?
STM32定时器分为哪几类?
Systick定时器的计时功能可以实现精准延时吗?

回帖(1)

袁钧质

2021-8-12 17:24:47
  时钟-定时器
  1.外部中断线跟GPIO的连接 不同组同号相连同号中断线
  2.全局中断号
  EXTI中断服务函数0-4 EXTIX_IRQhander();
  0 EXTI0_IRQn
  23 EXTI9_5IRQn 公用中断号::中断号共用,中断函数也共用
  40 EXTI15_10IRQn 公用中断号
  共用时,共用服务函数要判断标志位
  if(EXTI_GetITPendingBit(EXTI_Line5) == 1) { //函数 //清除标志位 EXTI_ClearITPendingBit(EXTI_Line5); }
  3.中断优先级 NVIC设置
  先看抢占优先级-》抢占优先级相同-》响应优先级
  AIRCR模块 属于SCB 属于内核模块 ----》配置优先级分组
  定时器模块:
  1.定时器是芯片内的硬件模块 有计数器-》计数器的作用,可以轻易识别电平变化,来一个方波脉冲,计数值++;
  2.什么是定时器::和时间相关的模块::有定时功能
  stm32定时器分三类:基本定时器,高级定时器,通用定时器
  定时器-》参照时钟(时钟:标准脉冲方波)
  定时器功能1.计时功能-》计数器记录脉冲个数n ,对应时间为n*周期
  RCC模块:复位和时钟控制模块
  时钟树
  模块内还有振荡器
  HSI内部高速晶振
  PLL锁相环:稳定
  分频器:/ ::频率/N (降频)
  模块内-》时钟威廉希尔官方网站 :1.稳定时钟威廉希尔官方网站 2.给外部提供时钟倍频或者降频 3.分配内部模块时钟
  APB1=168/42=84Mhz
  APB2=168/22=168Mhz
  STM32F407ZE定时器数量:14个
  第一步是使能时钟
  去看看有哪些时钟使能函数—有5个
  AHB1: GPIOX
  AHB2:
  AHB3:
  APB1: TIM2 TIM3 TIM4 TIM5 TIM6 TIM7 TIM12 TIM13 TIM14 84Mhz
  APB2: SYSCFG TIM1 TIM8 TIM9 TIM10 TIM11 168Mhz
  参考《中文手册》第二章–储存器映射表
  SysTick定时器的计时功能实现精准延时
  1.SysTick定时器属于核心模块—中文手册没有详细介绍
  2.官方提供的标准库函数也没有对该定时器的操作模块
  3.所以关于该模块的配置及操–使用寄存器操作
  4.关于该模块的驱动参考《M3与M4权威指南.pdf)》
  5.Sys Tick定时器参数
  内部含24Bit 递减计数器
  递减:来一个脉冲计数器的计数值-1
  我们把储存当前变化中的计数值的 VAL寄存器---当前值寄存器 存储原始,不变的设置值 LOAD寄存器重装载寄存器 滴答定时器的寄存器 4个
  1.-----------------
  2.当前值寄存器 SysTick-》VAL
  3.重装载寄存器 SysTick-》LOAD
  4.状态寄存器 CTRL 0位:使能 1位:中断开启位 2位:时钟源选择 0-》21M 1-》168M 16位:计数标志位
  systick设置
  void SysTick_ClkSourceSelect(void) { SysTick-》CTRL &= ~(0x01《《2);//将时钟源选择位清0 选择21Mhz } void delay_ms(int delay_t) { SysTick-》CTRL &= ~(0x01); SysTick-》LOAD = 21*1000*delay_t; SysTick-》VAL = 0; SysTick-》CTRL |= 0x01; while(1) { if(SysTick-》CTRL & (0x01《《16)) break; } SysTick-》CTRL &= ~(0x01); SysTick-》CTRL &= ~(0x01《《16);//将第16bit的标志位清为0 }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分