【stm-3】定时器定时中断定时器外部时钟

2024-05-08 04:12

本文主要是介绍【stm-3】定时器定时中断定时器外部时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.定时器定时中断

(1)main.c

#include "Device/Include/stm32f10x.h"   // Device header
#include "Delay.h"
#include "OLED.h"
#include "timer.h"
uint16_t Num;
int main(void)
{OLED_Init();Timer_Init();OLED_ShowString(1,1,"Num:");//OLED_Clear();while(1){OLED_ShowNum(1,5,Num,5);OLED_ShowNum(2,5,TIM_GetCounter(TIM2),5);}
}

(2)timer.c

#include "Device/Include/stm32f10x.h"   // Device header
extern uint16_t Num;
void Timer_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure;TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitstructure.TIM_Period=10000-1;//定时器周期,实际就是ARR的值。计10000个数TIM_TimeBaseInitstructure.TIM_Prescaler=14400-1;//7200-1;//PSC.72MHZ下7200分频TIM_TimeBaseInitstructure.TIM_RepetitionCounter=0;//重复计数器,高级控制寄存器专用寄存器位,这里不用设置TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitstructure);//初始化定时器TIM_ClearFlag(TIM2,TIM_FLAG_Update);//手动清除标志位TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启计数器中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitTypeDefstructure;NVIC_InitTypeDefstructure.NVIC_IRQChannel=TIM2_IRQn;//设置中断通道NVIC_InitTypeDefstructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitTypeDefstructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitTypeDefstructure.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitTypeDefstructure);TIM_Cmd(TIM2,ENABLE);//计数器使能
}
void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)//检查中断标志位{Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位}
}

(3)timer.h

#ifndef __TIMER_H
#define __TIMER_Hvoid Timer_Init(void);#endif

2.定时器外部时钟 

(1)timer.c 

#include "Device/Include/stm32f10x.h"   // Device header
extern uint16_t Num;
void Timer_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_Initstructure;GPIO_Initstructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Initstructure.GPIO_Pin=GPIO_Pin_0;GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_Initstructure);TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0x0F);//外部时钟->外部时钟模式2->不分频->高电平或者上升沿有效->TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure;TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up;//定时器计数方式TIM_TimeBaseInitstructure.TIM_Period=10-1;//定时器周期,实际就是ARR的值。计9个数TIM_TimeBaseInitstructure.TIM_Prescaler=2-1;//每遮挡一次,CNT值+1,加到9,上面num+1。TIM_TimeBaseInitstructure.TIM_RepetitionCounter=0;//重复计数器,高级控制寄存器专用寄存器位,这里不用设置TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitstructure);//初始化定时器TIM_ClearFlag(TIM2,TIM_FLAG_Update);//手动清除标志位TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启计数器中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitTypeDefstructure;NVIC_InitTypeDefstructure.NVIC_IRQChannel=TIM2_IRQn;//设置中断通道NVIC_InitTypeDefstructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitTypeDefstructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitTypeDefstructure.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitTypeDefstructure);TIM_Cmd(TIM2,ENABLE);//计数器使能
}
void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)//检查中断标志位{Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位}
}

这篇关于【stm-3】定时器定时中断定时器外部时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/969274

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

ActiveMQ—消息特性(延迟和定时消息投递)

ActiveMQ消息特性:延迟和定时消息投递(Delay and Schedule Message Delivery) 转自:http://blog.csdn.net/kimmking/article/details/8443872 有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。 类似

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定 时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机