欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32F407 定时器 时钟 Systick

程序员文章站 2022-06-09 11:18:26
...

时钟-定时器

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/2
2=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个
STM32F407 定时器 时钟 Systick

1.-----------------
2.当前值寄存器 SysTick->VAL
3.重装载寄存器 SysTick->LOAD
4.状态寄存器 CTRL 0位:使能 1位:中断开启位 2位:时钟源选择 0-》21M 1-》168M 16位:计数标志位
STM32F407 定时器 时钟 Systick

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
}