STM32学习笔记-定时器中断

发布者:WhisperingWaves最新更新时间:2019-04-23 来源: eefocus关键字:STM32  定时器中断  库函数 手机看文章 扫描二维码
随时随地手机看文章

如果我们想要去每隔一段时间去做一件事,或者说特定的时间去做某件事,但是我们所有的精力不能放在计时上,我们有主要的事情要做,但是我们还必须每隔一段时间就要做另外一件事.我们就必须找一个可以计时的东西,它的工作就是每隔特定的时间告诉我们一声.这样,我们既可以做那个主要的事,每隔一段时间需要做的事也可以做,这个计时的东西就是定时器.


与配置io口类似,定时器的初始化也是给一个结构体变量赋值,把参数传送给初始化函数.


下面是定时器3初始化的一个例子


void tim3(void)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);                                           

    TIM_TimeBaseStructure.TIM_Period =1000-1;  

    TIM_TimeBaseStructure.TIM_Prescaler = 35999;                                    

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                              

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;               

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

    TIM_Cmd(TIM3,ENABLE);

}

TIM_TimeBaseInitTypeDef结构体变量类型名


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);打开apb1总线上的定时器3的时钟


TIM_TimeBaseStructure.TIM_Period =1000-1;分频系数(将主频分割)个人理解


TIM_TimeBaseStructure.TIM_Prescaler = 35999;计数溢出值(计数到这个值产生消息)个人理解


TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;时钟分频因子 不懂 默认0即可这个宏的值就是0


TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;计数模式 向上计数 其他计数模式见手册


TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);传入结构体地址,完成基本配置


TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);打开定时器3中断


TIM_Cmd(TIM3,ENABLE);使能定时器3


void tim3youxianji(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

中断优先级配置,与外部中断相同,将中断通道改为定时器3即可NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;


void TIM3_IRQHandler(void)

{

    .......;

    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

}

中断服务函数,每产生一次计时消息进入一次中断服务函数.


计时消息计算公式     计时频率=处理器主频/分频系数/计数溢出值  计时频率即进入中断的频率


关键字:STM32  定时器中断  库函数 引用地址:STM32学习笔记-定时器中断

上一篇:STM32学习笔记-配置串口,printf重定向
下一篇:STM32学习笔记-点亮第一个led

推荐阅读最新更新时间:2024-11-07 21:57

STM32的IIC库函数使用误区
HAL库里有很多的IIC的库函数,比如 HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t
[单片机]
<font color='red'>STM32</font>的IIC<font color='red'>库函数</font>使用误区
STM32模拟串口输出偶有乱码
因为芯片串口不够用,只好用IO口模拟串口,在网上下载了个模拟串口的程序,可运行,但发现串口输出隔几个字符就会出现乱码,主要部分代码如下: #define OI_TXD PAout(12) #define OI_RXD PAin(11) #define BuadRate_9600 100 u8 len = 0; //接收计数 u8 USART_buf ; //接收缓冲区 u8 recvStat = COM_STOP_BIT; u8 recvData = 0; void IO_TXD(u8 Data) { u8 i = 0; OI_TXD = 0;
[单片机]
STM32——简述USART与SPI、IIC之间的区别与联系
简述USART与SPI、IIC之间的区别与联系 第一个区别当然是名字: SPI(Serial Peripheral Interface) 串行外设接口 I2C(INTER IC BUS) 集成电路总线 USART(Universal Asynchronous Receiver Transmitter) 通用异步收发器 第二个区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。 SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信
[单片机]
STM32串口出现 ORE标志位的问题研究
测试环境,STM32L476, HAL库使用UART的时候,中断标志寄存器出现ORE错误,介绍如下: 代码错误原因: 1. 初始化串口,uart_USB_init();这个函数没有启动中断 2. 延时3000S,其中这个时候电脑有数据每隔50ms发给这个串口。 3. 启动中断接收。 HAL_NVIC_SetPriority(USART_IRQn, 5, 1); HAL_NVIC_EnableIRQ(USART_IRQn); 4. 出现ORE错误。 经过分析,可能2个原因,初始化串口之后,串口接收到数据(没处理),然后开中断又接收数据,所以两次接收中断和非中断处理有区别,也有可能是第一次非中断接收数据未处理。 解决办法:修改
[单片机]
<font color='red'>STM32</font>串口出现 ORE标志位的问题研究
基于STM32介绍DMA的双缓冲模式
目前STM32家族中有些系列支持DMA的双缓冲模式,比如STM32F2/STM32F4/STM32F7等系列。尤其随着人们对STM32F4/F7系列应用不断拓宽和加深,在设计中运用到DMA双缓冲的场合也越来越多。STM32芯片中的DMA又可分为两大类,一类是通用DMA,一类是专用DMA,比如用于USB,TFT LCD,ETHERNET等外设应用上的DMA。这里要谈的是基于通用DMA的话题,不妨以STM32F4系列芯片为例。 关于STM32F4的DMA双缓冲传输在STM32F4系列的参考手册里做了简单描述。因为它是基于介绍了单缓冲模式的DMA介绍之后接着介绍的,稍显言简意赅。 相比单缓冲的数据流,双缓冲多了一个DMA存储区和
[单片机]
基于<font color='red'>STM32</font>介绍DMA的双缓冲模式
STM32单片机ISP烧写
一般学生比较少遇到,但开始工作,进行软件开发时,会遇到各种“匪夷所思”的问题不过,慢慢积累就能对硬件、软件有一定了解,能让你很快的精通! 在使用stm32f103系列的mcu时,当时还在学校的时候用的jtag(盗版)烧写,对烧写引脚没有那么关注(反正能烧写就行)但是到了企业工作后,发现一般只使用4个引脚烧写——就是所谓的SWD模式只需要4根引脚(VCC、GND、SWCLK、SWDATA)之所以只留四个接口是因为可以将芯片做的更小,设备更小!并且有时候mcu的JTAG调试接口会被当成普通IO口来使用,因此就需要使用管脚复用功能,一旦复用,就要小心!!!当你把烧写接口复用后,能写进去,但是就不能再烧写了! 因此步入主题——IS
[单片机]
stm32控制lcd写字符,画线,汉字等
1、画直线算法 对于画直线,在lcd上由于显示的粒度问题,就区别到x,y轴上的步调问题。涉及到步调问题,就牵扯到,斜率问题。因此,画线算法就算将就完成了,还要注意相对于lcd来说,x,y轴又是什么一个方向。现实现一个比较粗略的画线算法。 void lcd_line(u16 x1,u16 y1,u16 x2,u16 y2,u16 Color) { u16 temp,x,y; Set_direction(0); if((x1 == x2) && (y1 == y2)) { //画原点 LCD_open_windows(x1,y1,1,1);
[单片机]
STM32 库函数处理 串口的例程
stm32使用库函数编写USART还是很方便的,现在转几个例子: 首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2Fusart%20code&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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