首页 > 其他分享 >stm32c8t6的定时器中断

stm32c8t6的定时器中断

时间:2022-08-31 11:25:15浏览次数:64  
标签:count 定时器 HAL 中断 htim stm32c8t6 TIM PeriodElapsedCallback

采用的定时器为TIM3(TIM1TIM2已经被用于产生PWM波了),TIM3对应的是APB1 Timer clocks,时钟频率Tclk为72MHz。
image

溢出时间\(Tout = \frac{(arr + 1) * (psc + 1)}{Tclk}\)

image
本项目PSCarr如图所示,溢出时间为10ms,即10ms触发一次定时器中断。
定时器中断处理逻辑为(个人理解,如有不对请指正): TIM3_IRQHandler处理TIM3的所有中断,调用HAL_TIM_IRQHandler(&htim3),在HAL_TIM_IRQHandler(&htim)中,检测到是TIM Update event,清除TIM_FLAG_UPDATE标志位,调用HAL_TIM_PeriodElapsedCallback(htim)

stm32f1xx_hal_tim.c中,HAL_TIM_PeriodElapsedCallback(htim)定义如下,带__weak标识符,因此直接在main.c里面重新定义HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

// stm32f1xx_hal_tim.c
__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(htim);

  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_TIM_PeriodElapsedCallback could be implemented in the user file
   */
}

//main.c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
	//10ms for an timer interrupt
	time_count_it++;
	// 切换当已经清洗到泳池中心时,切换分母
	if (round_count > (zDominator[zDominator_index % 4] / 2)) {
		round_count = 1;
		zDominator_index++;
	}
	if (time_count_it > (time_wall2wall * round_count / zDominator[zDominator_index % 4])) {
		evt = evt_time_it;
		time_count_it = 0;
		HAL_TIM_Base_Stop_IT(&htim3);
	}

}

如果要在HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)里判断是哪个定时器触发的中断,添加

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  //添加回调后的程序逻辑 
        if (htim->Instance == htim3.Instance) //判断是否定时器2
        {

        }
		//或者
		if (htim == &htim3) {
		
		}
}

标签:count,定时器,HAL,中断,htim,stm32c8t6,TIM,PeriodElapsedCallback
From: https://www.cnblogs.com/zwyyy456/p/16642340.html

相关文章

  • python列题(定时器|搜索框)
    尝试编写JS时间案例 1.页面定时器案例 有一个input框两个按钮一个开始一个结束 1.点击开始按钮input内展示当前时间并按秒数刷新2.点击结......
  • stm32学习|cubemx配置通用定时器
    stm32学习|cubemx配置通用定时器使用cubemx配置定时器时,存在internalclock和ETR2,后面编程的时候一直没办在在中断函数中处理数据,最后发现应该选择internalclock.Clock......
  • 关于js中定时器的返回值问题
    在js中,我们常常会用到定时器来处理各种各样的问题,当我们需要清除定时器的时候,我们常常会定义一个值来接受定时器的返回值,然后再把定义好的这个值写到清除定时器的括弧后面......
  • jmeter-从入门到精通-定时器2
    什么是定时器?模拟用户思考的时间,,让性能测试更加逼真;JMeter中的定时器一般被我们用来设置延迟与同步。定时器的执行优先级高于Sampler(取样器),在同一作用域(例如控制器下)下有......
  • 通用定时器( TIM9 到 TIM14)
    4.2通用定时器(TIM9到TIM14)4.2.1实现PWM输出系统时钟配置定时器和PWM参数配置4.2.2代码实现cube软件自动生成的代码/*TIM11initfunction*/voidMX_TI......
  • 给网站添加pjax无刷新,换页音乐不中断
    自从博客加了悬浮音乐播放器后就一直在折腾换页音乐不中断的功能在网上查找后发现想要实现换页音乐不中断的功能必须要为博客加pjax,于是又苦苦寻找并尝试了一番最后发现......
  • 中断向量和中断向量表
    中断向量是操作系统引导boot时加载进内存的一段数据。本质上是一个数据表格,里面存放了各种不同类型的中断的入口地址。由于CPU随时都可能检测到中断信息,也就是说,CPU随时......
  • 用户态读取内核中断的方式
    1.内核态中实现poll接口使用poll_wait添加到队列中,用户态使用poll获取状态2.fasync异步信号,在内核中中断回调函数中实现fasync接口,fasync中fasync_helper和kill_fa......
  • 操作系统:中断和异常
    操作系统:中断和异常目录操作系统:中断和异常中断机制的诞生中断的概念和作用中段的分类内中断(也称为异常、例外、陷入)外中断(中断)外中断的处理过程中断机制的诞生​ 早期......
  • 不用定时器用接收超时做超时处理
    [原始代码]while(1){/*接收感兴趣的事件WRITE_EVENT,以永久等待方式去接收*/if(rt_event_recv(recvdata_event,WRITE_EVENT,RT_EVENT_FLAG_OR|RT_EV......