gd 三二要怎么配置?中断优先级分组以及中断优先级?不会的同学一定要收藏。在使用 gd 三二 mcu 的过程中,大家有过这样的疑问吗?中断优先级要如何配置和使用?今天我会为大家解析 中段优先级分组以及中段优先级的配置。使用中段优先级分组配置一个 gd 三二 mcu 系统,需要大家明确系统中使用的中段优先级分组, 避免中断优先级配置越界,从而导致一些不符合预期的中断现象。中段优先级分组可采用图上的函数接口, 其中有四个 beat 可用于中断优先级分组。如果全用于抢占优先级,则可以配置零到十五的优先级。如果两位用于抢占,两位 用于次优先级,则抢占优先级可以配置零到三,次优先级可以配置零到三。需要注意的是,如果中断优先级配置为两位抢占和两位次优先级的话,抢占优先级配置为四, 二进制为一百例优先级配置越界,实际配置进去的优先级为零,最高优先级,因而明确中断优先级分组非常重要。 中断优先级配置中断优先级配置采用以下函数, i make card 为中断号,中断号可以通过 gd 三十二 f 三十 x h 获取, 就像这样。
粉丝13.0万获赞1.1万

基地上二 f 幺零三入门道项目开发第二十五集外部中断、短按、长按双击 这一集我们会讲解外部中断、短按、长按双击程序讲解,利用福斯一号开发板进行外部中断短按长按双击实验。 在实际项目开发当中,因主函数主循环函数里编写脚长的代码,直接使用 gpi 腰口读取电瓶状态来读取短按、长按双击的按键状态, 因程序与案件的操作不在同一时间段内,导致读取错误、读取不灵敏等现象甚 有的时候根本读不出来。为了解决这种问题,本机中使用外部中断服务函数里编写读取案件的短案长按双击程序 巧妙的解决了上述的问题。在读取案件的短按、长按双击程序里会使用延时函数,但中段服务函数里不能使用以低达定时器来 编写的岩石函数。为了解决这个问题,外部中段文件夹里编写了空余句岩石函数, 这种编写的思想是与五幺单边机里编写延时函数的思想是一样的,现在开始打开 q 五工程详细介绍短按长按 双击代码 e x t r 点七文件夹里 编写了空余计秒延时函数和毫秒及延时函数。编写这个函数的方法是与五幺单边机里边写延时函数的思想是一致的。 写这两个延时函数的原因是因为读取按键的短按、长按双击的程序里会用到延时函数, 而且不能使用低达定时期来编写的延时函数代码内容比较简单,不进行详细介绍。这段代码是中断线 五到九外部中断服务函数,因为本次实验使用 pa 五银角进行短按、长按双击实验, 所以按下 pa 五银角程序会进入外部中段线五到九外部中段服务函数,所以在外部中段线五到九外部中段服务函数里编写短按、长按双击程序 进入中断服务函数。首先判断哪一个中断线发生外部中断,如果第五号中断线发生外部中断,延时二十毫秒。 继续判断 pa 五眼角是否持续按下,而间隔十毫秒变量 c 加一,以便判断 按键是被短按还是长按。如果吸大于一百,即按下按键的时间大于一毫秒,则判断为长按,否则判断为短按。 如果判断为短按,继续判断是双击还是短击,按键松开之后延时二十毫秒。如果按键被按下,说明是双击,否则是短按。 在这里如果是短按中段标志位至一。如果是双击,中段标志位至二。如果是长按中段标志位至三。 判断完短按长按双安之后退出外部中断服务函数之前清除中断标志位,防止重序 重复进入外部中断服务函数。 extr dc 文件夹里的其他代码语上一集一模一样,不进行重复讲解。主函数初始化代码里编写 led 灯初始化函数按键初始化函数 外部中断初始化函数,因为主循环函数里通过判断案件的短案长按双击行为控制 led 灯, 所以要初始画 led 灯,而且在 led 点西文件夹里编写了 led 灯翻转 led 灯状态的函数。函数第一个参数是 gpiu 口,第二个参数是 gpiu 口号函数,通过 gpiu 杠必 刚 right 函数设置 gpio 口语原先相反电瓶的方法实现在主函数、主循环函数里编写判断按键行为的代码和相应行为下的 led 灯控制代码。 如果是短按,翻转开发板上的 led 一灯的熄灭状态。如果是长按, 翻转开发板上的 led 二的熄灭状态。如果是双击同时翻转 led 一和 led 二的熄灭状态。 现在开始变异程序,把程序下载到开发板里进行程序验证。首先验证短按, 通过开发板可以看出程序正常运行。现在验证长按, 通过开发板可以看出程序正常运行。现在验证双击, 通过开发板可以看出程序正常运行。 下一集我们会讲解定时器,定时器也是一种中断编程的思路,与外部中断很类似。

七、 d 三二 f 幺零三入门的项目开发第二十四集外部中断 第二十四集外部中断这一集我们会讲解外部中断相关知识。外部中断按键电路图外部中断初始化函处利用福斯一号开发板进行外部中断实验。 实际项目开发当中,读取案件电子模块状态银角的读取都会使用外部中断进行读取。 当发生外部中断时,主函数、主循环函数停止当前的程序,进入外部中段服务函数首先处理中段事件,从而达到 到实时处理中断事件的目的。现在开始讲解外部中断相关知识。外部中断有零到十九号中断线,即二十个中断线,其中零号到十六号中断线时,通过单篇机 gpio 口来构成, 就是业界内常说的外部中断。第零个中断线是 p a 零, pb 零、 pc 零,一直到 pg 零。 第一个中断线是 pa 一, pb 一, pce 一直到 p 级一。其他的中断线也是以此类推, 一直到第十五号中断线。外部中断线的第十六号中断线是低电压处罚中断的 中断线。第十七号中断线是二七七闹钟中断线的中断线,第十七号中断线是二七七闹钟中断的中断线。第十八号中断线是 usb 唤醒中断线。 第十九号中断线是以太网唤醒中断线。这一集设计到的内容是紧紧围绕 gpi 腰口外部中断、外部中断处发。 gpi 腰口的处罚方式有三种,记 上升沿处发方式、下降沿处发方式、双边处发方式。上升沿处发方式是指 gpi 要烤的电瓶从低电瓶变成高电瓶的现象。下降沿处发方式是指 gpr 要考从高电瓶变为低电瓶的现象。双边处发方式是直上升眼处发方式,火下张眼处发方式都可以处发外部中断的发生。 处发方式的配置是要根据按键电路来配置的,这是这一集会用到的按键电路图。 本次实验里使用 pa 一、 pa 五、 pa 十三银角上连接按键进行实验, 从开发板电炉图可以看出按键的另一端接地,所以程序里把这些银角设置为上拉电阻模式,按下按键即可产生一个下降延信号。 所以设置外部中断外设属性时要设置下降年处罚方式,初始化这些 gpio 口时设置为上拉电阻模式。现在打开 q 五工程详细讲解外部中断程序, 从串口中断、 r t c 秒中断、 r t c 闹钟中断等。前面讲过的中断程序可以总结中段类程序的编写方法。 第一,要出使化外设相关 gpi 要口,在 t 点七文件夹里把 pa 一、 pa 五、 pa 三引角出使化为 上了电阻输入模式。第二,配置外设属性只能相应的中断 exti 点七文件夹里编写外部中段初始化函数,首先开启外部中段, 并设置外部中段优先级,这是设置外部中段相干 tpi oppo 外部中段属性的函数。 首先使能外部中断线一,外部中断线一的 gpi1 口配置为 pa 一银角,外部中断处发方式设置为下降年处发方至。 这段代码是配置 pa 五、 pa 十三 gpi 要口配置外设中断属性的代码,代码内容与配置 p aegpio 口头配置外设中断属性代码相同的原理,不进行重复介绍,请自行阅读。第三,编写中断服务函数,这是外部中断线一中中段服务函数。 进入中段服务函数,首先判断外部中段线一是否发生中段,如果发生中段,首先给外部中段标志位置一, 之后清除中短线一触发中段标志位。之所以这么做的原因是防止反复进入中段服务函数。从启动文件夹中段服务函数定义处可以看出,外部中段线零到四。中段服务函 函数是相互独立的,各个中断线都有独立的中断服务函数。中断线五到九,同时使用一 xti 五杠九杠 irq hander 一个中段服务函数,中段线十到十五,同时使用 exti 十杠十五杠 irq hander 一个中段服务函数。这段代码是中段线五到九和十到十五的外部中段服务函数。 进入中段服务函数,首先判断中单线,之后在中段标志位进行复职。 主函数初始化代码里边写,案件初始化代码和初始化外部中段函数。在主函数主循环函数里边写, 判断是否发生外部中断。如果发生外部中断,把中端标志位通过创口令打印出去,之后延时三秒。 如果换做 gpi, 要搞读取按键的程序,因为有三秒的延时函数,所以按键读取不灵敏,有时候不能读取按键值等现象, 使用外部中断就可以解决这种问题。在这里的三秒岩石是实际上代表主函数、主循环函数。现在开始变异程序,把程序下载到开发版进行程序验证。 从创口助手打印的信息可知,正常打印外部中断标志位的信息,说明程序正常运行。实际项目当中读取案件值、 按键切换菜单等程序都会使用外部中断来实现。下一集我们会讲解使用外部中断的长按、短按双击。

g d 三二 f 幺零三驻门道项目开发第三十八集外部中断唤醒深度睡眠模式第三十八集外部中断唤醒深度睡眠模式 这一集我们会讲解外部中断深度睡眠模式代码讲解,利用福斯一号开发板进行外部中断唤醒深度睡眠模式的实验, 当程序进入睡眠模式时,不仅 cpu 停止工作,而且所有的时钟都被停止,所以比睡眠模式更加节能, 现在开始打开 q 五工程,详细讲解外部中断唤醒深度睡眠模式的实验。在上一级工程的基础上,在主 函数、主循环函数里添加了这三行代码,这行代码是 td 库提供的让单篇机进入深度睡眠模式的函数。函数第一个参数是设置进入睡眠模式形式的参数, 在这里设置成经典模式,除了设置这个参数之外,还可以设置成低空号模式 函数。第二个参数为进入睡眠模式之后唤醒方式的设置,在这里设置成中段唤醒模式, 这样设置的目的是可以使用外部中段唤醒深度睡眠模式。这两行代码是系统时钟初始化函数和低达定时器初始化函数,单编辑进入深度睡眠模式之后 关闭所有的时钟。如果让当天机从深度睡眠模式唤醒之后正常工作,要重新初始化系统时钟初始化函数和 滴答定时器初始化函数,其他部分的代码与上一级一模一样,在这里不再进行重复讲解。现在开始变异程序,把程序下载到开发版进行程序验证。 不管了, 从开发版 oled 屏幕可以看出,每当八的倍数时,程序会进入睡眠模式, 之后通过外部中断可以唤醒睡眠模式,说明程序正常运行。这是基地库提供的让单片机进入待机模式的函数,函数有一个输入参数, 参数的含义为进入待机模式之后,唤醒方式的设置有两个参数可选, 一个是中断方式,另一个是事件方式。实际项目开发当中,当使用电池来工作电子设备的情况下,当使用完一次充电的时候,电池的电压 会持续下降,此时当单边机的 adc 功能检测到电池的电压之后,如果电池的电压下降到一个阀值时,让单边机进入待机模式,即实际生活当中常说的关机。 进入待机模式之前一定要做好保存好重要的数据,有让电子模块进入低工号或停止工作状态,是整个电子产品进入最低的工号模式。下一集我们会讲解西安西教练实验。
![[5-2]21嵌套中断向量控制器NVIC #GD32 #ARM](https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/217e0edc0253053c3872091a05e70b83~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2102889600&x-signature=8run02Q6N7g5PvW1qGAzZSzhRWo%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202608240814531637EA1F850C4BE33CCD)
大家好,我是讲嵌入式的高博士,这里呢是第二十一次课,本次课呢我和大家一起来学习内嵌中断向量控制器 nvic 啊,有些地方又把 nvic 翻译成嵌套中断向量控制器啊,嗯,他们是同一个东西。 本次课呢分成两个部分,第一, nvic 它的功能的理解啊,就是说我们 nvic, 呃,会实现哪些功能啊?第二,我们对于优先级的一个呃,介绍 好 n v r c 是个什么东西呢啊?我们上节课讲计算机对于中断处理的这样一般理的。呃,这个方法的一个理解的时候,我们画了这样一个图啊,画了一个这样的一个图,就是说我们这个 cpu 正在执行程序的时候,如 如果有中断发生,我们要判断这个中断啊,能不能够打断我正在执行的主程序,如果能够打断我正在执行的主程序的话,我们就把主程序正在执行的啊,所谓的这些,呃, 东西我们给他保护起来,叫保护现场啊,然后转向这个中段啊,就具体的中段他所对应的那个中段向量啊, 去去在中断项链那里去找这个中断服务程序存放的位置,然后这个找到这个中断服务程序之后呢,去执行这个中断服务程序,中断服务程序执行完之后呢,再恢复现场,再继续执行, 然后如果说中断服务程序正在执行的时候,有新的中断进来,我们还要判断这个新的中断能不能够打, 打断我当前的这个中断,就是说中断能不能够欠套啊,根据他们的优先级啊来来进行。呃,这个判断,那这个这些工作呀,你看判断他能不能 打断我当天的服务程序啊,然后判断他的优先级啊,优先级进行比较啊,这些事啊,很繁琐啊,我可能有很多很多的中介中中断事件要进来啊,能不能够 给我们这个这个这个呃,把把主程序结束掉去响应它呢?就是说但是我们的这个 cpu 呢,又非常的重要,是我们整个按摩芯片最核心的一个东西 啊,这么核心这么重要的东西,我们应不应该给他配一个助手呢?当然给,应该给他配一个助手,而且会配很多助手啊,我们配一个专门用于处理中断的这样一个助手啊,我们叫做什么呢?哎, 就叫做 nvic, 给 cpu 配置的一个专门处理中断的这个助手,就叫做 nvic, 也就是嵌套中断向量控制器。 那这个 n v i c 具体做些什么事儿呢啊? n v i c 又在我们的考 text m 三架构中处在什么样的一个位置呢?我们来看前面的考 tex m 三啊, 就是它的一个架构图,当然这个系统架构图呢,实际上是我们 gd 三二 f 幺零 x 系列啊,它的中等密度的芯片啊,也就是我的开发版所使用的 gd 三二 f 幺零三 c 八 t 六啊,这样的一个芯片, 它的这个系统架构图,你看这个 n v i c 啊,它的这个位置呀,还是相当的很 核心的啊,他处在我们考这个芯片的内核里面啊,他是紧跟着我们的 cpu 的啊,就是我们这个 cpu 的非常重要的一个秘书哈,那他这个 cpu 做些他这个 cpu 的这个 avic 啊,做些什么事呢? 你看这些外设都是连到先通过他啊,来看看能不能 啊,去去去影响这个 cpu 的,去打断这个 cpu 的啊,主程序,哎,也就是说我们的外部中断,要想到达 cpu 让 cpu 来响应我们的中断服务, 先要过 n v i c 这一段。那常见的外部中断,或者说我们一个芯片它的外部中断到底有哪些呢?啊?这个呢,我们就要看我们相对 印的用户手册啊,用户手册啊,这开发工具啊,然后开发资料用户手册这里啊,就有相对应的章节会去讲啊,这个事啊,你看有专门的 eiti 的这个章节啊,对于考 tax m 三来说啊,它有六十八种可屏蔽的 外设中断啊,也就是说你这个中断进来之后我可以把你给屏蔽掉啊。屏蔽中断这个事是谁做呢?当然也是我们的 nvic 啊,来做啊,也就是说他的一第一个非常重要的 工作就是屏蔽中断,就像我们领导的秘书一样啊,他非常重要的一个事就是把领,对,就是把可能会影响我们领导的一些不重要的一些干扰给他,怎么样?给他 挡在门外,对吧?啊,这是我们这个 n v i c 做的第一件事,那么这个外部中断有哪些,我们现在还不是不知道呀。啊,我们继续往下看啊,他这里有一个外部中断的这个, 呃,简介啊,这个简介,简介这里呢,他有很多啊,首先呢是,呃,异常,异常,我们在上节课讲过啊,他这个异常是我们的啊,内核里面发生的内部中断啊, 很多是不可屏蔽的中断啊,你看很多是不可屏蔽的中断,他这个中断呢,总共有十六种啊,从零到十五啊,那么,呃,外部中断呢,他又有一些啊,像这个 esi 啊,这个 esi 实际上是我们这一章啊,就是我们下节课要讲的 啊,这里第一种外部中断叫 e f t i 啊, e f t i, 具体它是什么我们现在还不知道啊,我们下节课会讲,然后呢?还有什么像 r t c 啊,还有像这个 d m a 啊, d m a d m a 零,假设 d m a 零啊,然后还有像这个,呃, timer 啊,像 timer, 像这个定时器啊,定时器,我们在下一章会讲, 等等等等吧啊,我们这里没法去具体的一个一个的给他搞清楚了啊,给他搞明白啊,但是我们知道啊,如果说你想去了解外部中断有哪些的话啊,我们对应的这个器件的啊,这个芯片的, 它的用户手册肯定会有的啊,是不是每一个考 tex m 三的芯片的这个外 不中断的数量都是一样的呢?那显然也不是的啊,你看我们 s t m s t m 三二啊, f 幺零三 c 八 t 六,它的这个中断的这个数量和我们 g d 三二啊, f 幺零三 c 八 t 六啊,又不太一样,你看它的这个 中断啊,只有四十三个可屏蔽的中断通道啊,但是我们考 text m 三,他最多有多少呢?啊,在这样一本书啊,考 text m 三权威指南这里啊,大家可以去看一看啊,可以去看一看 啊,呃,像这个异常,他的这一张啊,有奖,总共有啊,二百五十六个啊,其中十六个,呃,是系统异常啊,叫内部中断。剩下的二百四十个啊,是外部中断,显然对于不同 我们的考 text m 三的芯片来说,它的外部中断的数量是小于等于二百四十的,对吧?啊?当然这个东西我们知道啊,有具体的数值啊,我们不需要去记忆啊,我们知道有这种些东西啊,就可以了。 那么,呃,外部中断进来了,那么第一步就是要过 nvic 的中断屏蔽啊,就是说首先我们这个中断,他是不是一个有效的中断啊?当然这个中断屏蔽呢,我们是可以通过程序来配置这个 nvic 的,对吧? 那么如果说这个中断是没有可以进来啊,我们不想屏蔽他,他可以进来。那么第二步是做什么事呢?是做什么事呢?我们要判断啊,中断的优先级啊, 好比说我们这里啊,这个中断一进来了啊,我们直接啊,当然现在没有啊,没有正在执行的这个中断服务,那没关系啊,我们就直接去中断项链啊,就是他对应的那个中断项链那里啊,找中断服务程序去执行就行了。 那么如果一个中断服务程序正在执行着,如果又有新的中断进来,那怎么办呢啊?我们就要看看看这个中断二的优先级和中断一的优先级啊,他们之间的关系,如果中断二的优先级比中断一的优先级要高,我们就执行一个中段欠套, 中断欠套啊,如果说这个优先级判断完了啊,那么我们接下来也就是什么,哎,去处理中断限量啊,去处理中断限量,也就是说我们这个中断啊,要告诉这个这个 nvic, 要告诉 cpu, 我们这个中断进来了之后, 你去响应他的话,你去哪里去找他相对应的中断服务程序啊?我们这个 cpu 啊,他就可以啊,非常呃快速的啊,把这个中断给他处理掉啊,把这个中断服务给他处理掉,然后尽快的去回到他的主程序那里继续执行 啊,继续执行。那看来这个优先级啊是非常重要的一个概念。那么这个优先级是怎么一回事呢?啊?在我们的考太 xm 三架构的按摩芯片里面,这个终端优先级呢,分成了两种 优先级啊,他是两个呃,优先级组合在一起啊,共同共同,来啊,来来。怎么样来描述我们这个外部中断的优先级的?首先是什么是叫强 战式优先级啊,其次是它的响应式优先级啊。响应式优先级有些地方也翻译成子优先级或者副优先级或者雅优先级啊,它是 sub priority。 那么这个抢战式优先级和响应式优先级又是怎么一回事呢?啊?我们简单来介绍,如果是一个低抢战式优先级的中断程序,正在执行的时候,发生了一个高抢战式优先级的中断, 那么这个时候啊,这个第一抢占是优先级的中断程序,虽然正在执行, 对不起,你也要暂停一下啊,来响应我这个高强断式优先级的中断啊,我们这个就叫中断欠套,也就是说在这个图这里所示的,那么中断二的这个强断式优先级和中断一的强断式优先级哪一个高呢? 啊?是中断二的抢占式优先级高啊,所以说我们中断一的服务就被怎么样,就被暂停啊,就被暂停用来处理中断二的 这个服务啊,所以说中断欠套发生的时候啊,说明这两个中断的抢占式优先级 是不一样的,而且是啊,中抢占是优先级比较低的,那个中断先发生,而且没有响应完,我们抢占是优先级比较高的,这个中断又进来了啊, 就好比说我们正在呃,举个例子啊,假设我们去银行的柜台那里办一些业务啊,好比说银行柜台那里正在有一个啊,正在有一个,呃客户啊,这里正在处理了啊,这里有一个,已经有一个客 客户了啊,啊,已经有一个客户啊,客户 a 啊,我们当然这个地方我们还是写成中段 a 啊,中段 a, 中段 a, 他已经在这个这个什么哎,已经在这个呃柜台这里来处理这个事了,然后又有一个中段 b, 哎,有一个中断 b 进来了啊,这个中断 b 要不要被响应呢?我们就要看中断 b 的抢占式优先级是不是高于中断 a 的抢占式优先级啊。 也就是说你是相对于普通用户来说,你是不是一个 vip 用户?你如果你是一个 vip 用户,那对不起普通用户,你靠边站啊。然后我们把这个 vip 的用户的这个事件啊事情给处理了,我们再来响应你的这个啊,普通用户, 那么响应式优先级是怎么一回事呢?啊?是这样的啊,如果说我们这个中断 a 和中断 b 的抢占式优先级是一样的, 那么我就不管你的响应式优先级是怎么样,只要中断 a 的这个事正在处理,你中断 b 来了,我就必须排队等待中断 a 先完成, 来吧啊,因为他们的他,他们的这个潜在是优先级实验的,你抢不过他啊,因为他正在正在做了,你就不能打扰他啊。但是现在这个 b 如果正在排队,又来了一个中断 c 啊,中断 c 啊,那么中断 c, 它要首先去 去看他的抢占式优先级是不是高于中段 a 的抢占式优先级。如果这个中段 c 和中段 a 的抢占式优先级又是一样的, 那怎么办呢?我也不能打断这个 a, 我要进来排队,哎,排队的时候他发现前面有一个中断 b 也在排队啊,你看他和他的潜电池油烟机一样,他也和他的潜电池油烟机一样,那说明这两个的潜电池油烟机也是一样的。 那他排队的时候,我能不能中断 c, 插到中断 b 的前面,等中断 a 完了,先来处理中断 c 呢? 这个时候我们就要看他的啊,响应式优先级。如果这个中断 c 的响应式优先级的级别高于中断 b 的响应式优先级的级别的话, 那对不起啊,这个这个 b 啊,我们就要对不起 b 了,我们这个 c 呢,就排队排到前面去,明白吧?啊?也就是说啊,好比说我们, 呃,中段,好比说我们这里有三个客户啊,有三个客户在银行,去银行柜台那里出办一些业务啊。这个中段 a, 他是 vip 用户,这个中段 b 也是 vip 用户,中段 c 也是 vip 用户, 那这个中段 a, 这个 vip 用户正在做的这个事,你这两个大家都是同样的是 vip 用户,那我就不能打断正在处正在处理的这个事啊。然后我这个 b 和 c 啊,我们拿出来 第二就看,就看这个,我们第二个,第二个优先级啊,就是副优先级,如果这个中段 c, 它是 vip 中 p 啊,它比 vip vip 里面有相对等级高一点的,那么我可以优先排队哈, 这样的话,我是不是把这个啊抢占式优先级和显音式优先级都说明白了呢?那强占式优先级和显音式优先级对应的,我们 gt 三二 f 幺零三 c 八 t 六啊,他在设置数值的时候是怎么设置的呢啊?实际上呢,我们这里呢有一个四必特的一个 啊,呃呃,存储器啊,一个寄存器啊,这个寄存器啊,在 这个地方大家可以看看异常,这里啊,他相对应的有一个对于寄存器的一个说明啊, 你看他这里有计算器啊,有个计算器有一个优先级计算器啊,对于考 tex, 对于这个 g d 三二 f 幺零三或者是 s t m 三二 f 幺零三来说啊,他的这个优先级计算器呢,总共 共有四个 beat, 那四个二进制位,这四个二进制位呢,其中呢一部分用来做响应式优先级的配置,一部分呢用来做啊抢占式优先级的配置。那么到底哪一部分作为抢占式优先级,哪一部分作为响响应式优先级呢?我们这个是可以配置的啊, 如果你把他们全部作为响应式一弦几,那好了,大家的抢占式一弦几啊,都是零啊,那么这个,这个,这个响应式一弦几,他的曲子范围就变成了吗?零零零零到幺幺幺幺啊,也就是从零到十五。 如果我们把前面的这一位啊配置为响应式,配置为抢占式优先级,后面的这三位配置为响应式优先级的话,那么这一位啊,抢占式优先级,他的曲子范围就是什么零到一啊两个数字,而这个响应式优先级他的曲子范围就是什么, 哎,零零零,零到幺幺幺幺啊,就是什么,就是有从零到七,总共有八种可能,那相对应的也是啊,这样啊,这样,来来来,做啊,啊,来存储优先级的这个设置啊,是这样来设置的,那当然对他的设置我们是怎么样设置呢?我们写代码的时候当然是可以调用啊, 芯片的厂家给我们提供的库函数啊,通过库函数的接口,接口函数啊,来来来,做这个事。 好,本次课关于这个 nvic 它的功能啊,这个 nvic 的功能,以及啊它的这个相对应的,我们判断中断的优先级的啊,这个中断优先级的强调式优先级和响应式优先级的这个呃概念啊,以及以及啊优先级的 呃计存器的配置的这个具体的数值的取值,可能我们就都讲完了啊,本课内容也到此结束了,同学们,再见。

大家好,现在来录制 g d 三二 f 三零三固建库开发。第十五讲外部中断, 使用外部中断来驱动 led 来进行一个演示,需要样片的可以找我进行一个申请。这使用的是我自己绘制的一款开发版, 使用的固件库是官方的二点一点三的一个固件库包, 选择我们对应的芯片,这用的是三零三 j 一, 版本改为版本六,在这里的话选择 c 九九, 应该是一个 hd 的 对于 led 的一个驱动,这个在之前讲过,就不再细讲了, 最使用的是一个 p b 七的一个灯来做一个演示, 按键的话对应的是 一个 p b 十四。这里我用一个 st 的一个文档来进行一个讲解,这里的话 对暗很多的芯片来说,比如说 p a 零,一直到 p g 零,它都挂载在 e x t i 零线上,那么对应的 p v 十四,它挂在的是 e x t i 十四的这条线上面。 同时我们看一下 s t 的一个配置,就说我们对 p p 十四进行了一个 选择,它的端口是有一个 e s t i 十四的一个配置,配置完之后它会有一个 触发的一个方式,在这里可以看到它可以通过上行下降沿,或者是这个上升或下降沿其实就是一个边沿触发, 那么在这里的话配置就用 e s t i n i t 这个初始化来进行一个配置,同样的它也是一个上线源触发,下降源触发或者是一个边缘触发, 那么设置了一个触发方式,你要开启它的一个中段,对应的中段 st 幺零三的话是零到四是独立的,之后是五到九是一起,十到十五是一起,如果具体的不知道的话,你可以在它对应的一个 s 文件中进行一个查看,可以看到零到四是在一起的,之后是五到九,然后是十到十五。 我先把这个给初始化给复制过去, 这个就先对 gpl b 口进行一个时钟使能以及配置为一个上拉输入,之后就是复用 这一个的话对应的就是 s t 的一个 这个配置,将这个 iu 口配置为 exti 的这个附用的一个模式, 然后这个它的一个意思就是 设置优先组的一个长度,他只有这四个选项,一共有四位,你要分别给抢占优先级和一个响应优先级进行一个分配,这用的就是一一个两位两位这样子。 这里就是设置一个优先级,对应 s t 的话是在这里有个 n、 v i c 的一个中段,这里的话是有一个优先级, 分别对应的是一个抢占优先级和一个子优先级,对应的就是这两个 参数。 这里也写得很清楚,一个抢占优先级和一个子优先级强优先级。 设置完之后就是要配置 这一个它的一个触发方式,触发方式的话用的就是这个函数, i i t 的这个函数就是刚刚我们讲到的这个使用它的一个触发方式, 我们看它的一个 z 的话,也是只有三个上弦下降也和一个边缘。触发之后你既然开启了中断,那也就顺便进行一个清除, 那么就配置完毕了。那既然他会有一个 这个轻中开启了它的一个中段,那么它后面还是会进入到这个中段用的。这 p b 十四对应的是这个 e、 x、 t i 十到十五的这个函数,我们可以在这下面进行一个编写, 这个就是判断是否是十四这条线,如果是的话,清除它的中断,同时对这个 gpl 口进行一个 电瓶的一个翻转,我们来查看一下它的一个实际情况,这一使用的调试方式是接令来进行一个调试, 现在下载进去,我们看一下实际的一个情况,这有个按键, 当按下的时候他灯是不会亮,松开他电瓶器的一个翻转再按下,哦,这个可能是有点接触不良, 因为这里设置的是一个, 这设置的是一个上线源触发,同时我们这里是有加一个上拉的, 那么他的一个电瓶应该是空闲情况下是一个高电瓶状态,按一下是一个低电,一个下降眼,松开是一个上升眼, 那么默认情况下松开他的电瓶才会进行个翻转,松开他的电瓶才会进行个翻转。如果我们 设置为一个下降源,我们看一下实际的一个情况 下键言的话,应该就是按下时候电瓶就进行一个翻转。 现在下载进去,我们看一下实际的一个情况,可以看到按下的一瞬间电瓶就进行了一个翻转,按下一个一瞬间他电瓶又进行一个翻转,我们设置为一个双边呢, 那么他应该是按下灯亮,松开灯灭, 可以看到按下的时候灯亮,松开时候灯灭。 第十五讲外部中断就已讲解完毕,谢谢大家。

gd 三二 f 幺零三入门道项目开发第九集四种方法点亮 led 灯第九集四种方法点亮 led 灯 这一集我们会讲到滴答定时器语延时函数,利用开发版做 led 闪灯实验,使用更多的 gpi 咬口酷函数点亮 led 灯。 主循环函数有延时函数模块、通讯函数、发生中断处理函数来构成。在主循环函数里, 这些函数按照时间的限号顺序,按照电子产品开发逻辑,程序会运行下去。如果程序按照时间的限号顺序执行,必须由延时 函数来控制时间。这一期我们先讲解延时函数,延时函数是通过单边机内部资源抵达定制期来实现的。 滴答定时器是一位二十四位倒计时定时器,当从载时一直计数到零,发生一次中断, 只要只能滴答定时器,只能为一直技术下去。一般逻辑开发当中,滴答定时器用于延时作用。在操作系统当中,滴答定时器可以充当操作系统的心跳时钟。 这是第六点系文件夹里面的程序内容。每一个程序文件夹都是成对出现的,一个是点 文件,一个是点 h 文件。一般点 c 文件里编写声明函数的函数,实际程序头文件里编写红定义声明变量声明函数等。 第六点系文件夹第一个函数是滴答定时器初始化函数,函数里有配置滴答定时器时钟程序和 开启滴答定时器中断程序。第二个函数是微秒级延时函数, 第三个函数是好秒级延时函数,第四个函数是秒延时函数,这些函数可以直接被函数调用。对于程序的具体内容,请自行阅读,因程序内容简单,在这里 不进行详细说明。 现在开始通过 q 五工程编写 led 闪烁实验。要调用其他文件夹里的函数,调用之前要声明投文件 这行代码的含义是生命了体内文件夹的头文件,这样才能主函数里调用体内文件夹里的所有函数 程序。主函数出属化代码由系统出属化函数、滴答定时器出属化函数、 led 灯出属化函数来构成 主函数。主循环函数是按照 pb 零银角设置为高电屏,延时一秒, pb 零银角设置 为低电瓶延时疫苗按照此顺序循环执行。此代码现在进行代码编辑, 下载到开发板。 从开发版可以看到, led 一以 一秒为时间间隔闪烁,说明程序正常运行。除了 gpio bit sat、 gpio bitter、 里沙特函数之外,也可以用其他的库函数实现 led 闪灯实验, 屏蔽当前代码,利用 tpio beatride 函数实现 led 山东实验。 此函数的第一个参数是 gpi 要组,设置为 gpi 要 b。 第二个参数是银角号,设置为 ppio 聘零。第三个参数是设置高电瓶或低电瓶的参数,第三个参数设置为 cet 银角输出高电瓶, 设置为里塞特银角输出低电瓶。这些参数的含义一定不要记住。 不知道是低电瓶或高电瓶的时候,可以搜索百度或者直接下载程序观察结果得出结论。 学好单篇机,尽量不要靠记忆,要积累遇到问题时解决问题的方法。 循环函数代码内容与上一个实验原理一样,不进行详细介绍,直接进行变异下载程序。 从开发版可以看到, led 一以一秒为时间间隔闪烁,说明程序正常运行。屏蔽当前代码, 利用 gpio part two right 横竖实现交替闪烁,抖 led 灯。 此函数的第一个参数是 gpio 轴,设置为 gpio b。 第二个参 数是设置 gpi1 组所有 gpi1 银角的电瓶。具体实现方法如下,这里的零一二三四五,这些表示银角号,下面的零一表示高低电瓶。 如果 pb 零输出低电瓶设置为零, pb 一输出高电瓶设置为一,以此类推,可以获取下面表格的电瓶状态。 之后把这个二进字转化为十六进字数数就是 gpiu part right 含兔的第二个参数。 把二进字转化为十六进字时,要拿计算器进行计算,单编机开发,当中进字的 转化或一些计算都要用计算机进行计算,不要比算或心算。这样做的目的是提高计算结果的精确度,而且节省计算时间。通过此函数可以设置整组 gpr 腰口银角的电瓶状态。 如果想 led 一和 led 零交替选售 gp 口的电瓶,如图变化这个数字直接写入 gpiu part right 函数的第二个参数即可。 现在编辑程序, 把程序下载到开发版, 从开发板可以看到, led 一和 led 二一一秒为时间间隔交替闪烁,说明程序正常运行。屏蔽当前代码。 利用下一个方法进行 led 闪灯实验。程序里的 led 是红定义,要想了解红定义的具体内容,要跳转到红定义处。 从这里可以看出, led 是 pb out 函数,参数含义是 gpio 口的银角号。在主循环函数里, led 等于一的含义是 pb 零银角输出高电瓶。 led 等于零的含义是 pb 零银角输出低电瓶。程序进行变异, 下载到开发板, 从开发板可以看到, led 一以一秒为时间间隔闪烁, 说明程序正常运行。下一集会讲到当 led 灯的银角发生改变时编写程序的方法。 学完下一集会掌握控制任何 gpiu 口输出高梯电瓶的程序编写方法。

gd 三二 mcu 如何实现掉电数据保存?你一定要收藏!大家在 gd 三二 mcu 应用时是否会碰到以下应用需求,希望在 mcu 掉电时保存一定的数据或标志,用以记录一些关键的数据。以 gd 三二一幺零三为例, 数据的存储介质可以选择内部 flash 或者备份数据寄存器。如图所示,片内 flash 具有十年的保存寿命,十万次擦血液擦除时间在三点五毫秒,自写入时间在四十微秒左右。 flash 特性决定 flash 需要先擦后写, 擦写要求的电压范围为供电范围一点八伏至三点六伏。 gd 三二 mcu 基本都支持备份数据寄存器, gd 三二一幺零三系列支持八十四字节数据寄存器,可以 在 vdd 掉电 vbat 有电的情况下进行数据保存。备份数据寄存器不需要擦除,可以直接写入,数据更新速度较快。下面为大家介绍数据掉电保存的实现。电源掉电的检测可以选择使用 lvd 低压检测功能,如图所示。 lvd 的功能是检测 vdd vdda 供电电压是否低于低电压。检测预值,该预值由电源控制寄存器 pmu ctl 中的 lvdtv 进行配置, l v d 通过 l v d e m 置位使能位于电源控制和状态。寄存器 p m u c s 中的 l v d f 为表示低电压事件是否出现,该事件连接至 x t 的第十六线,用户可以通过配置 x t 的第十六线产生相应的中断。使用 l v d 检测到掉电事件后,从 led 预值到 pdr 电压之间会有一个时间窗口,可用已实现掉电数据保存,这个时间由掉电速度决定,因而对数据保存的时间要求很高。若系统供电只有 vdd 供电 vbat 外部未接电池或者需要保存的数据比较多的情况下,可以选择使用内部 flash 作为存储介质。为了节省数据更新的时间,可以采用双备份的方式,在系统运行的过程中,先擦除一个备份,检测到掉电事件后, 节省擦除时间,直接向备份区域写入更新数据。若系统供电 vbat 外接了电池且更新的数据小于八十四字节,可以选择将数据写入备份数据寄存器,其更新速度更快。另外,如果评估下来掉电时间过快,来不及更新 数据的话,可以从硬件上减缓掉电速度,以预留更长的时间窗口。如果你也有 gd 三二 mcu 相关问题的话,请在评论区留言。
![[5-4]23中断式触摸按键需求分析与代码设计 #GD32 #嵌入式开发](https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/ceb36a11602237dff82156faedccf50b~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2102889600&x-signature=IvNGPvGK8AA2XfmEmK7iFLIy6MM%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202608240814531637EA1F850C4BE33CCD)
大家好,我是讲嵌入式的高博士,这里呢是第二十三次课,本次课呢,我们对第五章的配套的案例啊进行需求分析与代码设计, 分成三个部分,第一啊,触摸按键的工作原理,第二需求分析,第三程序设计。为什么我们要介绍触摸按键的工作原理呢? 我们这里呢,通过这四个啊,触摸按键 abcd, 我们分别把它配置为这个呢,我们使用第四张啊, gpro 口那里啊,那个按键的一个状态的查询方式啊,就是使用查询式的啊,一个按键的这样一个 状态的这个接收的一个方式啊,来控制 led 一啊,就是这个灯,然后呢我们这个呃 b 按键呢,我们使用中 断式的查询中断式的这个按键状态的这样一个响应啊,响应的这样一个呃处理啊,来在这个 b 啊,这个相对应的啊,中断处理函数里面啊,就是中断服务函数里面来来控制这个 led 一的 一个呃状态的反转,然后 c 和 d 呢,是也是中断的方式来控制 led 二的啊,这个状态的反转啊, bcd 都是中断式的这样一个按键的这样一个呃 状态的查询。那 b、 c、 d 有什么区别呢?他们的中断触发的方式不一样啊。 b 呢,我们使用啊下降眼触发, c 使用上升眼触法,然后 d 使用双边眼触法哈,那么这个呃欠这个什么?这个触摸按键他的工作原理是 怎么样的呢?我们来看它的原理图啊,我把这个原理图呢给切到这里来了啊,大家看这个原理图啊,这个原理图,嗯,这个原理图呢,是我在我们这个嗯, gd 杠一开发板上啊,从这里切出来的啊,按键 d 的啊,这样一个原理图,呃,这个 a、 b、 c、 d 又分别连到我们的这个 g、 d 三二 f 幺零三 c 八 t 六的哪个引角呢?大家要看这个地方啊,触摸按键这里啊,是通过什么呢?是在这个地方二幺幺啊,是 p 幺幺啊,通过什么呢?通过那个短线的,呃,短线帽啊, 把他们给短接啊,然后实现了 out 一到 p a 零 out 二到 p a 一, out 三到 p 二, out 四到 p a 三,然后啊,然后我们重点看这个 out 四啊,就是我们的 d 键啊,这个按键 d, 如果我们把按键 d 看 明白了,那么 a b、 c 啊,它的原理是一样的,这里呢,你看啊,我们把这个图啊放到这里来啊,这里稍微大一些啊,大家看啊,呃,这个按键 d 呢,它是连了一个,呃,触摸按键的驱动芯片 是 t t p 二二三杠 b a 六,它内部的具体实现我们不展开来讲,我们只看它外部的表现 啊,然后它这里呢有一个 i 口,这个 i 口呢,实质上就是我们这个 t p t t p 二二二三的一个输入口,然后这里呢有一个 q 口, q 口呢,实质上是它的这个芯片的输出口是连哪里的呢?你看它是在这里直接连我们的 alt 四,也就是说通过这个 alt 四呢,在这 这个地方和我们芯片上的 pa 三这个 gpio 引角啊相连的,那么这一个的输出的一个波形,实际上就直接给到我们的 gt 三二 f 幺零三 c 八 t 六这个按摩芯片 啊,那么他会有什么样的表现呢?大家看这里一个 io 爱口啊,这个 ttp 二二三的爱口,他这里呢有一个 c 四幺这样一个电容和 d 直接相连的,这一边呢是连了一个方形的触摸按键,也就是我们 那开发板上啊,在这里来说呀,他是这个这个啊,这个这个 d 这个按键啊, d 按键啊,这个按键呢,我们实际上是一个铜片啊,是一个铜片,一个方正方形的一个铜片啊,在这里, 那么我们手指如果按到 d 上去的话呢,我们的这个触摸按键和 d 之间就形成一个感应电容 啊,这个触这个触摸按键由于我们用户的手触摸他和 d 之间形成的这个感应电容和 c, 这里不是 c 八啊,而是 c 四幺啊,和这个 c 四幺并联 进到这个挨口啊,如果说没有这个手触摸的话,他只是是这样的啊,他就只是有一个 c 字压连啊, 当有了这个手摸上来的话,那么这两个电容就会并联给这个 i, 也就是说我们是由手摸到这个方 行触摸按键上之后,我们输入给爱口的这个电容就发生了变化啊,这两个电容并联以后,使得这个电容变大了啊,当这个电容变化的时候,我们这个 q 这里会输出一个低电瓶 来吧,啊,也就是说我们这里会有一个低电瓶来到哪里呢?来到啊, gd 三二 f 幺零三 c 八 t 六的 p a 三这个 i o 口 来吧,啊,也就是什么意思呢?就是本来啊,这里我们是一个时间轴啊,本来呢,这个这个什么,嗯, 这个 p a 三这个地方呀,哎,它是怎么样呢?哎,它是一直是怎么样,一直是 一个高电瓶进来的啊,一个高电瓶进来的,然后等到我们的这个,呃,手摸上来了啊,摸到哪里来了呢?摸到我们的这个触摸按键上来了啊?也就是说这个时候, 哎,手过来了,哎,在这个点上啊,已经过来,那么他立马就怎么样?哎,就输出一个低电瓶啊,这个地方输出一个低电瓶比比给到 pa 三,也就是说我们的 pa 三这个引脚上立马就来了一个下降沿, 对不对?哎,这个嘴法呢,手一直是按着的啊,一直是按着的,当按到什么时候呢?当按到 这个地方啊,假设啊,假设我们,哎,假设我们在这 这个地方啊,这个手 啊,这个是怎么回事?我们把它给删掉啊,把它给删掉啊,然后 啊这个地方我们这个手指怎么样呢?哎,手指在这个地方啊,就离开了啊,离开啊,这个地方是 按下这个地方是离开啊,离开, 按一下啊,离开的时候那么这个感应电容又没了,又回到 c 四幺,回到 c 四幺的话,这个地方又又出现一个什么,又回 到一个高电瓶啊,这个地方又回到稳定的状态啊,而且呢我们这个是阿沃特四,这个点上如果是一个低电瓶的话,我们这个里三伏,这个右二四是导通的啊,这个地方我们会有一个什么?哎,这个会相对应的,这个地方会有一个灯啊,会有一个地的,这个灯啊,会跟着亮起来啊,会跟着亮起来, 那么它就是这样的一个原理啊,其实对于我们的 g d 三二 f 幺零三来说,我不管你是触摸按键也好,普通的机械按键也好,你实质上都是这样的一个电瓶, 一个电瓶信号发给我的啊,也就是说其实我是呃看不出来,不大看得出来你是到底是触摸按键还是机械按键,当然如果是机械按键的话这个地方会有抖动啊,然后离开的时候也会有抖动,如果是触摸按键的话,因为他的这样一个, 呃,本来有一个类似于史密特出发器的这样一个东西啊,它里面应该会有这个应该是有这样的一个类似类似的这样一个效果啊,他使得我们这个地方的抖动就没有那么明显啊, 不需要消抖啊。嗯,总之我们的这个这个什么我们的这个触摸按键是由于这个方形的这个铜片和我们的人手 和由于人手的触摸和 d 之间产生了一个感应电容,然后这个输入给他的电容的变化啊,使得这个地方的 io 这个 ios 四的这个啊电瓶发生了变化,哎,才起到了一个什么 起到了一个按键的作用啊,这个触摸按键就非常好了,这个地方你可以做成方形的,也可以做成圆形的,甚至做成一些有意思的 logo 啊,做成 iken 的那种图案都可以是吧?啊这个都可以实现这样一个 触摸按键的这样一个效果啊,甚至还可以在上面按一些印一些漂亮的图案是吧?啊都可以啊,那么我们这样的话这个触摸按键的工作原理我们搞清楚了啊,我们来看看具体的需求啊具体的需求 啊,这里呢我们有四个按键啊,我们刚才也说过了这个地方是查询式的接收啊,这个地方是中断,中断,中断啊,这个地方下降严出发啊,上升严出发,呃,双边严出发, 那么 a b 控制 l e d 一, c d 控制 l e d 二。呃,那它是一个什么样的效果呢?啊?我们在 这个外触循环里面呢,我们会加一个什么呢?会加一个底类的这样一个函数啊,就是说我们要这个这个 cpu 啊,哎,他会处理很多事啊, 他只拿了一小段的时间来,怎么样啊?我们这个地方写一下啊,其他超 操作啊,其他操作。这里的其他操作啊,我们就是使用一个鼎力的函数来模拟他做其他的操作啊,然后呢?这个地方呢?哎,查询啊,只有很少的一点点时间。我们来做查询啊, 哎,查询,然后这个地方呢又是其他操作,然后这个 y 的这个,这个,这个这个一个什么?哎,一个 呃,促循环里面啊,我们不停的做这些事啊,不停做这些事,也就是说我们用来查询 a 的这个时间点呢,就非常的一点点,如果说你在这个地方按一下这个 a 按键,那么我们这个灯就不能亮,除非你按的时间足 不长。呃,一直到这里,哎,坚持到他查询的这个时间段来了,我们这个 a 按键才会起作用, 而这个 bcd 呢?不一样。 bcd 是怎么样呢?哎, bcd 是我们中断,不管他是在哪个地方,我这个 bcd 一旦中断发生,我们的 cpu 会停下来,怎么样?哎,会来处理我们的一个中断服务啊, 就是说我们 b、 c、 d 啊,这三个按键不存在说什么,哎,说要坚持到这个地方它才能够响应,明白吧?啊?那么它的效果是怎样的呢?我们来看看啊,最终的效果是怎样的? 大家看,如果我按这个 a 啊,你看啊,我,我实际上是按下的啊,这个没有没有反应 啊,但是我按 b 啊,按 b 只要一按,哎,这个 led 音 l led g 啊,我把这个灯给它调暗一点啊, 啊,你看这个,只要按下去这个 l、 e、 d 一啊,它就会发生变化,而这个 c 呢,我按下去的时候,它是一个下降眼啊,没有触发这个中段。当我把手松开啊,这个地方是一个上层眼啊,它的这个 l、 e、 d 二的状态会发生反转啊,再按下去不变啊, 带声带。呃,把手松开一个上升眼啊,会状态发生变化,而这个 b 呢,只要一按下去,他的状态就会发生变化。来吧,因为他立马来个下降炎,而这个 a 呢?哎,你如果短短的按一下,坚持不到这个查询这个地方来啊,坚持不到这个地方来, 我们的这个 led 一的状态不会发生变化,如果只有我按了足够时间足够长,坚持到我们这个查询来了,我这个 led 一啊,才会发生变化,而这个 b 就不这样啊,然后这个 d 呢,因为他是下降炎和上升炎,都会触发一个中断,所以说我一按上去, 这个 led 二立马就亮起来,当我松开的时候啊,他又有一个上升沿,又会触发这个中断,这个中断怎么样呢? 又会怎么样呢?哎,又会使得 led 二的状态发生反转,也就是说这个时候我一松开手, led 二就会灭掉啊, 一按上去就会亮啊,一松开手就会灭掉啊,这个是下降沿触发、上升沿触发和双边沿触发啊,这个是查询的按键接收啊,这是我们的呃,最终的实现效果,那么 该怎么实现这个事呢?啊?该怎么实现这个事呢?首先呢我们应该怎么样?哎,我们应该看看啊,怎么样给他设置为中断式的按键 啊?是为中断色的按键,那么你看每一个组有一个 exi 的外部中断线,我们上节课已经给大家讲过了,那么也就是说我相对应的,我要让啊连接 b c d 啊这三个触摸按键的 i o 口,给他们配置好这个什么 e f p i 线,而我们这三个按键分别是连的什么呢? 啊?分别是连的啊,这个啊,这个地方啊,分别是连的 p a 一啊, p a 二和 p a 三啊, b c d 是吧?也就是说 我们在设计的时候啊,我们要怎么样?哎,要首先设置这个什么 设置这个中断线啊?我们要设置中断线啊,当然这个之前我们要先复用时钟啊,复用时钟设为复用时钟是什么意思呀?就是我们要要要要,呃,下面这三个 io 口要给他怎么样?哎,复用啊,复用的方式,那么这个 中段出发,我们实际上是设置哪几个的中段出发呢?我们是 exti 几啊?我们 pa p a 呃, p a 一, p a 一, p a 二, p a 三,也就是 e i t i e t i 二和 t i 三,对吧?啊,这个地方也就是说我们要设置 e f t i 一啊,然后 e s t i 一啊, e s t i 二, e s t i 三啊三, 二啊,设置它的中段触发啊,这个中段触发分别是什么呢?哎,分别是下降炎啊,上升炎, 然后还有一个双边眼啊,双边眼,然后设置优先级啊,这个设置优先级,我们设置这三个的什么优先级来着?我们在上上次课讲那个呃, nvic 的时候啊,嵌套 中断向量控制器的时候我们讲过,是吧?哎,他的什么他的什么?哎,抢占式优先级啊,还有什么响应式 优先机啊,当然这个地方我们都设置为一样就可以了啊,没有说谁比谁更更怎么样啊。然后这个就是 a f i 的那个 f i o 的啊,就是说服用时钟啊,服用时钟, 当然在这之前我们为了让这个呃触摸按键触摸按键 a 相连的 pa 零能正常工作,还要让这两个 led 啊,也能够正常工作,所以说我们要先对要也还要对这三个 io 口进行什么, 哎,进行初始化,这个 led 一和 led 二分别是连的 p b 零和 p b 一啊,这个是 p a 零啊,我们要对这三个口进行初始化, 当然这三个口初始化的工作我们实际上在第四章啊,我们的案例里面已经实现了啊,所以说我们直接调用那个地方的那个相对应模块的那个初始化的函数就可以了, 我们把它复制过来,稍微改一改就可以了。然后呢,我们还要怎么样呢?哎,我们还要写这个中断服务程序啊, 对于我们的 gd 三二来说啊,相对应的每一个 exti 它都有中断,就是说每一个外部中断都有中断向量, 就是都有中断服务所存放的位置啊,如果落实到我们库函数开发的话,就都有一个什么哎,都有一个相对应的那个 rrq 的啊,大概是这个,呃, handle 了啊,这样一个 啊,这样一个函数啊,这个函数具体的名称我暂时记不住啊,我们要等到写代码的时候去查那个啊库函数的应用手册啊,我们这个地方只要写上 他的什么,如果说我们在代码设计的时候,他的什么中断服务,写他的一个中断服务,然后还要写什么啊?还要写啊?这个,呃, esti 啊, esti 二的终端服务, esti 三的终端服务啊,把它写好就行了 啊,相对呢,这个 y 一这里呢?我们呢?哎,可以用一个三秒的一个延时来模拟这个事,模拟哪个事呢?模拟 cpu 啊,它的主要操作啊,主要操作,然后查询操作只只占一小部分,而这个查询呢,我们这个按键 a 的查询 查询的这个事呢,我们实际上在第四章的时候也写过,我们直接把那部分的函数给他拿过来就可以了,对吧?哎,这样的话,我们把需求搞清 出了,把触摸按键的这个工作原理啊,也搞清楚了,当然这个工作原理你搞不清楚也影响不大啊,你只要知道他这样来做,这样来写这个,这样来画这个电路图啊,真正真正用的时候, 嗯,实际上他看上去很复杂,实际上他是用起来和我们的一个普通的机械按键用起来是差不多的啊,只是说他的这个抖动的消除,他自己做了,本身就效果好一点。 然后我们把需求搞清楚了,然后我们也把这个代码的设计的搞清楚了啊,大概的尾代码也写出来了啊,具体的代码该怎么写呢啊?我们下节课啊,再来给大家演示,本次课就到此结束,同学们再见!