粉丝1.0万获赞4.7万

stm 三二定时器结构以及定时器中断配置?本期分析一下定时器结构以及如何配置定时器中断。首先我们先来了解一下 stm 三二的定时器。 stm 三二的定时器分为三种,基本定时器、通用定时器和高级定时器。 stm 三二、 f 一系列定时器资源不包括 sistic 等,最多有八个定时器。 sistic 和看门狗定时器我们本期视频不涉及 八个定时器,编号分别为 tim 一到 tim 八。其中 tim 一和 tim 八是高级定时器, tim 二到 tim 五是通用定时器, tim 六、 tim 七是基本定时器。但在 c 八、 t 六芯片上,定时器资源只有 tim 一到 tim 四。由于 没有基本定时器,我们可以使用 t、 m 二等这些通用定时器来完成定时器中断功能。通用定时器包含着基本定时器的全部功能,所以我们先来看一下基本定时器框图。 本期的重点是配置定时器中断其他的定时器功能,比如输出、比较、输入、补货等,暂不介绍。这里这样的箭头就是中断的意思,向下的箭头就是事件的意思, 中段是触发后执行一段程序,而事件触发后可以不经过 cpu 指节操作其他硬件。上面这部分我们可以理解为定时器的时钟源。每个外设在初始化时,第一步也是最重要的,就是要配置时钟。 定时器的时钟来自总线,时钟由 r c c 控制。这里还有一个时钟控制器,是用来选择时钟源的 基本定时器时钟只能来自内部 rcc, 而通用和高级定时器就可以有很多种时钟来源,时钟源确定之后,就连接到了遇分频器这里。遇分频器是什么意思呢? 我们的定式器其实本质就是一个技术器,当技术到达我们的设定值时,就产生一些动作,比如中断或者事件。 技术就是由时钟驱动,每来一个时钟上升沿,技术就会加异。由于时钟源都是几十兆赫兹,如果直接输入到计数器这里,技术就会非常快。为了让技术慢一点,就需要把时钟给降低一下,这里的域分频器就是为了降低时钟源频率的, 那么他是怎么降低时钟频率的呢?其实他是用技术的方法降低频率的,比如我们设置预分频器为实,预分频器 内技术就会从零累加,这里的时钟员来到一个上升沿之后,技术就加一,直到加到我们设置的预分频之时,才会在这里输出一个上升沿,让技术其加一。因为预分频器从零开始累加零一、二、三等直到十, 是经过了十一个时钟周期,所以我们设置与分频值为十,其实这里出来的时钟频率是缩小了十一倍,也就是设置与分频值与真实与分频值有个一的偏差。我们写程序时要注意, 简单来说就是输入到计数器这里的时钟频率缩小了,预分频值加一倍。时钟频率确定了,计数器累加的快慢也就确定了。我们还需要给计数器确定一个累加目标值,到达目标后就会归零,然后重新累 累加,这个累加目标值就存放在自动重装在计存器中。我们设置好目标之后,计数器累加,直到目标值就会触发中断或事件,然后清零,重新开始累加。这个计数器累加也是从零开始,零一二三直到目标值, 所以也是比真实设置的值多了一个时钟周期。现在计数值确定了,技术快慢也确定了,所以整个定时时间也就确定了。 我们总结一下,所以定时时间就等于时钟原频率除以预分频加一,再除以自动重装再值加一。我们还看到这两个地方都有阴影,这是表明他没有缓冲寄存器。 比如我们设置好他们的值后之后,需要修改修改他们的值时,计数器还没有完成一个计 数周期就会导致一些小问题。可以看下这张图,我们修改值时,先写入寄存器,处理器会先保存起来,等到这里一个技术周期结束之后,再让这个新设置的值声效。 这一部分统称为时机单元,基本定时器就是这些内容了。我们再来看一下通用定时器。 通用定时器因为加入了其他功能就复杂了很多,本期只使用定时器中断功能,我们只需要看这一部分就可以了。 我们放大看一下,这一部分就是刚才基本定时器分析的实际单元了。上方时钟源选择也多了很多,我们主要是选择内部 rcc 时钟源,其他的先不看,只使用定时器中断。通用定时器和刚才的基本定时器使用方法是一样的。这里注意的是, 通用定时器技术模式有三种,向上技术模式、向下技术模式中央对其技术模式 区别就是,向上技术模式是从零累加到自动重装在值。向下技术模式是从自动重装在值递减到零,中央对齐,就是先从零加到自动重装在值,然后再递减到零。 现在我们来总结一下初始化流程吧。一、首先要配置 r c c 总线时钟。二、通用定时器有很多适中源可以选择,我们使用内部 r c c 时钟。三、 初始化时机单元,也就是配置自动重装在职遇分频器和技术器的技术模式。四、开启定时器中断。今天的视频就到这里了,欢迎留言评论,我们下期见!

stm 三二定时器中断代码编写本期视频带大家一起编写一下 stm 三二定时器中断代码。我们打开之前视频新建的工程文件夹, 新建一个 app 文件夹之后,将所有的外设操作文件都放到这里。打开 app 文件夹,新建一个 timer 文件夹,用来放我们本期编写的实验代码。 在 timer 文件夹中新建一个 timer 店 c 文件和一个 timer dh 文件,然后打开我们的工程,把它们都添加进来。先添加一下文件路径, 然后新建一个 a p p 组,把刚才的两个 timer 文件添加进组里。 我们打开 timer, 点 a 全键,写一下防止重 负包含的红定义, 这样写就可以防止重复包含问题。再打开 timer, 点 c 文件,包含一下 stm 三二的头文件。 我们使用外设,首先就要先初始化,这里写一下初始化函数框架, 今天我就使用 t m 二来进行中断实验。第一步就是要打开总线时钟,我们看一下结构图,可以看到 t m 二是在 a p b e 总线上, 所以我们就使用 r c c a p b e paragraph crc m d 这个函数初始化时钟。我们可以右键转到定义,看看怎么填写参数,这里我们要开启 team 二十中,所以我们选择这个,把它复制一下。第二个参数是 enable 还是 disable? 回到我们编写代码这里,把刚才复制的参数粘贴到这里,第二个参数选择 enable。 经过之前视频的分析,我们知道 tm 二有很多失踪员可以选择刚才代码,只是开启总线时钟,我们还需要让控制器选择 rcc 时钟, 打开内部组,可以看到标准库中每个外设都有对应的库文件, e team 点 c 位后缀的就是定时器的库文件了。打开之后,我们在右键打开它的头文件,我们拉到最下面,就可以看到有很多函数,这些函数就是操作定时器这个外设的全部函数了, 你想怎么配置都可以在这里找到对应的功能函数。我们需要定时器的时钟,选择内部 rcc 时钟,也可以找到时钟配置函数。因为通用和高 定时器有很多试中员可以选择,所以这里有很多试中相关函数,我们要使用内部 r c c, 试中员就使用这个 team internal clock config 函数。选中,点击上方的小齐,将用到的函数做一个标记,方便以后查阅。 复制一下这个函数粘贴到这里,不会使用,也可以右键转到定义看下详细信息。这里只有一个参数,是选择哪个定时器,回到这里,我们选择 t m 二, 这样时钟元就配置好了。接下来就该初始化定时器的实际单元相关参数了,也就是配置于分频器,自动重装在职技术模式等。打开库文键,也有功能函数可以配置这些就是这个 team time basically 函数, 我们复制一下它粘贴到我们代码这里。同样的,我们右键转到定义,看一下他需要什么参数。这里是说需要填入哪个定时器和一个 team time bassinate tap deaf 结构体参数,我们复制一下这个结构体类型, 回到我们的代码定义这样一个结构题,参数名字可以随便起,为了见明之意,我命名为 tim time basinet structure, 将这个函数的参数填写完整,第一个参数是 tim 二,第二个参数是刚才定义的结构体取地址, 现在我们填写一下这个结构体的参数,加快一下。先把参数全部引出来,我们看一下 teamclock 的 vision 这个参数怎么写,可以转到定义,查看一下详细信息。这个参数是时钟分割,是时钟圆绿波,这里有 关,和我们本期实验关系不大,我们搜索看下参数,随便配置一个就好了,可以配置成这些参数,我们选择第一个吧,复制一下粘贴到我们的代码这里,我们转到定义,再看一下 cancontomo 的这个参数怎么配置, 这里是说配置技术器的模式,我们搜索一下这个 team count mode 红定义,看一下参数。参数可以配置成这几个,有向上对齐,向下对齐,中央对齐。技术模式我们一般都选择向上对齐,其他模式在别的地方有用,粘贴到这里就可以了。 下面这两个参数就是自动重装在和预分频值了,取值范围都是零到六万五千五百三十五,用来控制定时时间。内部来到预分频的时钟频率是七十二兆赫兹,我们可以把 频率降低七千两百倍,变成十 k 赫兹,这样计数器就是零点一毫秒加一个数,然后再把自动重装载值设为五千,就可以定时零点五秒了。如果你想定时,其他时间稍微计算一下就可以了, 我们就零点五秒定时器中断一次吧。因为设置的值比真实的多一,所以这里还要减一, 上面自动重装在也要减一,填五千减一,这样就配置了定时,时间是零点五秒,当然如果你不想这样组合,也可以自己配置其他数值组合。最后这个参数是高级定时器才用到,我们写零就可以了。 定时器初始化已经写完了,但是这样配置开中断之后就会立刻进入一次中断。如果不想这样,我们还需要清除一下中断标志位 倒库函数,这里找下清楚,中段标志位的函数就是这个函数,我们复制一下,复制到这里, 右键转到定义,看下参数,这里第一个参数是哪个定时器?第二个参数是哪个中段标志位定时器中段有很多,其他中段都是定时器其他功能用到的,我们选择 ten flag update 这个中段复制一下, 第一个参数写 t m 二,第二个参数写刚才复制的,这样初始化定时器才是真的完成了。接下来我们开启 t m 二的中段,我们找下库函数,这个 t m i t config 函数就是开启定时器中段函数了,我们把用到的函数做一下标记, 把这个函数复制到代码,转到定义,看下参数,第一个参数是哪个定时器,第二个参数可以选择 这些中段我们选择 team it update 回到我们的代码填写参数,第三个参数选择 enable 使能,这样定时器中段功能就开启了,但是现在只是将中段输入进内核了,因为内核内部中段都是由 n v i c 控制,所以还需要配置 n v i c。 我们找下库函数,可以看到库文件并没有 n v i c 结尾的,这是因为 n v i c 室内和外设 st m 三二把库函数放到了 mis c 文件内了,打开后我们打开它的头文件,拉到最后就能找到它的库函数了。 n v i c 配置需要先设置优先级分组,使用 envic priority group config 这个函数,然后再使用 n v i c in it 初始化 n v i c。 我们先设置一下右 六线级分组,复制到我们的代码,转到定义,看下参数,可以配置成这些参数。关于 nvic, 不懂的可以看我之前的视频,因为只有一个中段,这里随便选,我选择分组二吧。设计好分组,再来初始化一下 nvic, 复制一下函数, 转到定义看参数配置,这里参数只需要一个 nvic in it type define 结构体,我们在上方定义一下, 名字叫做 nvic in it structure。 将参数地址传进去,再把所有参数都引出来, 转到定义,看下参数怎么复制。第一个参数是中断通道选择,具体在 stm 三十二 fe 零 x dh 文件中,我们打开 stm 三十二 fe 零 x dh 文件 最上面这里就定义着很多中断通道,我们找到后缀为 m d 的红定义,关于后缀 m d 的意思可以暂停看下这里中断通道选择 t m 二 i r q n 复制过去就可以了。第二个参数是控制通道是否开启,我们填 neibo 第三个,第四个就是抢占优先级和响应优先级了,因为只有一个中段可以随意设置,我这里都写二。现在 nvic 就配置好了,我们现在就可以开启定时器了, 使用 t m c m d 函数可以开启定时器,第一个参数写 t m 二,第二个参数写 enable, 这样整个初始化就完成了。这里注意一下, n v i c 分组设置是对所有中短都有效的,也就是整个工程只能配置一次。 如果你有其他中断,这里就要注意一下了。现在我们来写一下中断入口函数。中断入口函数名在 startup 这个启动文件中有定义,不能随便写。这里有所有的中断入口函数,并且都是若定义,我们可以重写 这个 team 二 irq handler 就是 team 二中段入口函数了。复制到我们的代码,快速写一下函数框架。在中段函数中,我们需要手动清除一下中段挂起标志位,我们快速写一下 整体就是先用 team get it status 函数判断一下挂起标志位,然后再用 team clear it pending bit 函数清除一下标志位,中段函数就写好了。我们把初始化函数声明一下,这样整个定时器中段就写好了。现在 我们在主函数中调用一下,在上方包换一下 timer 头文件,这样定时器就每隔零点五秒执行一次中断函数了。我们把想执行的程序放进中断函数中就可以了。快速写一个 led 闪烁的程序,测试一下, 这样 led 灯就是每隔零点五秒亮灭。编一下,再看一下,这里有错误是因为有 c 九九的语法,我们点击魔术棒 c c 加加选项卡,勾选 c 九九 mode, 再次编译一下就没有错误了。现在我们看下现象吧。今天的视频就到这里了,欢迎留言评论,我们下期见。

stm 三二 hail 库定时器中段配置本期教大家使用 cobamx hail 库配置一下定时器中段,打开我们之前视频串口重定向的工程文件夹一点 ioc 结尾的这个是 cobex 工程,我们打开它 可以看到之前的配置还在,我们可以基于这个再次配置配置定时器,在这边 timer 选项看, 如果是第一次配置工程,不要忘记了这里的时钟和 debug 配置。和上期标准库定时器中断视频一样,我们还是以 t m 二举例, 上方这里有很多配置选项,这都是定时器的其他功能,我们本期视频只需要配置一下这里定时器的时钟源,选择内部时钟源。下方这里第一个就是预分频值,我们填写七千 一百九十九,第二个参数就是技术模式,选择向上技术。第三个参数就是自动重装载值,我们填四千九百九十九,下面这个参数是自动重装载使能选择 in a book, 下面我们该配置中段时能了,选择这里的 nvic 选项卡,勾选这里的 enable 就可以了,这样零点五秒定时中段就配置好了,你也可以在这里的 nvic 选项卡更详细的配置中段,这个就是刚才勾选的 tm 二中段, 可以在这里选择中断优先级分组,现在我们生成。打开一下代码,可以看到这里有些错误,就是因为之前的头文件没有写到 begin 和 end 之间,导致丢失了包含的头文件,重新包含一下头文件就好了, 可以看到这里已经没有错误了,我们编译一下生成的 hell 库代码已经帮我们初始画好了定时器,现在定时器还没有开始工作,我们打开定时器中断,使用 hltm basedard it 这个函数来开启定时器中断,可以右键看下参数, 参数只有一个,就是填写 team 结构体句柄的地址,回到这里填写 team 二结构体地址。 想让定时器中断开始正常工作,我们还需要写一下中段函数。中段函数本来应该在这里, stm 三二 fe x x c 的电 a 存件内,黑奥库又在这里封装了一下中段处理函数, 我们可以搜索看下这个函数,这里是这个函数的原型,因为定时器的中段有很多,可以看到里面有很 多中断处理,我们要找到 update 更新中断,这个就是定时时间到的中断,可以看到里面中断处理调用了 h a l team period elapsed callback 这个函数,我们搜索一下它的原型, 这个就是他的函数原型了。这个函数其实就是中段处理的回调函数,他是若定义,我们可以重写这个函数,将中段需要处理的任务都放到这个函数里,我们复制一下,回到内函数,把它粘贴到下方,这里就可以了。 接下来我们写一下测试代码,让他每零点五秒加一次数字,并打印一次。你好,世界 测试代码就写好了,将上面这里之前的代码屏蔽掉,现在就可以编一下再进版子了,我们看一下现象吧。 连接好串口工具,打开串口助手,配置好波特绿等。打开串口,复位一下板子,可以看到已经正常打印内容了。今天的视频就到这里了,欢迎留言评论,我们下期见。

定时器是 stm 三二中非常重要的功能模块之一,用于计时生成精确的时间延迟触发事件。使用 stm 三二的定时器可以执行计时和测量外部信号的操作。下面我就来介绍一下如何使用定时器。设计一个程序,实现定时十毫秒,触发定时器中外使用 stm 三二就拜拜创建一个 选择我们使用的 mc 以上,所以也就是 f 一,这最终为八十三,还为七十。 打开定时器中断,实现时钟配置正确。定时器每时二次触发中断。定时器的时间计算公式, 举个例子,当定时器的五线施工员为八十四,传媒主力和 sk 二为八十三, pk 为九四十,定时设计为八十四乘以八千四百万等于零点零零零零一等于十 s, 设置定时器中断,优先起密 填写生成的工程信息、工程名称、存放位置等。值得注意的是, dk 的最小版本千万不要选错,选择代码生成结构,生成代码成功的话会出现提示我们打开工程看一下。 我们需要开启定时器中断填写代码, 编写定时器中断回调函数, 我们在中断回调函数中记得判断是否是我们需要的定时器区域, 每次程序运行到此处,代表比上次触发中断过去了十毫米,我们可以依据这个编写我们的功能。关于使用定时期的介绍就结束了,更多精彩后续欢迎关注本视频号。

简单了解 stm 三二单片机的输入补货功能。在 stm 三二单片机里面,除了基本定时器以外的定时器都有一个输入补货的功能。什么是输入补货? 电瓶信号输入到单电机由低电瓶变为高电瓶的时候, cpu 保存定时器的技术值, 高电瓶变为低电瓶的时候, cpu 在保存一个技术值,然后根据前后两次的技术值去计算电瓶信号脉冲宽度的过程就是输入补货。 stm 三二单片机是如何识别到电瓶信号变化,进而执行记录技术器的值的过程呢? 答案是他有一个输入补货电路,由该电路实现对应的功能。由输入补货电路分析可知,电瓶信号会先经过一个滤波器,滤波器在这 的作用就是滤除电瓶信号里面的砸拨,然后经过滤拨后的波行信号去到边缘检测器,该电路用来检测电瓶信号由高电瓶变成低电瓶,会由低电瓶变成高电瓶的过程。 如果他检测到电瓶电话,那么就会输出一个触发信号,经过选择控制电路去倒分频器电路,最后由分频器电路决定经过多少次电瓶变化事件来触发一个定时器的述职,补货事件的发生。由以上过程分析。补货输入通道代码需要做以下配置, 以 stm 三二 f 四零七定时器五通道易实线输入补货功能参考代码如下。