STM32 定时器中断函数

发布者:码梦创想最新更新时间:2018-12-24 来源: eefocus关键字:STM32  定时器  中断函数 手机看文章 扫描二维码
随时随地手机看文章

#include"timer.h"

#include"led.h"

//晶振是8MHZ,默认CPU是9倍频,

//通用定时器 3 中断初始化

//这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M

// SYSCLK:72M

//    AHB:72M

//   APB1(PCLK1):36M

 //  APB2(PCLK2):72M

//    PLL:72M

//arr:自动重装值。

//psc:时钟预分频数

//这里使用的是定时器 3

//定时器溢出时间计算方式Tout=((arr+1)*(psc+1))/Ftus.

voidTIM3_Int_Init(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDefNVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //①时钟 TIM3 使能

//定时器 TIM3 初始化

TIM_TimeBaseStructure.TIM_Period= arr; //设置自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler=psc; //设置时钟频率除数的预分频值  TIM_Prescaler是预分频值,它与TIM_Period(重载周期值)的乘积即为计数的总值。

TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1; //设置时钟分割

199

TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; //TIM 向上计数

//TIM_RepetitionCounter为PWM( 脉冲宽度调制)的设定参数,一般定时器不用设置



TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);  //②初始化 TIM3

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);  //③允许更新中断 设置中断的类型,一般的定时器为更新中断,即由溢出事件产生的中断,设置的方式为:TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE),其中第一项是定时器代号,第二项为类型,这里设定为更新方式,第三项为使能。

//中断优先级 NVIC 设置

NVIC_InitStructure.NVIC_IRQChannel= TIM3_IRQn;  //TIM3 中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0; //先占优先级 0 级

NVIC_InitStructure.NVIC_IRQChannelSubPriority= 3;  //从优先级 3 级

NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;  //IRQ 通道被使能、

//有两种优先级:

//)抢占式优先级,库函数设置为NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=x(x为0~15,具体要看下面的优先级组别的选择);

//)响应优先级,库函数设置为NVIC_InitStructure.NVIC_IRQChannelSubPriority =x(x为0~15,具体要看下面的优先级组别的选择);

NVIC_Init(&NVIC_InitStructure);   //④初始化 NVIC 寄存器

TIM_Cmd(TIM3,ENABLE);  //⑤使能 TIM3

}

//定时器 3 中断服务程序⑥

voidTIM3_IRQHandler(void) //TIM3 中断 IRQ是中断请求的简称 指的中断入口地址

{

if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查 TIM3 更新中断发生与否 捕获中断还是更新中断就用这判断

{

TIM_ClearITPendingBit(TIM3,TIM_IT_Update ); //清除 TIM3 更新中断标志

LED1=!LED1;

}


关键字:STM32  定时器  中断函数 引用地址:STM32 定时器中断函数

上一篇:单片机在中断函数里定时器是否还计数问题
下一篇:stm32F407的Systick的问题

推荐阅读最新更新时间:2024-03-16 16:21

STM32 USB HID 自定义设备 bulk 传输
ST(意法半导体公司)为STM32系列处理器编写了外设USB的库,并提供了很好的参考例程,本文就是参考ST提供的例程,在STM32F4 discovery板子上实现usb bulk传输。Host端是在linux平台上利用libusb库函数写的读写USB应用。 本次实现在STM32 USB例程中的Device HID 鼠标例程基础上添加bulk传输端点修改而来。 usb_conf.h 文件中添加 bulk传输端点 /* * endpoint 0x80 and 0x00 are used for enumerating device. * endpoint 0x81 and 0x80 are used for cont
[单片机]
STM 32 之can 实例+代码解析
#include sysdef.h #define MAX_MAIL_NUM 3 //CAN总线调试:0=运行 1=自环调试 #define CAN_DEBUG 0 //CAN总线波特率:0=250kbps,1=500kbps,2=1Mbps #define CAN1_BPS 0 unsigned char can1_addr = 0; unsigned short Can1_Tx_Count =0; unsigned short Can1_Rx_Count =0; unsigned short Can1_Send_Delay =0; unsigned char Ca
[单片机]
STM32函数和寄存器操作的思考
从开始接触51单片机,到现在开始转型学习功能更加强大的STM32f407系列, 学习过程中引入了库函数及相应操作,当时赶着进度做点东西出来,有点不求甚解。现在返回来求索:相比于原来51单片机的寄存器,32系列的寄存器无论是个数还是实现功能时多个寄存器之间的调用配合,使用难度都高了不少,所以有了库函数和相应的固件库来减少难度。 先说一下固件库(这个我们最开始安装完MDK缺了它总是各种报错的东西)和相应库函数: 固件库这边时首先将各个设备所有寄存器的配置字进行预定义,然后封装在结构体或者枚举变量中,等到用户调用相关库函数时,会根据用户传入的参数从这些已经封装好的结构体或者枚举变量中取出与之对应的配置字,最后写入相应寄存器中完成对底层寄
[单片机]
STM32 ST-LINK Utility安装及使用
TM32 ST-LINK Utility集成开发环境的安装比较简单(基本上就是一路Next下去)。还是按照常规安装教程(截图)讲述一下吧,以上面下载的“STM32 ST-LINK Utility v4.0.0 setup.exe”软件为例讲述。 1.解压软件,双击“STM32 ST-LINK Utility v4.0.0.exe”,进入准备安装(解压)过程。 2.进入安装向导,点击“Next”。 3.同意许可,点击“Yes”。 4.选择安装路径(这里默认),点击“Next”。 5.进入安装过程,不到一分钟时间。 6.安装最后提示“安装驱动”,点击“下一步”,最后点击“完成”安装完成。 7.点击“F
[单片机]
<font color='red'>STM32</font> ST-LINK Utility安装及使用
stm32使用systick精确延时
利用系统滴答定时器来实现精确延时,需要以下五步: 1、设置滴答定时器的时钟,通过设置其控制寄存器,选择外部时钟,即为系统时钟的八分之一,若系统时钟为72M,则滴答定时器时钟为9M。即定时一秒需要9M个时钟周期。 2、设置滴答定时器的重装载寄存器的数值,即需要延时的时钟周期数。如:若需要延时20微秒,则重装载值为20*9.若要延时20毫秒,则设置重装载值为20*9000. 3、清空滴答定时器当前值寄存器的值,使之为零,以便使能计数时能够从设定值开始倒数计时。 4、设置滴答定时器的控制寄存器,开始倒计数。 5、查询滴答定时器的状态位,定时时间到,关闭定时器,清空定时器当前值。 void delay_init(u8 SYSCLK) {
[单片机]
STM32 FSMC接口驱动TFT-LCD设计
0 引言 随着电子产品的不断更新,各种显示界面的开发越来越多,由于TFT彩屏的性价比高,因而被广泛用在各种电子设备上作为显示屏。目前驱动TFT彩屏的方案有很多,可以用底端单片机驱动一个终端类型的液晶模组,这种模组价格比较贵,当然用起来还是很方便的。 只要单片机通过串口或并行口向TFT发送几个字节的命令,就能在屏幕上显示你需要的效果。本设计利用STM32 的FSMC 总线直接驱动TFT 数字彩屏。这种方案对相应的寄存器进行配置后就可以自动向TFT数字彩屏发送数据,无需CPU参与,让CPU有足够时间来处理其他程序。 1 STM32 简介 STM32 是基于ARM 内核Cortex-M3 的32 位微控制器系列。Cortex-M3
[单片机]
<font color='red'>STM32</font> FSMC接口驱动TFT-LCD设计
STM32如何收发float类型数据?
在之前文章里提到了共用体用来传输浮点数的用法,但那篇笔记中没有详细介绍,这篇笔记我们一起来看一看具体实例。 实际应用中,我们可能需要两个设备通过串口传输浮点数据: 本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下: 我们创建一个用于管理float类型数据的共用体: unionfloat_data { floatf_data; uint8_tbyte ; }; 数据的流向如: 本次使用串口助手模拟发送设备,省略了第一步,主要看第②、③步。 创建两个共用体变量,用于发送与接收: unionfloat_datarx_float_data,tx_float_data; 收发相关代码: 左
[单片机]
<font color='red'>STM32</font>如何收发float类型数据?
MSP430 basic timer 基本定时器中断时间的计算
最近做用430结果被BT定时器折腾了。BT定时器和以前接触过的AVR的普通定时器不太一样。以前的定时器都是计数到FF然后产生溢出中断。而BT定时器不一样。 BT定时器是在相应的选择位产生进位的情况下产生中断的。比如说,如果我们选中BTIPx为001的话,那么BTCNT2中的数据为 0x00,0x01,0x02,0x03然后在0X04的时候,也就是在Q1向Q2进位的时候产生中断。而且不管高位的数据,这个例子中Q3-Q7中的数据没有任何影响。
[单片机]
MSP430 basic timer 基本<font color='red'>定时器</font><font color='red'>中断</font>时间的计算
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved