STM32定时器中断设置方法

发布者:游走人间最新更新时间:2016-10-08 来源: eefocus关键字:STM32  定时器  中断设置 手机看文章 扫描二维码
随时随地手机看文章

今天调试了STM32的定时器功能,STM32定时器比较多,但调试都是一样的,寄存器都是一一对应的。就拿TIM2举例说明。在网上搜了好多关于定时器的设置,但大多数都是一个版本,而且都是针对库函数操作的,让人看起来一头雾水,对于初学者很是不利(我也是初学者)。下面我将自己的定时器设置过程一一记录下来,以供大家参考,我们共同学习……

首先定义定时器头文件,也就是定义寄存器以供操作:

//*************************************************************************

//

// TIM2-Register

//

//*************************************************************************

#define TIM2_CR1 (*((volatile unsigned long *)0x40000000))

#define TIM2_CR2 (*((volatile unsigned long *)0x40000004))

#define TIM2_DIER (*((volatile unsigned long *)0x4000000C))

#define TIM2_SR (*((volatile unsigned long *)0x40000010))

#define TIM2_EGR (*((volatile unsigned long *)0x40000014))

#define TIM2_CNT (*((volatile unsigned long *)0x40000024))

#define TIM2_PSC (*((volatile unsigned long *)0x40000028))

#define TIM2_ARR (*((volatile unsigned long *)0x4000002C))

 

 

然后配置定时器TIM2:

void TIM2_Configuration(void)

{

RCC_APB1ENR|=0x00000001; //位0 IM2EN TIM2定时器时钟使能

TIM2_PSC |=19999; //设置预分频,实现1ms,20M ,20000/20M

TIM2_ARR = 1000; //1s产生一次中断

TIM2_DIER |=0X1; //允许tim2更新中断

SETENA0|=0x10000000; //允许T2中断

TIM2_CR1 |=0X1;//启动tim2相当于//TIM_Cmd(TIM2, ENABLE); //是能定时器

}

注:RCC_APB1ENR,SETENA0前面的文章已经定义过

中断函数处理:

void TIM2_IRQHandler(void)

{

if(TIM1_SR&0x01)

{

TIM1_SR&=0xFFFE; //清中断标志

USART1_DR=0xAA;

while((USART1_SR)&0x80==0);

}

解释:1S中断来一次,向串口发送一字节数据0xAA;

接下来就在main()函数中添加配置定时器就可以了:

 

 

 

 

int main()

{

 

 

SystemInit0(); //系统(时钟)初始化

stm32_GpioSetup (); //GPIO初始化

stm32_UsartSetup (); //串口初始化

TIM2_Configuration(); //TIM1初始化

while(1)

{

GPIO_PORTB_ODR|=(1<<5); //LED闪烁

delay(10); //延时

GPIO_PORTB_ODR&=~(1<<5);

delay(10);

}

}

当然以上TIM2的配置必须在系统(时钟)初始化以后,因为这些外设的工作要有时钟来源的,知道了时钟来源,和频率才能计算出定时的时间等参数,本程序是基于所有时钟都设置成20M来执行的。前面的几个初始化函数以及寄存器设置都是调用的前面文章中设置好的。

好了,查看串口(9600),调试成功,1S发送1个0xAA,这样看起来是很简单,但调试的过程是艰难的,要一次次的实验,一个寄存器一个寄存器的进行配置,学习本来就是一个缓慢而且艰辛的过程,但是当你看到LED在闪烁,串口上收到数据时,说有的付出都是值得的,天道酬勤,一切困难都是纸老虎!

关键字:STM32  定时器  中断设置 引用地址:STM32定时器中断设置方法

上一篇:STM32 模拟IIC协议驱动TEA5767
下一篇:STM32中断式发送特点和RS485方向控制

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

STM32 I2C硬件的结构
引子 STM32的硬件I2C很多人都对它望而却步。因为很多电工都说,STM32 硬件 I2C有BUG、不稳定、死机等等……最后都使用GPIO模拟I2C。 的确,模拟I2C好用。但是在我看来在一个72M的Cortex-M3的MCU上这样做非常不妥。一般来说I2C是一种慢速总线,就算工作在400kHz的快速模式上,I2C传送每个字节仍需要至少23us——还没有计算地址、起始信号和结束信号的发送。如果使用GPIO模拟的I2C,这23us的CPU时间都在空转中浪费了,而这23us已经可以做不少的事情了,所以在STM32上I2C还是使用硬件为佳——虽然它多多少少有点缺陷。 这篇文章不是给完全没有接触过STM32 硬件I2C的新手看的
[单片机]
<font color='red'>STM32</font> I2C硬件的结构
简要描述下STM32 定时器对正交编码器进行计数控制的方法
如图,STM32的每个TIMER都有正交编码器输入接口,TI1,TI2经过输入滤波,边沿检测产生TI1FP1,TI2FP2接到编码器模块,通过配置编码器的工作模式,即可以对编码器进行正向/反向计数。 如下图,编码器使用了A,B两相信号,但是我只需要对TI1信号进行计数(第一行),我也是刚发现了这个错误,原来对两个信号都计数,导致码盘转一周得到不止100个脉冲(100线的光电码盘)。通过STM32的编码器模块比较两想的电平信号就可以很容易地计算出编码器的运行情况了。 下面是我调试OK的代码: void Encoder_Configration(void) { GPIO_InitTypeDef GPIO_Ini
[单片机]
简要描述下<font color='red'>STM32</font> <font color='red'>定时器</font>对正交编码器进行计数控制的方法
STM32F103的11个定时器详解
STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器 2个基本定时器 2个看门狗定时器 1个系统嘀嗒定时器 出去看门狗定时器和系统滴答定时器的八个定时器列表; iframe id="iframe_0.8220791406929493" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://c.51hei.com/a/a/c/511106452728228.jpg?_=6233213%22%20style=%2
[单片机]
STM32F103的11个<font color='red'>定时器</font>详解
STM32外部中断详解
一、基本概念 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5组 第0组:所有4bit用于指定响应优先级; 第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级; 第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级; 第3组
[单片机]
使用JTAG连接STM32 SWD模式 (STM32L011为例)
使用JLINK的JTAG接口连接STM32的SWD模式 近期使用STM32L011做产品,第一次接触SWD模式,之前都是使用JTAG接口进行下载仿真。初次使用,问题多多。现在将我遇到的问题,和解决办法贴出来,希望能够帮到后来人。 使用的软件 Keil 5 硬件芯片 STM32L011F4P6 连接器 J-LINK V9 1:KEIL 设置 这个比较简单,在DEBUG选项,选择使用J-LINK 然后点击settings,将port由JTAG 改为SW 如果连接成功,则会在SW Device栏显示信息。 2:连线 在使用JTAG连接SWD时,比较茫然,网上搜索一番,得到信息是JTAG完全胜任SW
[单片机]
使用JTAG连接<font color='red'>STM32</font> SWD模式 (STM32L011为例)
STM32微控制器SPI接口NSS管理分析
看了很多关于NSS片选信号配置的资料,感觉没有说清楚的,自己写了一些个人的看法,希望对大家有用。 首先看我们看下NSS的结构图,如下。 从上图中我们可以看出左边的NSS代表硬件的引脚,右边的internalnss是内部NSS,微处理器根据这个内部的NSS来确定不同的操作。 和NSS相关的寄存器标志位主要是SSM、SSI以及SSOE。SSM用来配置是硬件模式还是软件模式。SSI用来确定在软件模式下NSS输入的极性,SSOE用来决定是否允许内部NSS信号送出的NSS引脚上。 对NSS的管理有硬件模式和软件模式之分,所谓硬件模式(SSM=0,二选一处0端有效),就是内部NSS的信号来自于外部NSS引脚,是确确实实的硬东西(引脚)
[单片机]
<font color='red'>STM32</font>微控制器SPI接口NSS管理分析
stm32串口通信程序之UART2(TTL)
一、硬件连接 二、串口助手设置: 三、keil下编程 1.要添加的工程文件 二要编写的user文件 1.main.c #include printf.h int main() { printf_init(); printf( \luoyiran is a nice boy\n ); printf( xixi\n ); printf( serial communications is so mystical and interesting!\n ); printf( keep striving!\n ); } 2.printf
[单片机]
<font color='red'>stm32</font>串口通信程序之UART2(TTL)
STM32单片机FSMC模块的应用
一、基本概念 1.与非总线复用的16位SRAM接口 FSMC配置 SRAM存储器和NOR闪存存储器共用相同的FSMC存储块,所用的协议依不同的存储器类型而有所不同。 控制SRAM存储器,FSMC应该具有下述功能: 使用或禁止地址/数据总线的复用功能。 选择所用的存储器类型:NOR闪存、SRAM或PSRAM。 定义外部存储器的数据总线宽度:8或16位。 使用或关闭扩展模式:扩展模式用于访问那些具有不同读写操作时序的存储器。 正如配置NOR闪存存储器一样,用户必须按照SRAM存储器的数据手册给出的时序数据,计算和设置下列参数: ADDSET:地址建立时间 ADDHOLD:地址保持时间 DATAST:数据建立时间 二、例程 1.
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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