STM32F407 定时器 时钟 Systick
时钟-定时器
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
}
上一篇: 8路抢答器