粉丝4330获赞9351

其实好像他也好像也没说啊,如果 o d r 八如果等于一的话,那么 p a 八究竟是输出一还是零?看不出来啊,你看到这我好像看不出来, 但是呢,我们通过看他这个这张图啊,这张图呢,是从那个库函数开发文档里啊剪那个粘过来的哈,啊,这个里呢,我们可以啊, 找到一些,找到一些线索啊,我们去反推他反推,我们去反推呢,就是,那么这个呢,就是一个 b s r 计算器的一个介绍啊,我们刚才也能也都看过了, 那这里呢,我们看它啊,它给我给我们举了一个例子啊,就这儿,假如你要设置 g p l a 的第一 短口值为一,什么意思啊?就是 p a 点一等于一,对吧?那么你只需要往计存器 bsr 的第十六位对应为写一即可,即 gpioa, 是吧? bsr 将一左移一位, 那什么意思? g p i o 一点一,如果我想让它为一,那么你就是这么一操作,这么一操作将一左移移位,那这是一啊一,假如在这对不对?左移移位相当于就是 b s 一 就等于一啊,对不对? b s 一就乘一了, b s 一等于一,那我们看它的注解呗,如果是 b s 一等于一的话,那么它就设置了,那什么 o d r 一也就为一,对不对,那就 o d r 一就等于。好,那这这时候我们就可以反推出来了,对不对?如果 o d r 是不是对应的某个位为一的话,那么相应的这个管角呢,它就会输出一啊, 对不对?看这个我们看不出来啊,对不对? o d r 八等于一,您光这儿看的话,我们我们也不知道 p a 八究竟是输输出一还是输出零,但是它给了一个例子,我们就可以判断啊,当 o d r 对应的某个位为一,那么 p a 口的该位也会输出一个亿哦。那么再看第二个例子,第二个例子他怎么说呢?如果你要设置 g p i o a 的第一个端口值为零 零,也就说如果你想让 p a 点一啊,等于零,那么你只需要往计算器高十六位对应位写一即可。对应位啊,对应位, 对应位,对应位,他是写有个错别字啊,这有错别字,对应位写一即可,什么意思? 就这个意思。将一左一这么到位,十六加一,是不是啊?假如这是一啊,一左一多少位? 一位,两位,三位,四位,五六七八九十十一,十二,十三,十四,十五,十六十七,对吧?将一左一十六加一就十七,就是就是 b r 一等于一, b r 一 b r 一等于一,那么 b r b r 要看上边啊,上面是 b r, 看到没?下面是 b s b r 等于一是啥意思呢?等于清除对应的 o d r y 一为为为零哦, b r 一等于一,那么 o d r 一呢?就等于零头,这里我们就是可以看出来啊,这个规律啊,你看 o d r 计算器对应位,如果是零,那么 p a a 端口的对应位也会输出一个零,如果是一,他也会输出一哦,看到没? 那么通过这么一个例子啊,我们大概就知道 o d r 计算器啊,它和这个某一个端口某一位 输出高电瓶还是低电瓶的这种对应关系啊,我们基本上就已经找到了哈,找到了,那么我们接着往下看,我们接着往下看哈,好哦,嗯,往下看,那么就是总结部分哈, 这是一个 g p l, 对吧? g p l 的一个置位函数,就是我们今天分享的这个函数啊, 其实他的本质呢?嗯,进入这个函数题以后啊,他是其实就操作了一个这么一个计算器,叫啊端口位设置清除计算器 bsr, 对吧?那么其实这个计算器呢? 其实他其实啊,又是在操作这个 o d r 计算器啊,当然就叫端口输出数据计算器,对不对? 其实最重的,最重,其实操作的这么一个计算器,而这个计算器呢,他就直接影响到 g p i o 某一个端口,是输出高电瓶啊,还是低电瓶啊,是直接与这个计算器挂钩的哈, 刚才我们也总结了,对不对?如果对应位是一,那么 g p i o 的某一个位输出的肯定也是一啊,如果是零,那么呢也是零, 那就按题我们这个历程中啊,他给的这句话吗?我们就走一遍吗?我们再走一遍,从头走一遍。 gpla 的智慧函数,对吧?那么第一个参数呢?是 a, 我选择了 a 端口的第八个管角,对吧?那么这么一操作,对吧?这个 stm 三二一执行这么一句话,那么在 gp 端口下的这个 bsr 计存器啊,中的这一位啊,他就成了一,对不对? bs 八二,就这个位啊,就至一了,对不对?那么这一位至一呢,也就意味着 odr 计算器就是 odr 八呢, 也至一了,对不对?也至一了, o d r 八至一,根据我们刚才推的那个推出来的关系,对不对?那么 p a 八呢,也就等于一了,等于一 就代表什么?等于一啊,就意味着他会输出一个高电瓶啊,对吧,那么我注解给了,对不对? pa 八输出一个高电瓶。 好,那么到此为止啊,我们这个函数啊,就已经分享完毕了哈。这个函数啊,总的来看 就是没有前面的那个初说话函数啊,复杂。没有那个这个弯子啊,也没那么多啊,还是。呃,比较简单的这个函数啊,还是挺好掌握的。好,今天上午呢,我们就分享这么多,谢谢各位观看,我们改天继续。

stm 三二的 gpio, 其通用输入输出,每个 gpio 可以通过寄存器配置设置为基本输入输出、模拟输入或者服用模式,这个就是 gpio 的原理示意图。 我们今天主要了解的是基本的输入和输出模式,其他模式后续具体外设讲解再做介绍。 我们通过这个四零七开发板上面的按键输入和引出的 io 来控制灯泡亮面,以对基本输入输出有个直观的认识。 这颗灯珠是二百二十伏电源供电, stm 三二的 io 银角不能直接控制,需要控制一个继电器通断来控制灯的二百二十伏电源通断。选用板子上的按键 s e 作为输入接口,其对应 io 端口为 pd 十三,继电器控制端口选 pd 十一, pd 十一端口除了对外引出外,还接了板在 led 一, 这样我们也能通过 led 一亮面观察到 pd 十一的输出状态。下来就是在 q 八 d 开发环境新建工程,配置好时钟和输入输出银角按键输入, pd 十三配置为 gpio 输入上拉模式。 那为什么要配置为上拉模式呢?看下 s 按键的接法,外部未接上拉电阻端口,直接接按键对地, 如果是下拉输入或者普空输入,是无论如何也采集不到高电瓶的。接下来再将 pd 十一配置为推碗输出模式,推碗输出驱动能力强,可以直接驱动继电器板上的光偶发光管。 各项配置完后生成代码工程,然后在生成的代码 max 文件里面编写应用程序,功能就是实现按键按一次灯亮,再按一次灯灭。我们要先编写个按键检测程序,然后在主程序里面加上这样的代码 编翼程序,然后接好开发板和继电器的连线及电源,将程序下载至目标板开发板。 其实这一段按键检测程序是有问题的,我们下载进去看看到底是什么问题,看下功能实现了,但按键每按一次,听见继电器声音了没,响了很多次,这里面主要是按键消抖不彻底的原因。 那什么是消抖呢?又如何消抖呢?理想情况,我们每按下抬起 起一次,端口上会出现一个方波,但是实际情况是,按键在按下过程和松开过程中,由于接触抖动,会产生很多小毛刺,这些小毛刺就是我们实验中案一次 误检测成多次,进而连续开断机电器的罪魁祸首。所谓消抖,就是要将这些抖动的毛刺剔除掉。剔除有两种方式,一,硬件加电容滤波。二、软件消抖。看一下我们板子上的按键,很孤独,没有滤波电容, 那只能硬件不足软件来补。按键检测程序改成这样,再来看下效果,这下是不是很顺滑, 但是完美吗?不,一个按键检测程序里面出现啥都不干的长时间延迟,还有一个可能因为按键损坏而导致程序 假死的。玩有循环,这既浪费资源,也引入了风险。有没有最好的解决方案呢?当然有,关注我,下期告诉你。

园子哥能给我们演示一下寄存器地址计算过程吗?那么计算过程就来了, 首先怎么去记呢?首先我们要知道这个外设挂在哪个总线上面的,那么这个通过哪里看呢?看系统结构图, 然后呢获取这个外设总线基地值,怎么看呢?我们前面有个表三个嘛,对吧? app 一, app 二跟 hb 嘛,比如 app 二 gproa, 它是挂在 app 二上的,那么 app 二的总线基地值呢?零差四零零零 四零零幺零零零零上面。然后呢获取外设地址偏移量, gplv 相对 app 二种,现在偏移量是零差八百,所以可以得到他的这个 gplya 外设的基地指呢是多少?这里改个八就是了嘛,对不对?然后呢,寄存器 地址偏音量,那么具体某个继承器的偏音量是多少呢?就比如我们前面那个零差零 c, 那个欧迪亚继承器的比欧迪亚继承器是吧?外设机地址的偏音量是零差零 c, 那么这里再加个零差零 c, 那么这一个就是我们实际的计程器地址,看到没有 dprvodr 等于四零幺零零加零八百加 c 就获得了这个地址出来, 这就得到了这个纪存记地址了。 会算吧,简单吧, 就是你只要知道了这些地址,知道了平安一辆就很简单了。当然你也可以直接去刚刚那个 mrem map 上面找到,这个 gprv 的首地址是可以找到的。然后找到了首地址以后呢,你就直接只需要去知道这个偏 量是多少,你就可以知道具体某个计算器了。偏音量从哪里看呢?就是看我们的 reference menu 里面那个计算器描述里面他有个 offset, 有个偏音量的说明。



那么寄存器映射呢?其实寄存器它是一种特殊的存储器,给寄存器地址命名的过程呢,就叫寄存器映册。 我们理解了存储信用车,寄存信用车应该就好理解了,那么再给大家举个例子哈,我从市场上买了一个开关,我只知道他是个开关对不对?但是到底来控制什么的你并不知道,但是我把它装在我的墙上,哎,告诉你这是大厅开关, 他有了个名字,我也装好了,这个时候你是不是就知道他干什么用的了,对不对?我给这个开关起名字的过程, 你就可以把它理解叫寄存器映射。那么其实寄存器映射其实它是分两个段,第一段你先要把这个存储器映射搞定,先给它取了存储器的这个叫什么地址,然后呢再给地址 来命名,就在计程器验测了,举个例子哈,这个计程器熟悉吧?前面跟大家说的这是一个欧迪亚计程器的地址, gprob 吧?好像是啊, gpla 的欧迪亚计程器地址给他,我把这个地址命名成这个, 这就叫寄存器映射,把地址改成一个名字,就叫寄存器映射。用什么方式实现?用井号滴饭就可以了吗?是不是井号滴饭就可以了? 所以拖概念上面去理解呢?是很简单的。那么我们来再来回到我们前面那个图,给大家解读一下这个寄存器。这个寄存器呢,我们这里分了个一二三四出来哈,第一个是寄存器 的一个名字,这是这个图是来自哪里啊?是来自我们的 reference menu 中文版本的哈,是我们的这个 sm 三二的这个中文参考手册, 那么这一部分呢?叫计算器的名字,这一部分呢?他有一个偏移,还有一个复位值,对吧?然后呢还有计算器的位表,这个就是他的位表,每一位控制什么东西,看这个表就可以了。然后那个位描述,符位功能描述,就是看这里就是你要解读一个计算器啊,你打开我们的参考手册, 看到那个计算器,你就分成四部分去读,第一个是他的名字,第二个他偏音量是多少,他的初始值是多少?第三个他的位表是怎么样的?第四个他的每个位的描述 就分成这四个部分就可以了,然后经过这四个部分去解读,你就知道这个计算器到底是干什么用的了。你这是计算器的一个解读啊。

m 三二他有很多寄存器,我们把它分成了两大类,一个是内核寄存器,一个是外设寄存器。那么内核寄存器里面呢,又包括了内核相关的控制寄存器啊,中段寄存器、 cd 可寄存器、内存保护寄存器、调试寄存器等一堆啊,比较跟我们关系比较大的呢,一般是这两个 我们留白了哈啊,经常可能会用到的可能是这些,然后呢外设计算器就很多了啊,几十个外设,每个外设都有计算器,那这么多计算器怎么去组织,怎么去,怎么去看呢? 我们在下一堂课会给大家详细的去说啊,那么这里大家只要了解啊,他其实内部分成了两大类,一个是内核相关的计算器,一个是外设相关的计算器,有这个概念就可以了,这计算器也不用我们去记,我们就翻参考手册就可以了。那么我们这里一个 m 三的 odr 继承器为例,给大家简单介绍一下计算器,其实就是一个什么开关嘛,对不对?内部的一个开关嘛,对吧?那么这里是呢,这是我们的这个数据计算器 odr, 那么他这里呢,是他的计算器的一个描述, 那么从这里可以看到他是高十六,是保留的,就是没用到低十六位呢,就是欧低压零到欧低压十六,欧低压十五他用来控制我们的这个叫什么 数据的输出,控制端口的数据输出,他有一个这个这个说明,那么我就可以知道,哎,欧第二,零是一,我的 io 口零呢就会输出一是零的话呢,我的 io 口就是输出零一,这个是 gpro, 这个第一个 io 口在第零个 io 口,第一个 io 口就会输出一,输出零对应的一直到十五个 io 口, pa 零到 p a 十五或者 p pp 零到 pp 十五,就可以通过这些计算机去控制,就相当于这里啊,有好多的家里面的开关,每个开关你怎么去控制呢?你自己去写值进去,让你自己去打这个开关是零十一,是零十一就可以实现对他的控制。这么来理解了,是比较好理解的哈。

存储器映射,什么是存储器映射呢?那么这里有一句话,存储器本身他是没有地址的, 对,存储器分配地址的过程就叫存储器映射。这句话有点有点懵逼哈,你第一次读这句话,我相信大家肯定是懵逼,哎,存储器是没有地址的,为什么没地址啊?可能你从来没想过这个问题,比如我买个滴滴啊四内存调回来, 我只知道他是五百一十二 g, 或者说啊,没有这么大哈,一条内存可能是八 g 或者十六 g, 我只知道是八 g 或者十六 g, 但是你知道他地址是多少吗?你不知道为什么不知道呢?因为存储器它本身是没有地址的, 他只有一个容量,他告诉你容量,然后地址你自己去给他分配。那么分配地址的过程呢?就是存储经验设,那么为了帮助大家 理解,我这里给大家来个实力哈。这是我们 xran, 就是我们战舰上用的一个 suran 芯片哈,我们国产新意存储的 心意存储的一个芯片,那么它是一个什么芯片呢?八叉 m 八 a 五幺二幺六,我们正点原子站街开发网上用的就是个芯片,它是一个内存芯片,它是一个什么内存芯片呢?它是一个依照自洁的一个 suran 芯片。 一照四节,他需要多少根数据线啊?要十九根数据线, a 零到 a 十八 二的十九次方嘛,大家去看二的十九次方是不是五百一十二 k, 对吧?是五百一十二 k, 他的地址有五百一十二 k 的地址,然后呢,他的数据位宽是十六位,所以他要乘个二就变成字节嘛, 所以他是幺零二四 k b, 也就等于一照自觉的一个 rain 芯片。那么怎么叫存储器映射呢?你知道这个地址跟这个数据,其实你并不需并不知道它具体,你比如我要去访问这个芯片,我并不知道它具体地址是多少。

stm 三二单片机为了提高容缩率以及应对突发状况的能力,专门开辟了一块数据存储区域,我们称之为备份域。 备份空间的大小因单片机的容量而有所不同,中小容量单片机备份域包含十个十六位的寄存器,大容量及互联型单片机的备份域包含四十二个十六位的计存器。备份域有其自己的电源电路,我们通常用一颗电子来给他供电。 备份预中的数据不会因为系统复位、电源复位待机换洗而丢失,这就解决了单片机意外断电而数据丢失的问题,这也是备份预存在的意义。那么如何访问备份寄存器呢?通过设置 app 外设,始终使用 气存器的电源使楞位后备遇使能位来打开后备电源和后备接口的时钟,也就是 v box 和三十二点七六八千赫兹的时钟。通过电源控制计算器的后备与斜保护卫来使能对后备计算器和实施适中的访问。 那么如何清除后备计算器的数据内容呢?当单片机的侵入检测银角,也就是 pc 幺三银角发生高低电瓶的翻转时,就会产生一个侵入检测事件,这个事件就会导致所有备份计算器的内容清零。 也可以通过备份率控制计算器中的第十六位来复位。另外给备份电池断电后重新上电,也可以强制清除所有备份数据计算器的内容。

好,各位小伙伴你们好,我们接着上讲,继续啊,还是这个硬件的一个解析啊, 那么单面机要工作对吧,要实现一定的功能对吧,他首先啊,离不开一个硬件的支持啊,那么他的所谓的硬件啊,所谓的硬件啊,就以我们这个独立看门狗啊实验为例的话啊,其实他这个 主要就涉及到一些相关的计存器啊,相关的一些计存器啊,叫 register 哈, register, 那么独立看门狗啊 和独立看门口相关的计算器呢啊,一共有五个啊,分别为啊间计算器啊与分明计算器啊,以及等等等等啊,我这里都给大家列出来了啊,我们可以看一下,一共就这么五个, 但是呢,我们真正要使用的话哈,我们只需要通过对前三个计算器进行一个相关的配置,就可以实现我们这个独立看门狗的一个功能了哈,那么我们这里呢,就是来先给大伙讲一讲,第一个计算器啊,叫键计算器啊, 但我们看这个名字叫 iwdg 啊,叫独立看门狗啊的一个简写对吧? k 呢,是代表这个 k 啊,就是 ky 啊, k 意外啊,这个英文单词叫 ky 对不对?他就是按键的意思吗? 那么 r 呢,就是 register 啊计算器的意思对不对他,所以所以说呢,他的一个简写对不对?叫 k r 啊,叫键计算器。那么这个键键键计算器哈, 他有哪些功能呢?哈,这里呢,我们这个从这个开发的文档里啊,我给大伙也截出来了哈该计存器的一个各位的描述啊,首先呢,他是这个一个什么呢?三十二位的单品机对吧?他的计存器啊啊,基本上都是三十二位的计存器哈, 那么你从哪里看呢?哈,你看这是第零位啊,第三十一位,对吧?所以说呢,这个该计算器啊,一共有多少零到三十一啊,就是三十二位啊,所以说呢,键计算器,他是一个什么三十二位的计算器啊, 这个我们是要知道的啊,这个我们要了解的另外一点呢,就是说,那么这个计算器啊,他的高十六位啊,是并没有使用的啊,是并没有使用,我们真正使用的是他的这个低十六位 啊,也就是第零位到他的第十五位啊,使用了他的第十六位啊,那么这第十六位啊,分别啊,是怎么去使用呢啊,这里呢,他这里啊,写的都有啊, 那么这个地方呢?哈,我们在下面啊,也给他做了一些详细的解释啊,我们只需要啊,对键计算器啊,我们只需要掌握以下三点内容就可以了啊,就可以了。 那么第一点呢就是说,哎,向该计算器写入数值啊,四个 c 啊,四个 c, 那么会实现哪些功能啊?他会什么开启独立看门狗啊的功能啊,开启独立看门狗这个功能,对吧?另外呢就是说这个计数器啊,他会从副位置啊,副位置就是 fff 啊, 开始递减技术啊,就是来一个时钟脉冲啊,就减一,来一个时钟脉冲就减一啊,就减一,那么一直到减到什么?减到零为止啊,减到零为止,他会产生一个什么复位信号啊?该啊,会产生一个复位信号啊, 这是第一个知识啊,这是第一个知识点。第二个知识点啊,就是向该计算器写入四个 a 啊,四个 a 是什么意思啊?就是说 独立看门狗啊,叫 r l r r l r 是什么?叫重装载计存器啊? reload 啊, reload 重装载 reload register 啊,这是个缩写啊,那么重装载计存器中的值呢?就会被重 新加载到计数器当中啊,从而避免产生这个复位信号啊,这个好理解吧这个应该比较好理解吧。就是说啊,我们打个比方啊,就是说 你这个我们去吃这个自助,对吧?这个我用这个杯子哈打了一杯饮料,对吧?当我快 当我这个饮料呢喝到啊喝到快一半的时候当我杯中的饮料啊喝到啊低于一半的时候,对吧?我又拿着这杯啊这杯饮料去那个饮料机上啊继续去加点饮料。 对,那么这样的话啊,每次就是说那么每次这个杯中的饮料啊低于一半的时候我都会去加饮料啊每次低于一半的时候我都会去加饮料,那么那么我们就知道 那么这个饮料杯中的饮料他永远都不会不会为空,对不对?都不会为空,就这么个意思啊,那么重装载计算器啊他也是这么个意思啊,就是说每当计数器啊减到零之前啊,你都会把这个重装载值哈 传递给计数器对,传递给计数器,那么计数器呢他就永远不会为零啊,那么他就永远不会产生复位信号啊,就是这么个意思啊, 那么就是说向该计算器写入四个 a 啊写入四个 a 啊啊写入四个 a 之后呢,他就不会产生这个复位信号了啊对,他就不会产生复位信号了,那前提是什么呢?就是说在他上一次技术还未 减到零之前啊,你写入这么一个数值啊,那么计数计他才不会减到零啊,啊,他才不会减到零,对不对啊?他是有一个是他是有一个条件限制的哈, 好,那么第三点啊,第三点就是对该计算器啊,写入四个五啊,写入四个五之后呢啊,那么会取消 这个计算器啊,叫 pr 啊, pr 啊,他叫预分频计算器啊,为这个取消预分频计算器和重装载计算器的一个协保护功能啊,协保护功能对不对? 那么我们也说了,对不对?那么要实现这个独立看门狗这个功能,对吧?要对这三个计算器进行一个写操作,对吧?写操作, 那么他默认的呢,这个预分频计算器和这个重装载计算器他是有写保护的啊,他是有写保护的,所以呢,我在进行这个啊,对这两个计算器在进行这个操作之前啊,我必须要给鉴计算器啊, 送入这么一个数值啊,送入这么一个数值的目的就是取消啊,这两个计算器的一个协保和功能啊,我才可以 操作这两个计算器,对不对啊?那么这就是那么这个呢,就是这个关于计算器啊,建计算器啊,我们需要掌握的啊,一些知识点啊,那么这里呢,呃,给大伙啊,都已经这个捋出来了哈,那么我们本讲内容就到这,感谢各位的观看。

我们再来看一下 sm 三二他是怎么去做这个存储经验色。 sm 三二是一个三十二位单面机,三十二位单面机他非常他能管理的地址范围呢,就是三十二二的三十二这方就是多少四什么开头的一堆数据啊,就是四 gb 了, 所谓的四 g b 地址空间。那么 s t 把这个四 g b 地址空间怎么来划分的呢?就是一个存储金映射,他怎么来映射的哈,他把它分成了八个 block, 那么四 g 除以八,每一个就是五百一十二兆嘛,对不对? 分成了八个。普洛克,你看他的例子,从零开始,一直到零 x f f f f f, 这就是他能访问的最大地址范围,就四 gb 的范围嘛。那么前五百一十二 k pro 零呢,叫 flash 功能,是用来做 flash 用的,或者说付或者说 flash 相关功能的一个 block。 block 一呢,是 stry 相关功能的也详细的地址范围五百一十二兆外设,外设相关的在 block 二上也是五百一十二兆 f m c 相关的。在这一个地址段,大家注意一下他这个手机子啊,你看到没有,就 fres 相关的从零开始, fresh 相关的从零差两, 这个两千,或者说这不知道是两多少啊,反正是二零零零零零零零开始。那么 y 四相关呢,就从四零零零零零零开始。 fsmc 相关的啦,地址范围呢,就是六千开始的一个地址啊,六千开始的。 那么 suran 不让可一跟不让可二啊,不不半可一二半可三,四啊,不落可三跟不落四是从八千开始的。然后 fmc 的纪存器呢,又是从零叉 a 零零零开始的,所以你看到 fsmc 实际上占了三个 block, 那么布洛克呢?布洛克六呢?没用到保留,这是没用的。然后呢空那个 cm 三内和内部内和相关的一些东西呢,就放在布洛克旗上,这是他的一个一个一个划分的,一个简单的一个划分呢,这个图,其实这个表其实在我们这个手册啊都可以找得到,那么这里只是给大家再重申一遍哈, 就是把它分成五百一十二照的八个块,那么每个块有什么功能呢?我们这里给大家重点介绍的是 这个,这个跟这个其他的我们不是很关心,大家想去了解的话呢,因为我们迷你版是没有 fsmc 的,所以这一块直接就看掉了。 然后呢外色内和相关的我们一般也用的比较少,如果用的话呢,大家就看这一部分就可以了,所以我们重点是前面三个,前面三个。

净水器是特殊的一个存储器,是吧?他也是一种存储器,也是用于存放数据的,只是说他的这些数据呢,对大面积的功能有控制作用, 是吧?那么他是一个特殊的计算器,然后呢给我们这个计算器地址命名的一个过程,给他地址命名的过程是什么呢?就是我们这个计算器映射了。 那么再问你,什么是净人气音色呢?就是给我们这个净人气地址命名的过程,就叫做净人气音色, 是吧?就这么简单。那么举个例子,比如说这是我们新买来的开关,那么怎么对他进行映射呢?是吧?举个例子,那么就是给我们这个开关命名吗?那么你这个新买的开关并没有名字,我只知道你叫开关,那么你是有什么作用的?开关并不知道,是吧? 那么我们给他命个名,比如说大厅灯开关,那么看到这个名字呢就知道,哦,原来这个开关呢是用于控制我们这个大厅灯的, 那么这就是我们这个计算器映射它的一个作用之一了,就是看到这个名字我就知道,嗯,原来你这个这个开关是用于控制我们这个大厅灯的,是吧? 这就是我们这个啊,就是金色的一个好处之一,那么几个实力就是我们这个,比如说这是我们这个 计存器的一个地址,是吧?那么怎么进行计算器音色呢?是吧?是不是给这个地址呢进行命名啊?给这个地址。看到这个地址啊,我不知道是什么,但是我给他命名了之后变成这样子,是吧?这个地址呢,我就用这一个名字来代替了,就是 gpla 杠 o d r 计算器,那么看到这个计算器的名字呢?我就知道啊,原来你这一个计算器呢?是啊,控制我们这个 g、 p、 i、 o a 这个 l 口,它上面的这个什么数据输出计算器嘛?这个 o d 啊,就是 output data register 的一个缩写, 这是输出数据计算器,那么这就是我们这个计算器映射它的一个好处。就是看到这个名字啊,我就知道你这个这个计算器是干嘛的?如果没有这样的一个计算器映射,那么我们这个 s、 t、 r 呢? 他可能有上百上千个净水器,是吧?那么每个净水器都是这个零啊,这是什么什么什么什么什么什么什么,那么每个都是这样子,那么几百个,你想一下,你看起来是不是完全不知道哪个净水器是干嘛用的? 但是我把它命名为这一个之后呢?我看到这一个我就知道他干嘛用的,这就是我们这个计算器映射的一个好处。

用 q 五新建一个 stm 三二工程,目前 stm 三二开发方式主要有三种,一、直接操作寄存器方式二,使用标准库方式 三、使用 hoco 方式。直接操作寄存器方式是我们直接配置寄存器程序,执行效率最高,但是由于 stm 三二结构复杂,这种开发方式不推荐 使用。标准库就是使用 st 官方封装的一些操作寄存器的库函数,让我们提高开发效率。 本期内容就是使用标准库创建工程。最后一种 hel 库方式就是可以使用图形化界面配置,可以快速入门,但是他隐藏了底层逻辑,不利于我们深入学习,可以学习标准库之后再去学习这种开发方式。 我们现在开始创建工程,这个是今天要用到的标准库,如果有需要可以留言我之后可以发出来。这个是已经解压出来的文件,我们打开看一下, 这个内部文件夹就是今天所需要的文件。由于工程文件比较多,所以我们开始创建工程前需要先创建一个文件夹,我们命名为 stm 三十二 project, 现在打开 q 五开始创建工程, 点击 project, 点击第一个,这里我们选择刚才创建的文件夹, 给我们的工程起一个名字,然后点击保存,这时候就会跳出选择芯片型号的页面,我今天 使用的是 stm 三二 f 幺零三 c 八 t 六,大家可以按自己的芯片选择相应的型号,选择之后点击确定这个页面,我们可以直接关闭。现在我们这个工程还无法使用,还缺少启动文件,我们现在去内部库中复制一下, 打开我们的工程文件夹和 lab 文件夹,启动文件都在 com sis 文件夹中,这里文件目录比较深,跟着我的操作找到启动文件, 这个 startup 就是全部启动文件所在,这里有很多编译器版本,我们选择 on, 将里面的文件全部复制下来。 在我们的工程目录中创建一个 start 文件夹,我们打开它,将刚才的文件 复制进来,回到刚才的 startup 所在位置,我们还需要复制这几个文件,也复制到 startup 文件夹中,我们还需要内核文件在列补文件夹, comes this 文件夹, cm 三文件夹, call support 文件夹中,将这两个文件也复制到 startup 文件夹里。 接下来回到工程,将刚才复制文件都加载到工程中,点击这个文件夹,我们改个名字,改成 start, 点击上方三个小方格,我们在这里添加文件,点击 add files, 选择 start 文件夹,点击文件类型,选择全部文件类型, 选择前面两个文件,点击 at 添加文件,这些 startup 文件选择后缀为 m d 点 s 的文件,点击添加 下方这些文件全部添加,最后点击关闭就可以了,然后退出就完成了。添加这里就可以看到添加的文件了, 然后我们需要把 start 文件加的路径也添加进来,点击上方的魔术棒,选择 c c 加加选项卡,点击这里。再点这里,我们选择 start, 点击确定, 然后点击 ok, 这样文件目录就添加好了。我们再添加一个妹函数,先在工程文件夹中新建一个 user 文件夹, 回到工程,我们添加一个 user 组,点击这里添加组,名字改成 user, 然后我们右键添加一个 man 函数文件,选择 c 文件 键,名字是 main 路径,选择我们刚才创建的 user 文件夹,点击确定。我们右键添加一个头文件,点击这里添加,然后我们快速写一下 main 函数, 我们点击这里编译一下,可以看到有很多错误,这是因为我们的编译器是版本六,切换到五就可以了,点击这里选择版本五,我们再次编译一下, 可以看到已经没有错误了,这时候已经可以使用寄存器方式开发程序了,我们是需要用标准库开发,我们还需要再复制一些文件进来。打开 lab 库文件键 家和我们的工程文件夹,我们先在工程文件夹中新建一个列布文件夹,然后在列布库文件夹中选择第二个文件夹, 点击打开。我们要把 src 和 ink 两个文件夹中的文件全部复制到我们刚才创建的文件夹中,然后回到我们的工程,把它们添加进工程,点击上方三个小方格,在这里新建一个名为 leave 的组, 按照刚才添加 start 文件的方法在这里添加我们刚才复制的文件,现在已经添加好 lab 文件了,这是已经添加好的文件,我们可以在这里把 lab 组向上挪一下位置, 现在我们再复制一下库参考历程里面的配置文件和中断入口文件,打开库文件夹和工程文件夹,找到 历程,这里就是历程了,我们打开选择第二个文件夹,在这里复制下面这三个文件到我们的 user 文件夹就可以了。然后打开我们的工程,把它们添加到我们的 user 组里面,按照刚才的方法添加进来, 现在整个工程文件已经复制好了,我们添加一下内部文件路径, 我们最后配置一下红定义,右键打开头文件,将文件拉到最下面,找到这个红定义, 将这个红定义复制下来。接着我们点击魔术棒,选择 c c 加加选项卡,将刚才复制的红粘贴到这里,这样就可以了,点击 ok, 关闭,回到我们的魅函数,现在工程已经基本完成了,我们编译一下 可以看到很多错误,看这些错误的意思是找不到文件,说明我们还有文件路径没有添加,我们按照刚才的方法添加一下路径,这里是没有添加 uso 文件加路径,我们添加一下, 我们再次编译一下,可以看到已经没有错误了。工程到这里已经创建好了,喜欢的小伙伴记得点赞关注哦,我们下期见。