stm32打怪升级之瞥眼定时器

定时器TIM------->DMA
(不用看功能直接忽略介绍)

外部中断得开启复用功能

定时器TIM)
时钟源:stm32时钟系统框图(需要下载)
外部中断得开启复用功能
实验目的:定时1s让灯亮
库:定时用到了stm3210x_tim.h库
模版:工程模版+TIM3_IRQHandler模版

流程
1.复制工程模版
2.打开工程模版在app中新建文件定时器
3.新建time.h和time.c文件添加至app定时器中
4.在time.h文件中写入声明voidtime_init
(void),且修改#define _TIME_H
5.在time.c文件中#include “time.h”,
6.在app中添加time.c中文件
7.在option中的c/c++中包含定时器路径
8.由于使用定时器使用了stm32f10x_tim.h库,所以在存放所用库fwilb中添加stm32f10x_tim.h,并且在公共函数库public中添加#include "stm3210x_tim.h"
9.开始在time.h中编写time_init()函数(查阅固件库中文手册)
10.编写完毕后,在stmf10x_it.h文件中编写定时器中断函数void TIM3_IRQHandler(),没有声明需要在.h中进行声明
11.编写主函数
注意:
1.我们用到了定时器,必须在此工程使用的头文件fwilb中添加此头文件
而且得把这个头文件添加到公共头文件里面,不然会报错
.\output\工程模板.axf: Error: L6218E: Undefined symbol TIM_TimeBaseInit (referred from time.o).
2.每次编写中断函数的时候,必须先进行擦除操作,即 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

以下是time_init()模版代码

 1 void time_init(void)
 2 {
 3     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;  //定时结构体
 4
 5     NVIC_InitTypeDef NVIC_InitStructure;                 //中断结构体
 6
 7     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  //系统时钟,注意APB1和TIM3的关系
 8
 9     TIM_ClearITPendingBit(TIM3,TIM_IT_Update);        //清除之前的中断数据,必须用,包括写中断函数的时候
10     TIM_TimeBaseInitStructure.TIM_Period = 2000;    
11     TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;         #计算定时时间=TIM_Period\72M\TIM_Prescaler+1
12   TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; //是否时钟分割 

13   TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数模式14   TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); 

15   TIM_Cmd(TIM3,ENABLE);                 //使能16 17   TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );  //设置中断参数TIM318 19 20   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置NVIC参数,注意groop_1

21   NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;   //全局中断设置

22   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; 配对groop_1

23   NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; 

24   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能

25   NVIC_Init(&NVIC_InitStructure); 

26 }

打下划线的是根据自己需求而改的

思路:定时1s的流水灯,需要使用定时器,所以使用tim.h库,通过配置time_init(计算定时时间=TIM_Period\72M\TIM_Prescaler+1)定时1s,编写中断函数void TIM3_IRQHandler()对灯进行控制

可能对TIM3和APBx有疑问,在stm32时钟分配图中有介绍

TIM1/8---->APB2    TIM2-7-------->APB1

这也可以在库中可以找到

stm32f10x.h  ,

类似于结构体可以搜索InitStructure找到相关结构体写法,然后使用go to definition直接找到结构体里面的参数

时间: 2024-10-13 16:06:41

stm32打怪升级之瞥眼定时器的相关文章

stm32打怪升级之不要碰中断

stm32中断概念:单片机cpu在执行当前程序的时候,由于外界出现外界请求或内部请求,使cpu暂停正在执行的程序而去处理相应的请求程序,当程序运行完毕后,cpu再来执行原先被暂停的程序,这个过程就是中断.又由于在处理请求程序过程中,可能被其他更高级或者低级的外界请求干扰,这时候就要判断优先级,先处理哪个请求程序,这个就是中断优先级.中断优先级分为抢占优先级和响应优先级,规则是:抢占优先级高可以中断抢占优先级低的中断函数,相同抢占之间不能相互中断,而响应优先级则看一下中断表里的排位顺序. 在使用中

三分之一的程序猿之创业组队与打怪升级

历史       历史是惊人的相似,曾几何时我还是大学网吧中众多逃课来玩游戏的其中一个. 我做事的是风格是疯狂,不到南墙不回头的风格.只在我迷上了<魔兽世界>是暴雪出品的一款MMORPG类经典游戏,即大型多人在线角色扮演游戏.进入大学后,松散的大学风格一下让自己反复来到了自由的天堂.我的定位是一位PVP玩家,在我还是菜鸟的时候,我需要做的就是寻找一个队伍进入竞技场. 70级版本,要想进入竞技场首先要做的第一件事情就是找人签名.也就意味着需要找到分工明确的5个人组成一个队伍,我当队长. 我70级

SDUT oj 3005 打怪升级(记忆化搜索)

比赛的时候一直在纠结乘2的数目很大怎么办,数组开不开啊...后来才发现自己傻了啊,那个数目最大不会超过10啊,这个力量上限是100啊.... 其他的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要用上. 打怪升级 Time Limit: 1000ms   Memory limit: 262144K  有疑问?点这里^_^ 题目描述 对于多数 RPG 游戏来说,除了剧情就是打怪升级.本题的任务是用最短的时间取得所有战斗的胜利.这些战斗必须按照特定的顺序进行,每打赢一场,都可能会获得一些补药,用来

Flask连接数据库打怪升级之旅

前言 在初学 Flask 的时候,在数据库连接这部分也跟每个初学者一样.但是随着工作中项目接手的多了,代码写的多了,历练的多了也就有了自己的经验和技巧.在对这块儿代码不断的进行升级改造后,整理了自己在连接数据库这部分的的一个学习经验,也就是我们今天分享的连接数据库部分的打怪升级之旅.希望可以为大家在学习 Python 的路上提供一些参考. 初级阶段 首先安装 Mysql 扩展包 建立数据库链接 开启打怪升级之路 在日常开发中,连接数据库最多的应用场景就是,查询所有数据和查询单条数据.就以查询所有

【转载】运维职业向!我是怎么入得运维行业?运维工程师入门必备技能以及打怪升级篇

前言:转载 陈浩一个从事安全运维向的前辈文章.写的很好.人非常nice,遇到了问题,qq上很快就回复了我. 大道三千 入门最难,凡事入了行,也就什么都好说了,好的自然不断努力奋斗修行,不好的自然很快就被淘汰.恭谨勤勉,时不我待~ ---------------------------------------------------------------------------------------------------------------------------------------

SDUT oj 3005 打怪升级(内存搜索)

当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要用上. 打怪升级 Time Limit: 1000ms   Memory limit: 262144K  有疑问?点这里^_^ 题目描写叙述 对于多数 RPG 游戏来说,除了剧情就是打怪升级.本题的任务是用最短的时间取得全部战斗的胜利.这些战斗必须依照特定的顺序进行,每打赢一场.都可能会获得一些补药

详解Linux运维工程师打怪升级篇

详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火...(相对表示就是 python 比较火) 前面也讲了运维基础篇,发现对很多人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能

为什么STM32同时开启2个通用定时器,TIM2和TIM3,其中有一个TIM3定时器进不了中断。

TIM2和TIM3配置一样,NVIC优先级设置不同. 原来的: int main(void){   sys_init(); systick_config(); TIM3_init(); TIM2_init(); } 解决方法是:修改了mian程序中: int main(void) { sys_init(); systick_config(); TIM2_init(); TIM3_init(); } 为什么只调换了TIM2和TIM3的初始化程序就可以了呢?好奇怪. 为什么STM32同时开启2个通用

002_阿里监控平台的“打怪升级”之路

阿里巴巴监控平台经过了这么多年的发展,与时俱进从最开始的简单自动化到现在的人工智能的系统运维.在这个人叫做容器下的 AIOps论坛上面,阿里巴巴集团监控负责人进行了精彩的演讲,主题是自动化到智能化的阿里监控发展之路.这次演讲主要分三部分分别是打怪升级.修炼内功.仰望星空. 打怪升级 和大多数的公司一样,阿里巴巴最初也采用的是 Nagios+Cacti 的开源模式. 这个组合的最大问题是:不能规模化,一旦数据量达到规模级别之后,就会出现各式各样的问题. 另外,由于我们对该开源的组合未做深入研究,因