stm32f103 hal库中timer使用

2023-05-16

stm32f103 hal库中timer使用

  • 使用步骤
    • 1.初始化定时器
    • 2.HAL_TIM_Base_Init(&htim2)基本参数配置
    • 3.重写void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)函数
    • 4.中断函数的重写
    • 5.如果想用溢出回调
    • 6.启动定时器
    • 7.整个代码

使用步骤

1.初始化定时器


	tim.Instance 			= TIM2;
	tim.Init.Period 		= 1000-1;
	tim.Init.Prescaler 		= (uint32_t)((SystemCoreClock / 1000) - 1);
	tim.Init.ClockDivision		= 0;
	tim.Init.CounterMode		= TIM_COUNTERMODE_UP;
	tim.Init.RepetitionCounter	= 0;
	tim.Init.AutoReloadPreload	= TIM_AUTORELOAD_PRELOAD_DISABLE;

2.HAL_TIM_Base_Init(&htim2)基本参数配置

HAL_TIM_Base_Init(&htim2);

3.重写void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)函数

在函数中我们需要使能timer的时钟、设置固定中断优先级和中断使能(此函数在2.HAL_TIM_Base_Init中调用)
注意:打开对应的时钟使能,我用的是TIM2

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM2)
  {
    /* TIM2 clock enable */
    __HAL_RCC_TIM2_CLK_ENABLE();
    /* TIM2 interrupt Init */
   HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(TIM2_IRQn);
  }
}

4.中断函数的重写

void TIM2_IRQHandler(void)
{
	//自己想要做的事情,但是不能进入递归等函数,不要进行浮点运算!
	HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
	//结束自己要做的事情
  	HAL_TIM_IRQHandler(&tim);
}

5.如果想用溢出回调

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	/* 自己想要做的事情,与上面的要求一样 */
	//HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
}

6.启动定时器

编写到这里基本已经完成配置,接下来要启动定时器,定时器才能运行(不可以没有这一步)

HAL_TIM_Base_Start_IT(&tim);

7.整个代码

static TIM_HandleTypeDef	tim;

void TIM_Init(void)
{

	tim.Instance 				= TIM2;
	tim.Init.Period 			= 1000-1;
	tim.Init.Prescaler 			= (uint32_t)((SystemCoreClock / 1000) - 1);
	tim.Init.ClockDivision		= 0;
	tim.Init.CounterMode		= TIM_COUNTERMODE_UP;
	tim.Init.RepetitionCounter	= 0;
	tim.Init.AutoReloadPreload	= TIM_AUTORELOAD_PRELOAD_DISABLE;
	
	HAL_TIM_Base_Init(&tim);
	
	HAL_TIM_Base_Start_IT(&tim);
	
}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM2)
  {
  /* USER CODE BEGIN TIM2_MspInit 0 */

  /* USER CODE END TIM2_MspInit 0 */
    /* TIM2 clock enable */
    __HAL_RCC_TIM2_CLK_ENABLE();

    /* TIM2 interrupt Init */
   HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(TIM2_IRQn);
  /* USER CODE BEGIN TIM2_MspInit 1 */
  /* USER CODE END TIM2_MspInit 1 */
  }
}

void TIM2_IRQHandler(void)
{
	
	HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
  HAL_TIM_IRQHandler(&tim);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	/* Toggle LED3 */
	//GpioToggle(&Led_tx);
	//HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32f103 hal库中timer使用 的相关文章

  • 如何在 tkinter 中给定时间后运行函数?

    所以我在 tkinter 的画布上有一张 gif 图片 我想让这张照片变成另一张照片 但只持续三秒钟 并将其恢复到原始图片 def startTurn self newgif PhotoImage file 2h gif self left
  • Websphere Liberty Profile 中的 Java EE-Timer / @Schedule

    我想使用计时器服务 特别是 Schedule注解 http docs oracle com javaee 6 api javax ejb Schedule html 在 WebSphere Liberty Profile 中 那可能吗 有一
  • 如何实现带进度条的闪屏? - 安卓

    我在启动时有一个闪屏 与以下编码 public class Splash extends Activity Override protected void onCreate Bundle savedInstanceState TODO Au
  • 如何更改 actionPerformed() 内的 Swing Timer Delay

    所以我正在构建这个音乐播放器应用程序 它可以播放拖放到 JLabel 上的音符 当我按下播放按钮时 我希望每个音符都突出显示 并带有与该音符对应的延迟值 我为此使用了 Swing Timer 但问题是 它只是以构造函数中指定的恒定延迟循环
  • 如果前一个线程仍然繁忙,如何让计时器跳过刻度

    我创建了一个 Windows 服务 该服务应该每 60 秒检查数据库中的某个表是否有新行 对于添加的每个新行 我都需要在服务器上进行一些繁重的处理 有时可能需要 60 秒以上的时间 我在服务中创建了一个 Timer 对象 该对象每 60 秒
  • JSP/Servlet 中的倒计时器

    我正在使用 servlet jsp 开发在线考试 我需要在问题页面添加一个倒计时 hh mm ss 计时器 该计时器将结束考试并重定向到结果页面 除了计时器功能之外 我已经完成了所有其他功能 有人可以为此提供一些帮助吗 Thanks 您是否
  • iOS 中屏幕关闭/设备锁定时定时器不运行

    应用程序位于后台 在与 BLE 设备断开连接时会收到回调 之后应用程序必须等待一段时间 1 分钟 然后执行一些代码 如果屏幕打开 即使在后台 应用程序也会按预期运行 但是 如果屏幕关闭 则计时器将无法工作 并且应用程序不会按预期执行 这是
  • .net 计时器有多可靠?

    我正在考虑在 Windows 服务中使用 System Timers Timer 我想知道它们的可靠性和准确性如何 尤其 对于它们的运行频率有任何保证吗 当处理器或内存过载时会发生什么 在这种情况下 ElapsedEventArgs Sig
  • 如何创建批处理文件计时器来全天执行/调用另一个批处理

    如何创建一个批处理文件计时器来在一天中执行 调用另一个批处理 也许在给定的时间运行但不在周末运行 必须在系统上运行也可以 cmd在xp server 2003上运行 对于脚本的计时器部分 我强烈建议使用 echo echo Waiting
  • Android:在调用函数之前实现 1 秒间隔定时器

    我试图在重置游戏 resetGame 之前引入 1 秒暂停 按下按钮后 bAnswer1 文本等于 ansewrArray 0 应用程序强制在 newQuestionTimer 中设置的 1 秒延迟后关闭 import java util
  • Silverlight 中的计时器

    除了System Threading Timer对象之外 还有其他可以在Silverlight中使用的Timer对象吗 查看 DispatcherTimer http msdn microsoft com en us library sys
  • 如何清除ID未知的Interval?

    假设有人 邪恶 给我们设置了一个计时器setInterval 但我们不知道它的 ID 我们没有 setInterval 返回的对象的引用 也没有它的值 function setInterval function console log pw
  • 如何在Android中制作倒计时器?

    我有两个 XML 格式的 EditText 在一个 EditText 中 用户可以输入一个数字作为分钟 在另一个 EditText 中输入一个数字作为秒 单击完成按钮后 EditText 应该开始倒计时并每秒更新其文本 此外 我怎样才能保持
  • 更好的 boost asio Deadline_timer 示例

    我正在寻找一个更好的例子boost asio deadline timer 给出的例子总是会超时并调用close方法 我尝试打电话cancel 在计时器上但这会导致函数传递到async wait立即被呼叫 在异步 tcp 客户端中使用计时器
  • Python sched.scheduler 超过最大递归深度

    我最近开始学习 Python 我正在制作的简单应用程序的一部分包括一个在其自己的线程中运行的带有 hh mm ss 显示的计时器 环顾网络 我发现了两种实现此目的的方法 使用 sched scheduler 使用threading Time
  • 如果 TimerTask 的执行时间超过指定的时间间隔,会发生什么情况?

    使用时 Timer schedule TimerTask task long delay long period 即固定延迟执行 如果指定的情况会发生什么TimerTask s run 方法花费的时间长于period去完成 两个并发有可能吗
  • 计时器、事件和垃圾收集:我错过了什么吗?

    考虑以下代码 class TestTimerGC Form public TestTimerGC Button btnGC new Button btnGC Text GC btnGC Click sender e gt GC Collec
  • Android:如何在触摸事件中手动实现长按?

    简短版本 我想要一种方法来在 onTouchEvent 上启动基于时间的计数器 并测试在响应之前是否已经过了一定的时间 作为手动 LongTouch 检测 解释 我有一个自定义 imageView 可以通过两根手指滑动滑入 滑出屏幕 我想向
  • 如何实现urllib2.urlopen的超时控制

    如何在Python中实现对urllib2 urlopen的控制 我只是想监控如果5秒内没有xml数据返回 则切断此连接并重新连接 我应该使用一些计时器吗 谢谢 urllib2 urlopen http www example com tim
  • Android相当于javascript的setTimeout和clearTimeout?

    setTimeout 有一个答案https stackoverflow com a 18381353 433570 https stackoverflow com a 18381353 433570 它没有提供我们是否可以像在 JavaSc

随机推荐