ECE STM32开发 定时器

本文介绍了在STM32F10x平台上,通过嵌套向量中断控制器NVIC和SysTick定时器实现0.25秒精确计时的实验过程,包括编写SysTick_Delay_250Ms函数,配置SysTick中断以及在主函数中应用定时器控制LED和蜂鸣器操作。
摘要由CSDN通过智能技术生成

一、实验目的

  • 了解CPU中断(Interrupt Request)的过程,了解嵌套向量中断控制器NVIC的结构和功能
  • 了解SysTick定时器(系统滴答定时器)的结构和功能,使用SysTick寄存器计时

二、实验过程

1.编写SysTick_Delay_250Ms函数,用来精准计时0.25s

a) 设置计数器变量i

b) 调用SysTick_Config函数,配置reload寄存器的初始值,配置中断优先级为1<<4-1 = 15,优先级为最低,配置counter计数器的值,配置systick的时钟为72M,使能中断,使能systick

c) 使用for循环语句进行计时,当计数器的值减小到0的时候,CRTL寄存器的位16会置1,当置1时,读取该位会清0

d) 关闭SysTick定时器

2.主函数

a) 设置短鸣计数器变量i=4

b) 调用LED_GPIO_Config函数,初始化LED端口配置

c) 调用SysTick_Init函数,配置SysTick为10μs中断一次

d) 调用BEEP_GPIO_Config函数,初始化蜂鸣器端口配置

e) 使用for循环语句,使蜂鸣器短鸣0.25s,同时红色LED灯亮起,间隔1s后重复以上操作,共4次,然后蜂鸣器长鸣1s,同时红色LED灯亮起,间隔1s后重复e)步所有过程

3.查看实验录像音频,发现计时准确
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、附录

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_SysTick.h"
#include "bsp_beep.h"

void SysTick_Delay_250Ms(void)
{
	uint32_t i;	
	SysTick_Config(SystemCoreClock/1000);
	
	for(i=0;i<250;i++)
	{
		// 当计数器的值减小到0的时候,CRTL寄存器的位16会置1
		// 当置1时,读取该位会清0
		while( !((SysTick->CTRL)&(1<<16)) );
	}
	// 关闭SysTick定时器
	SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;
}

int main()
{	
	/* 计数4次 */
	unsigned int i=4;
	
	/* LED 端口初始化 */
	LED_GPIO_Config();

	/* 配置SysTick 为10us中断一次 */
	SysTick_Init();
	
	/* 蜂鸣器端口初始化 */
	BEEP_GPIO_Config();
		
	while(1){
		for(;i>0;i--)
		{
			BEEP(BEEPON);
			LED1(ON);
			SysTick_Delay_250Ms();
			BEEP(BEEPOFF);
			LED1(OFF);
			SysTick_Delay_Ms(1000);
		}
		BEEP(BEEPON);
		LED1(ON);
		SysTick_Delay_Ms(1000);
		BEEP(BEEPOFF);
		LED1(OFF);
		i=4;
		SysTick_Delay_Ms(1000);
}
	
}
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32定时器的外部输入功能是用于计算外部信号的频率和脉宽的。 要使用外部输入功能,您需要在定时器模式寄存器(TIMx_SMCR)中启用外部时钟模式(ETP)。您还需要配置触发输入(TS)和滤波器(ETF)以满足您的应用程序的需求。 您还需要在外部输入控制寄存器(TIMx_ETCR)中配置外部输入的极性(ETP)和滤波器(ETF)。 最后,您需要在中断控制寄存器(TIMx_DIER)中启用输入捕获中断,然后在中断服务子程序(ISR)中处理输入捕获事件。 这是一个简单的例子,展示了如何配置TIM2的外部输入,以计算TIM2_CH1的脉宽: ``` // Enable TIM2 clock RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Enable external clock mode 1 (ETRMODE = 01) // Select the rising edge as active edge (SMS = 001) TIM2->SMCR |= TIM_SMCR_ECE | TIM_SMCR_ETPS_0; // Select TIM2_CH1 as the trigger input (TS = 100) // Enable the trigger filter (ETF = 1111) TIM2->SMCR &= ~TIM_SMCR_TS; TIM2->SMCR |= TIM_SMCR_TS_2; TIM2->SMCR |= TIM_SMCR_ETF_3; // Configure the external trigger polarity (ETP = 1) // Enable the external trigger filter (ETF = 1111) TIM2->ETCR &= ~TIM_ETCR_ETP; TIM2->ETCR |= TIM_ETCR_ETP; T ### 回答2: STM32定时器的外部输入可以通过GPIO引脚来连接外部信号源。在使用之前,需要进行一些配置。 首先,需要选择要使用的定时器通道,并将其配置为外部输入模式。可以通过CubeMX等工具或手动配置寄存器来实现。选择合适的GPIO引脚,并将其配置为外部中断模式。接下来,需要配置外部中断触发模式,可以选择上升沿、下降沿或双边沿触发。 在配置完成后,通过读取定时器的计数器值,可以获取外部信号的输入频率。可以使用定时器的计数模式来准确测量输入信号的参数,如频率、占空比等。 需要注意的是,外部输入信号的频率不能超过定时器的最大输入频率,否则会导致计数器溢出。如果输入信号频率过高,可以选择较低的定时器时钟频率,或者使用分频器来减小输入信号频率。 此外,还可以使用定时器的捕获功能来捕获输入信号的边沿触发时间,以实现更精确的测量。可以通过配置输入捕获模式、输入触发滤波器等参数来适应不同的外部信号特性。 总之,通过配置定时器的外部输入,可以实现对外部信号的测量、计数等功能。在使用时,需要根据实际应用需求进行相应的配置,并注意处理输入信号的频率和外部中断触发条件。 ### 回答3: STM32系列微控制器中的定时器外部输入可以通过配置定时器的工作模式和外部输入引脚来使用。 首先,我们需要选择一个合适的定时器,并确定它的工作模式。定时器可以选择多种模式,如基本定时器模式、通用定时器模式等。每种模式下,定时器的计数器和预分频器的位数和工作方式都有不同。 接下来,我们需要配置定时器的时钟源以及预分频器的分频系数。这可以通过设置相关的寄存器来实现。时钟源可以选择内部时钟,也可以选择外部时钟。预分频器的分频系数决定了定时器的计数速率。 然后,我们需要设置外部输入引脚,以使其连接到定时器。这可以通过修改GPIO端口的寄存器来实现。我们需要将外部输入引脚配置为定时器的输入模式,并选择合适的输入模式,如上升沿触发、下降沿触发或双边沿触发。 最后,我们可以通过读取定时器的计数器值来获得外部输入的触发时间。我们可以根据应用的需求,使用定时器的中断功能或轮询方式来处理外部输入的触发事件。 需要注意的是,在配置定时器的外部输入时,我们还需要配置相应的中断和DMA功能,以及其他可能需要的附加设置。 总之,STM32定时器的外部输入使用需要通过选择定时器的工作模式、配置时钟源和预分频器、设置外部输入引脚等步骤来实现。利用外部输入引脚可以使定时器更灵活地适应各种应用场景,实现更多功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值