当前位置: 首页 > news >正文

小实验--定时器中断点灯

定时器中断点灯

1.HAL_TIM_Base_Init()
在这里插入图片描述

这个函数的参数有一个TIM_HandleTypeDef的结构体
下图就是这个结构体中的参数在这里插入图片描述
在这些参数里面我们只需要用第一个和第二个 Instance和Init。
第一个参数Instance就是我们要用到的定时器的地址。
第二个参数Init也是一个结构体
在这里插入图片描述
第一个Prescaler就是PSC,Period就是ARR,CoounterMode就是计数的模式,ClockDivision和RepetitionCounter是在高级定时器中使用,目前用不到。
AutoReloadPreload就是设置用不用自动重装载预装载(影子寄存器)
下图是CoounterMode中可选的值
在这里插入图片描述
第一个是向上计数,第二个是向下计数,第三个四个五个是中央对齐计数
下图是AutoReloadPreload中可选的值
在这里插入图片描述

2.HAL_TIM_Base_MspInit()
在这里插入图片描述

这个是msp函数,也是传进去一个TIM_HandleTypeDef的句柄
我们在这个函数中初始化NVIC和CLOCK

3.HAL_TIM_Base_Start_IT()
在这里插入图片描述

这个函数的作用是使能更新中断和启动定时器,也是传进去一个TIM_HandleTypeDef的句柄

4.HAL_TIM_IRQHandler()
在这里插入图片描述

这个函数是中断服务函数中要调用的函数,也是传进去一个TIM_HandleTypeDef的句柄,这个函数里面调用了很多回调函数,通过各种判断来确定要使用哪一个回调函数,然后我们要用的是更新中断回调函数HAL_TIM_PeriodElapsedCallback()

5.HAL_TIM_PeriodElapsedCallback
在这里插入图片描述

这个函数是更新中断回调函数,也是传进去一个TIM_HandleTypeDef的句柄,我们可以在这里面写内容。

代码
1.timer.c

#include "timer.h"
#include "led.h"
TIM_HandleTypeDef timer_handle = {0};       //这个结构体在msp函数,中断服务函数,更新中断回调函数都会用到//所以定义为了全局变量,赋初值为0.//定时器初始化函数
void timer_init(uint16_t arr,uint16_t psc)  //将arr和psc写为形参在main函数中就可以修改arr和psc的值
{timer_handle.Instance = TIM2;                              /*在TIM_HandleTypeDef结构体中只用到Instance,和Init其中Instance的作用是选择使用那个定时器Init是写PSC的值和ARR的值*/timer_handle.Init.Prescaler = psc;                         //Init中的Prescaler就是PSCtimer_handle.Init.Period = arr;                            //Init中的Period就是ARRtimer_handle.Init.CounterMode = TIM_COUNTERMODE_UP;        //Init中的CounterMode就是计数模式(上升,下降,中央对齐)timer_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;                    //Init中的AutoReloadPreload就是设置自动重装载HAL_TIM_Base_Init(&timer_handle);HAL_TIM_Base_Start_IT(&timer_handle);                      //使能更新中断函数,启动定时器
}//msp函数,这个函数是在HAL_TIM_Base_Init函数中自动被调用的。
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{/*先要判断一下是不是用到了TIM2定时器,因为各种定时器都会调用HAL_TIM_Base_MspInit这个函数*/if(htim->Instance == TIM2){__HAL_RCC_TIM2_CLK_ENABLE();            //开启TIM2定时器的时钟,这个函数可以在hal_rcc函数中找到HAL_NVIC_SetPriority(TIM2_IRQn,2,2);    //设置中断优先级HAL_NVIC_EnableIRQ(TIM2_IRQn);          //使能中断}
}//中断服务函数
void TIM2_IRQHandler(void)
{HAL_TIM_IRQHandler(&timer_handle);      //公共处理函数
}//更新中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM2){led1_toggle();}
}

2.main.c

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "timer.h"int main(void)
{HAL_Init();                         /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init();timer_init(5000 - 1,7200 - 1);while(1){ }
}
http://www.dtcms.com/a/590866.html

相关文章:

  • 永久免费自助建站系统广东省路桥建设有限公司网站
  • 天然气公司的网站应该怎么做手机h5页面制作软件
  • 公司网站可以分两个域名做吗深圳网站建设网页制作
  • server 2008 网站部署国外网站排名前十
  • 高端网站设计杭州重庆网站开发哪家好
  • 北京南站地铁华为官方网站手机商城
  • 禁止wordpress网站上传图片时自动生成三张图片方法淘宝搜索关键词查询工具
  • 域名备案好了怎么建设网站养老院网站建设的好处
  • wordpress如何搬站在网站建设中什么用于搭建页面结构
  • 时彩网站开发亿网站手机源码
  • php用什么做网站服务器全国企业信息管理系统
  • 算法竞赛中的vector和静态数组
  • 网站宣传海报图片哎呀哎呀视频在线观看
  • 重庆大足网站建设珠海网页模板建站
  • 网站建设的流程范文1500字网站代维护
  • 普陀营销型网站建设wordpress连接mysql8
  • 怎么看网站开发的好坏个人信息展示html模板
  • 网站建设有哪些软件有哪些内容常州网站建设咨询
  • 手机网站模版更换技巧wordpress的文件说明
  • 连云港建设部网站济宁网站开发
  • 中国建设银行黑龙江支行官方网站桂林市区面积
  • 崇州网站建站iis默认网站无法访问
  • 代码随想录-day30
  • 扬州整站seo镇平哪家网站做的好
  • 建设银行的官方网站电话wordpress 建站 教程视频
  • 大庆医院网站建设方案企云网站建设
  • 厦门市建设局网站网络培训心得体会1000字
  • 杭州高端网站建设排名邯郸信息港发布信息
  • 佛山商城网站建设wordpress标题重复
  • 常州企业网站建设公司做网站怎么做多少钱