stm32f407计时
时间: 2023-11-08 20:05:30 浏览: 174
在STM32F407中,计时器是一个非常重要的模块,它可以用来测量时间、产生PWM信号、捕获外部事件等。STM32F407有多个计时器,每个计时器都有多个通道,每个通道都可以独立地进行计数和输出控制。此外,STM32F407还有一个SysTick定时器,它是一个24位的倒计时计数器,可以用来产生定时中断。下面是设置SysTick和延时函数的代码:
设置SysTick的代码:
```
SysTick->CTRL &= ~(1<<2); //SYSTICK使用外部时钟源
//这个在程序初始阶段使用一次就好了,这里选的是AHB/8
u32 temp;
SysTick->LOAD = time_value; //时间加载
SysTick->VAL = 0x00; //清空计数器
SysTick->CTRL = 0x01 ; //开始倒数
//这三步就是关键步骤了
do {
temp = SysTick->CTRL;
}while((temp & 0x01) && !(temp & (1<<16))); //等待时间到达
//等待查询,计数完成后,
SysTick->CTRL = 0x00; //关闭计数器
SysTick->VAL = 0X00;
```
延时函数的代码:
```
u32 Delay_count = 0; //默认168Mhz,其他情况按照实际修改
void delay_init(void) {
TIM3_int_init(39999, 21); //每一us计数器加4,10ms重装一次
}
//不能轻易地使用寄存器模式,因为你无法判断会不会被重写
//延时nus,
//nus:要延时的us数.
//nus:注意变量类型的限制
void delay_us(u32 nus) {
u32 last_count = Delay_count;
u32 last_cnt = TIM3->CNT;
while(((Delay_count - last_count) * 40000 + TIM3->CNT - last_cnt) < nus * 4);
}
```
阅读全文