粉丝8364获赞2.3万

ai 时代如何进行硬件开发呢? 只需要你提出需求, ai 即会帮你分析。你可以看到 ai 的 思考过程, ai 会通过检测找到你指定的硬件。如果你提出的是一个模糊需求, ai 也可以向你推荐对应硬件。为了帮你更好理解, ai 还会帮你生成一个架构图,帮助你理解项目设计。 你可以继续补充信息,也可以按 ai 的 建议创建项目。 项目创建后, ai 会自动安装上你需要的库, 然后它会了解各个库的用法,并根据你的需求制定开发任务。接下来就是按规划进行开发,并生成对应的图形代码。在代码编辑过程中,你可能会看到 ai 多次查找文档并进行反思,直到最后完成开发,提交给你最终的代码。 为了方便用户开发,软件还提供了很多辅助功能。例如,你可以通过右侧浮动菜单查看开发版芯片的引脚图,是不是比传统的图片查看方式更直观且漂亮。 如果你不知道硬件之间如何连接,还可以让 ai 生成一个硬件连接图。你甚至可以修改硬件连接,然后让 ai 根据你的修改重新进行编程。我们还设计了诸多巧思与工具,欢迎你的探索。 现在连接好你的硬件,再编一稍路,即可看到程序运行效果了。 这就是 alibi blocky 全新的硬件开发工具, ai 时代的想法实现引擎,希望你喜欢!

新手在学 atm 三二的时候,很容易忽视它的存储系统,其实当你找工作的时候,你会发现面试官特别爱问这块的问题,我把一些高频的题目给大家汇总好了,咱一个视频讲清楚。第一个问题,参数的变量存储在什么位置? 为什么 cos 的 变量它存到 flash, 而普通的变量呢?它存到 ssh。 我 们都知道在 html 开发的时候,经常是用 q 来写代码,然后编译烧录,最终我们的程序通过 s t link 烧到 flash 当中,这里边它就包含常量数据,用 cos 的 修饰的变量, 这个变量的值是不能修改的,所以你就存到 flash 当中,这样就可以节省 s m 的 空间。那如果我强行的修改函数的变量,比如说你通过一个指数强制的赋值变音器,它是不会报错的,运行的时候就会触发硬件错误,程序就卡死了。 第二个,这是一个特别有区分度的问题,如果说单盘机,它没有内置的一方皮容,比如说 f 三二 f 幺零三 c 八 t 六,而掉电保存配置数据,这是刚需。所以解决方案,软件模拟 用 flash 模拟一方,譬如这是它相关的地址段的表格,你要在 flash 的 末尾划分一小块区域,比如说四 k, 一 页等于一 kb, 那 四 k 就是 四页。用 flash 的 擦写函数,实现数据的掉点保存,而且注意要做页轮询,就是说你写满第一页,你写第二页,就是避免擦写同一页。三个问题, 战区一出,为什么会导致程序的跑飞?战区,它是存放函数的局部变量和返回地址,那战区一出以后,它就会覆盖相邻的全机变量区和堆区,那就导致函数的返回地址被篡改,那 cpu 执行了函数了, 找不到正确的返回地址,就会跳到一个随机的地址去执行,那程序不就跑飞了吗?第三个问题,如果程序烧写之后不运行,可能是什么原因呢?大家要这么回答。 itm 三二,它有三种启动方式,是不特零和不特一这两个引脚的电瓶决定的。那如果烧写之后程序不运行,大概率是不特引脚电瓶的设置错误。比如说不特零接了高电瓶进入到系统存储器启动,就没有执行你主 flash 当中的用户程序。或者说你的 flash 烧写地址错误, 比如说你烧到了零 x 零八零幺四个零,而 cpu 取指令的时候,它是从零 x 零八六个零, 那你读到的是乱码,肯定就不运行了嘛。当然也可能是你的主辅来使烧写失败,我们可以通过系统处理器启动,然后重新串口烧写程序, 这是我们常说的旧专。第五个高频的面试问题,为什么在我们的单盘机程序当中,大数据会导致上电死机?因为数据的大小超过了 sm 的 容量限制。你比如说 c 八 t 六,它的 sm 是 二十 k, 那么地址段从这开始零 x 二,后边跟七个零,那么结束。地址零 x 二,三个零, 那么四三个 f, 编辑的时候,编辑器它不会检查 sm 的 容量,但是上电以后, cpu 访问它超出了 sm 的 这个地址,就会触发硬件故障, 程序就死机。第六个问题,系统处理器和主 flash 它有什么核心的区别?它两者其实都是 flash 非意识性存储,主 flash 是 用户可读写的核心存储,区 分用户的程序和一些固化的数据地址范围,手册上都写了,而系统存储器它是厂家专属的,只读 flasher 分 区存的是 s p port loader, 仅用于串口烧写和旧砖,它不占用这个主 flasher 的 空间,地址是独立的。单片机其实不难学, 给大家准备了成套的大难题自学资料,这里面包括自学路线图,几个核心必须要搞定的知识,像 c 员 s m 三二走线协议,还有我们实习找工作必须要有的项目,常见的简历的模板,高频的面试题,有需要的小伙伴你可以预约领取,学起来,加油!

首先我们接上 slink, 接下来进入了我们的桌面,我们可以对年月日时分秒进行更改, 下面进入的就是我们设计的 ui 界面,还是比较丝滑的,我们接下来进入我最喜欢的游戏模块吧, 谷歌小恐龙, 这个是我们的姿态解算, 可以感受出我们实时的状态。 下面还可以进入水平一功能,它能根据水平位置显示我们。 接下来就是我们手表的其他功能,后面的我们直接进行展示, 主包所有的功能还没有开发完毕,还没有进行焊接,点个关注不迷路。

今天就给各位正在学习潜入式或者是准备入门潜入式的同学分享一下我在学习潜入式这段时间所用到最多的三款开发板,大家可以参考一下。首先就是 esp 三二这款开发板,这款的话应该是很多入门同学最先接触的一个版的, 我刚开始做互联网项目的时候,老师最先推荐的也就是它。呃,它对核心的优势其实就是自带 wifi 和蓝牙模块,这一点对做互联网项目是比较友好的,而且它还省了很多接线和调试的麻烦。 那首先说一说它的优点吧,它的优点就是它的性价比很高,一块 esp 三二的开发版其实就几十块钱,对于我们学生来说的话其实是比较友好的。 第二的话就是他的上手难度低,配套的开发资料也特别多,就算是新手也能快速入手。还有就是他的无线通信功能集成度比较高,做互联网小项目的效率是比较高的。 那但是缺点的话,他现在是一款比较基础的开发版,所以说他的性能是比较相对有限的,而且他做一些算法处理,还有做任务并发的一些项目。 呃,有点就是力不从心,大家也可以理解为它是更适合入门学习原先开发的一个开发版。接下来就是 stm 三二 s 四零七这款开发版 也是我平常做项目用到最多的一个开发版,它是 stm 三二里面属于中高端的一个型号,更加适合我们 进阶学习潜入式的同学来用。呃,它的定位的话要比 esp 三二要更高性能一些,在功能方面的话,它的最大优势就是外设的资源其实是非常丰富的,而且支持多种的通信接口,比如说 spi 啊, iphonec 啊, uart, 看总线这些工业常用的这些通信协议, 适合做一些呃需要精准控制和高速传输的这么一个项目。优点就是它的性能是十分强大的呃处理算法,处理复杂算法多任务的时候比 esp 三二要流畅很多,而且工业级的稳定性也靠谱。 其次就是它的学习价值是非常高的,如果你要是掌握了它的使用的话,其他开发版差不多是几乎是没有问题的。 缺点的话就是它的价格是比较贵的,一块 s 四零七开发版大概是一百多到两百块钱,比 esp 三二的话要贵一倍左右,而且它的上手难度是比较大的。相较于 esp 三二,它的计算机配置还有外设驱动是更加复杂的,刚开始学的时候需要花更多的时间去理解 它,更适合有了初步的实践基础到进阶的同学去使用,而且它还需要额外接 wifi 或者蓝牙模块,接线和调试也会麻烦一些。最后就是这款 cortis a 九开发版,它属于侵入式 linux 开发的一个范畴,是我们学到进阶阶段所接触的适合更复杂的智能设备项目。 在功能上的话,它最大的特点就是可以运行 linux 操作系统,比如说 uboot, adero 这些,能实现复杂的多任务管理、图形界面开发、网络编程、数据库操作这些功能。 它的优点的话就是它的性能非常强大,功能非常全面,能处理复杂的呃 linux 项目,而且学习这款版子的开发能直接对接企业的 呃,进入是 linux 开发的一个需求,就业竞争力非常的强。这个开发版还有就是我认为它的扩展性是比较好的,通过 linux 系统的驱动框架,能够更好的对接各种外设,然后开发的频率也高,能培养完整的 linux 开发系统这么一个思维。但是它的缺点也是很明显的,这个版子价格是比较贵的, 一个开发版大概是在几百块,是这三款里面也是比较昂贵的。第二就是它的上手难度是比较大的,需要掌握 linux 系统的基础,还有 c 加加编程,内核驱动开发等很多的知识点, 入门门槛比较高。其实我这里不建议新手入门选择这款开发板,建议先从单面机的基础打牢之后再可以学习这款开发板。第三就是它的开发环境比较复杂,需要搭建呃,变异环境啊,配置内核还有移植文件系统,刚开始接触的时候会觉得非常的繁琐, 不过呃,可以慢慢来。总结来说的话,其实这三款板子的话,如果是想新手入门的话,可以先选择呃 esp 三二这款开发板,先熟悉单片机的基础,做一些互联网的小项目, 进阶学习单片机的话,我推荐大家使用呃, stm 三二 f 四零七这款开发板,它的知识点是最核心的,而且应用场景也是最广的。 接下来就是如果你要是想深入学习潜入式 linux 开发,做复杂的智能设备项目的话,比如说智能监控啊,潜入式服务器这些,你可以去尝试 qfta 九,它能把你从底层到应用层的完整开发流程都学会。

呃,好的,我们现在演示一下我们这个项目,然后这里是啊,这里反光啊,这里是太阳啊,那个灯反光。好 啊,这里是一块 s t m 三,还有斐乐六三的一块最铜板啊,啊,这里是一个供电线,这里是一个 esp 点 e s 的 一个 wifi 模块啊,这里是一个零点几六寸二的显示屏。 好,这里四个按钮。好,这里是,这个是我们 h x 前摇的一个啊,穿透魔幻的一个线啊,好,呃,它是这个样子的啊,我这里垫垫了一张纸。 好,嗯,呃,门重启一下,好,重启一下,我们刚开始食材触使化,它会提升,我们不要啊,不要触碰好,触使化完成,然后就可以进入我们一个连接 wifi 的 一个页面, 我们啊使用我们手机开启一个热点啊,账号叫一六米,密码一二三四五六七八九。好,它连上 wifi 之后就可以进入我们一个正常的显示界面。 啊,啊,正常显示啊,第一行我们的是数,第二行,是啊,四个点,现在是它在测量,然后零的时候它是一直在测量的意思啊,那它不会说有那个显示。 好,我们啊,先先讲按键好,按键一是我们这个啊去皮啊,不过有时候他去皮会有点问题,所以说尽量尽量,等这里有问题了再去去皮啊,比如说我现在点下去皮在这里踏好,他这里可能会突然跳一下这个复数啊。

你有没有遇到过这种情况,代码明明写对了 stm 三二的引脚,就是死活点不亮外省。又或者在写 i 二 c 驱动的时候,为什么总要加上那两个烦人的上拉电阻? 大家好,其实很多硬件玄学问题都藏在微控制器的 gpio 配置里。今天我们就以最经典的 stm 三二 f 幺零三 c 八 t 六为例,用透视的视角一次性搞懂它的四种核心输出模式。 首先是最常用也是最强悍的通用推挽输出。我们可以把引脚内部想象成有两个开关, 上方是连接 v d d 的 p m o s, 下方是连接地线的 m o s。 当单片机想输出高电平异时,上方的 p m o s。 导通下方的 m o s。 关闭,电流就像水一样被推向外部,这叫推。当需要输出低电平时,情况反转, p m o s。 关闭 m o s。 导通, 外部的电流被拉向地线,这叫晚。推碗模式的好处是,输出高低电瓶都很硬气,驱动能力强,非常适合用来直接点亮 led 或者驱动电机控制芯片。了解了推碗,我们来看看第二种通用开漏输出。 在开漏模式下,上方的 p m o s 被硬件直接禁用了,不起任何作用。这就好比拔掉了连接高电瓶的开关。这就导致了一个有趣的现象,当 m o s。 导通时,它可以正常输出低电瓶。 但是当 m o s。 关闭时,由于上面没有 p m o s。 帮忙,拉高引脚就变成了悬空状态,也就是电子学里的高阻态。 所以开漏输出。要想输出高电瓶,必须依靠外部接一个上拉电阻。这看起来像是个缺陷,但它却赋予了开漏模式两个神奇技能, 第一,实现电瓶转换,你可以外接五 v 的 上拉电阻来驱动五 v 的 气。第二,实现线与逻辑,只要总线上有一个设备输出低电瓶整条线都会被拉低,这就是 r c 通讯防冲突的基础。理解了底层的推挽和开漏,最后两种模式就迎刃而解了,那就是负用推挽和负用开漏。 在通用模式下,荧角电瓶是由我们的代码写寄存器 o d r 来直接控制的,但是像定时器输出 pwm 波或者串口,硬件发送数据时速度要求极高,不能让 cpu 慢慢去写寄存器。 于是单片机内部通过一个多路复用器把引角的控制权交给了片上外设,这就是复用的含意。外设接管控制权,但底层的输出电路依然可以选择是推挽还是开漏。最后我们来总结一下这四种模式的经典应用场景。 通用推挽,驱动力强,点灯或者单向发送信号首选通用开漏必须外接上拉,适合软件模拟 i r c 或者做电瓶转换。副用推挽控制权交给外设,用于输出 p w m 波或 sp i 数据。 副用开漏同样交给外设,但专攻需要限于逻辑的硬件 i r c 使用。下次写底层逻辑和配置 g p i o 结构体的时候别再选错喽。

啊,首先呢是要找到它的这个函数,就是它的 a、 d、 c 的 一个 通道的一个声明,一个函数啊,这个函数呢就在本身呢啊,就是这个函数 通道 config 啊,我们看一下,我们首先呢同样的我们可以先把它编辑一下,编辑一下,我们来找一下啊,刚才是没有错的,我们找一下 a、 d、 c, 点 c, 然后我们勾到点 h 里面,然后在最下面 啊,这是一个它的通道的一个设置啊,我们这里面首先要将它复制一下,复制一下,然后呢复制一下,然后我们跳转到我们的 a、 d、 c 中,哎,放到这儿 我们可以 f 十二跳转过去看一下。首先呢我们这里面第一个呢,看到我们的 adc x, adc x 不 用选,我们这里面用的是 adc 一, 所以这里面就是 adc 一, 这第二个呢是我们的 adc 通道,我们这里面从十四、十五、十六、十七啊,这几个通道还有个十八啊,这个十六、十七、十八呢,我们可以去具体去看一下,具体的是用的,用的是哪一个通道 啊?然后呢我们还有说是这个这个选项呢,我们是他的一个顺序啊,我们是从一二、三四啊,我们一共有四个,所以说我们呃第一个的话,如果是这里面是一的话,也就是说他是从一开始,第二个的话就是从第二个开始,然后第三个呢,以此类推,往后的话第几个就是第几个开始 啊,然后最后一个呢是我们选择,一般选择是一个四八零的一个这样的,所以说,嗯,那我们这几个变量知道之后,我们可以来填写一下 a、 d, 首先呢第一个是 a、 d、 c 一, 然后呢第二个呢我们是它的通道啊,我们看了手册,我们首先用的是十四通道啊,十四通道, 然后呢呃,接下来呢,我们就是说它是第几个开始转换呢?我们第一个转换,然后呢我们下一个, 下一个是我们选择是它的四八零 啊,就这样的一个过程啊,我们这里面这这一个就小了,然后我们使用的是一个十四十五,还有这个 这两个啊,温度传感器以及他的一个参考电压一个传感器,这个在哪呢?我们可以看一下啊,我们勾通到我们的点 h 里面看一下,嗯,我这一下找一找 啊,他这里面是有声明的,大家可以看啊,我们这里面定义呢,如果说我们使用的是啊四零几或者是四幺二啊,或四幺三,这样的情况下,我们这个温度这个通道呢就是我们的十六通道 啊,也就是说我们可以直接用使用通道,然后呢我们的参考啊,如果是其他的呢,我们就是十八通道啊,然后这是我们的参考电压,参考电压,我们是十七通道啊,是这样的一个过程,所以说呢我们正常呢啊,运用的是十四十五 啊,电流电压十六呢是我们的温度通道,然后呢十七呢是我们参考电压通道啊,是这样的一个四个通道啊,这样的话大家就知道了,所以说呢,这里我已经带大家找完一些这些,然后之后呢我们可以直接把它复制过来, 就不不带领大家去写了啊,会了一个之后呢,我们其他都可以,我们的材料周期都是选用是四百八啊,所以说一下里面是会报错的,嗯,这个注试呢,我们可以把它弄上来 这样的一个过程,调整一下它的格式, 然后呢接下来呢接下来是怎么操作呢?接下来是我们看一下,我们还需要开启这个温度传感器的一个使能,然后呢还需要开启他的 e o c 啊,就转化结束位的一个使能, 这两个啊,这两个这个这个温度传感器这个使能呢是必须要加的啊,所以说这个一定要注意一下,还有这个结束位,这个 结束标志位也是必须要加的,最后呢还有一个就是说 adc 的 一个开启它也是要加的,所以说这个后面这三个呢缺一不可, 这个要大家要注意一下。接下来呢我们的 adc 呢是已经写完了,但是呢我们 可以说直接连上就可以用吗?是不可以的啊,不可以的话我们来看一下还需要写一个什么函数,我们需要写一个 a d c get value 啊,这就是一个函数,可以随便。


嘿,各位爱爱编程的朋友们,欢迎我回来,今天呀,咱们要一起当一回代码侦探,去破解一个我们几乎每天都在用,但可能从来没想透过它背后秘密的魔法,没错,就是 malok 这个函数, 是不是感觉就是这样?对于我们绝大多数人来说, maloc 给人的感觉真的就跟一个有求必应的内存喷泉一样,咱们只要喊一声 maloc, 一 千,哎,一块内存就递过来了。再喊一声 maloc, 五千又一块内存到手了,好像它背后的资源是取之不尽用之不竭的。不过等一下, 这真的只是魔法吗?还是说这背后其实藏着一套我们压根就不知道的特别精密的极致 maloc? 它到底是从哪儿给我们变出这么多内容来的呢? 好了,侦探时间到,要想揭开这个谜底啊,咱们得有个给力的工具。今天我们的放大镜就是 stress, 用它我们就能清清楚楚地看到我们的程序和 linux 内核之间每一次秘密沟通的全过程。这些沟通就是我们常说的系统调用。 好的第一个实验场景来了,非常简单,我们就写一个循环,每次呢都只跟 malachi 要一小块内存,然后看看究竟会发生什么 好,咱们用 s trace 把它跑起来看。结果出来了,在咱们自己的打印信息之间,反复出现了一个神秘的家伙, brk。 嗯,这就是咱们找到的第一个关键线索。看起来对于这些小块内存的请求, melake 耍的花招就藏在这个 brk 调用里面。 那么如果我们胃口大一点呢?在第二个实验里,咱们把程序改一下,让它一次性申请一个大火,足足五万币的内存, 再一次用 stress 运行。哇哦,有意思的事情发生了。你看看 break 调用,居然一个都没了,完全不见了,取而代之的是一个全新的系统调用 m m a t。 这下子谜团好像更深了。 这就引出了咱们最核心的问题了,为什么门 lock 像一个工具箱里有两套工具的老师傅会根据活的大小挑不同的工具来用呢? 它到底是怎么做决策的?别急,咱们先把这两个工具 break 和 m map 挨个拆开来看个明明白白,咱们先来解剖 brk。 要想搞懂它,就必须先认识一个核心概念,叫做程序中断点。英文是 program break, 你可以把它理解成是咱们进城堆内存区域的一条边界线,你就把这个程序中断点,想象成堆内存的最高水位线,在这条线以下的所有内容都属于你的程序,可以随便用,很安全。 但你要是想不开,试图越过这条线去访问上面的位置区域,那程序很可能就会直接收到一个断错误,然后就崩掉了。 brick 和他的好搭档 sbrk, 他 们的工作原理啊,说白了就是简单粗暴。当 my log 需要更多空间来满足那些小内存请求的时候,他就调用 sbrk 跟内核说,哎,哥们,把那角水位线给我往上抬一抬, 这样一来,堆空间就变大了。反过来也一样,如果想把堆缩小点,就传个负值进去,水位线就降下来了。它的本质就是通过移动一条线来调整堆的大小。 不过呢,这里头有个很关键的实现细节,在咱们现在的操作系统里,核心管理内存,它不是一个字节一个字节地管的,它的基本单位是页,在 linux 上,一页通常就是四 kb。 所以 就算你的程序只申请了一个字节内核,也会大方地把那个程序中断点直接推到下一个四 kb 的 边界上,一次性给你一整页,这就是咱们常说的内存页对齐。 好了,这套拱地摊一点点扩大堆内存的玩法咱们算是看懂了。那对于那些大块头的内存请求, mmap 又扮演了一个什么样的角色呢? map 的 玩法就完全不一样了,它根本不去碰堆的那条水位线,它更像一个空间魔法师,直接在进程的虚拟地址空间里,凭空给你开辟一块全新的独立的匿名内存区域。 这块区域跟堆是完全分开的,有自己的地盘。你光看 mapp 的 这些参数就知道这家伙有多强大了, 你可以指定要多大设置读写权限,甚至还能决定这块内存到底是进程自己私用呢,还是可以跟其他进程共享,用来搞进程监通信。这种精细的控制力,是 brk 那 种简单粗暴的方式完全给不了的。 好的,现在两个大招儿我们都见识过了。那么问题来了, malik 这个聪明的内存管家,他为啥要在他俩之间做选择呢?这背后的智慧到底是什么? 答案其实就是效率和管理的权衡。你想啊,对于那些几百字节的小请求,如果每次都用 imap, 那 开销就太大了,就像为了接几滴水儿,就专门铺一条新水管,不划算。 所以这时候用 brk 一 次性批发一大块儿对内存,然后 malik 自己在内部做零售,切成小块儿分出去就高效多了。 而对于几兆的大块儿内存, a map 的 好处就来了,它分配的内存序域大小刚刚好,释放的时候也特别干脆,一个 mi map 调用就把整块儿地还给操作系统了,能完美地避免对内存产生很多碎片。 所以啊,看到这儿,谜底终于揭晓了。 mullock, 他 根本就不是什么魔法,他是一位经验老道而且极其聪明的资源调度大师, 他会审时度势,根据你申请的内存块头有多大,为你选择最经济、最高效的底层实险方式。小请求做 brick 批发,大请求做 mmap 定制 好,咱们快速地来划一下今天的重点。第一, mylock 自己不生产内存,它只是内存的搬运工,是通过 brk 和 m m app 这两个系统调用去向内核申请。 第二,小内存走 brk, 大 内存走 m m app, 这就是 melaka 的 核心分配策略。最后,你得永远记住,在内核的眼里,所有内存操作的基本单位都是四 kb 的 业。最后,给各位想深入研究的同学一个特别重要的忠告, 你可千万别在自己的应用程序里直接去调用 brk 或者 sbrk, 因为 marlock 已经把堆这块儿地盘当成是它自己的了,你贸然插手只会把事情搞得一团糟。 如果你真的有特殊的需求,需要自己管理大块儿内存, mapp 才是那个更现代、更安全也更强大的选择。 好了,现在你已经掌握了 marlock 背后的这些核心购机儿了,这就留下了一个更有意思的问题, 如果让你从零开始,你会怎么去设计一个可能比标准 malik 更高效,或者说是针对某一种特定场景优化过的内存分配器呢?这个问题就留给你去探索了。感谢收看。

的步骤,我们还可以去找我们这个,它是具体是怎么输出,是推挽输出啊,还是开路输出啊?那我们就去具体来操作一下啊,大家可以去找啊,再给大家先找几个,我们一样依旧是找到它, 找到它之后,然后具体是什么样的输出,我们找到后面, 后面啊, ctrl f 哎,找到了这儿 啊, p p 推碗 o d 开漏,我们这里使用的是推碗输出,我们布置一下 啊,现在我们是输出模式输出,然后输出输出模式,然后是以什么形式输出呢?是推碗输出啊, 然后呢就是它的引角啊,刚才这里面呢啊,我们在手册里面是看到过我们这个引角呢,它是啊, g p l e 啊, g p l e 的 零啊,一直到 g p l e 的 二啊, 零一二三啊三个,一共是四个引脚啊,零到三,这里呢,我先举一个例子,也就是说我们先把 g p l 零写了,然后呢具体就怎么写这里面呢,其实它也是有格式的啊,大家可以看一下,这里面有一个 三十二位的啊,这样一个 g p l 引引角,可以看一下拼音字母的定义啊, ctrl f 找到下一个,你看它这里面有很多啊,但是我们这里具体呢需要是 g p l 零到三啊,我们这里面直接先复制一个, 找到零保存一下,保存一下之后呢,然后也就是说啊,这就是我们那个 g p i o 零引角, g p i o e 的 零 拼,零拼零引角,然后呢我们这里面还需要设置一下上下拉,上下拉呢啊,我们直接选择上拉就可以, 同样的步骤, 呃,上拉, 然后最后是它的速度,速度呢?一样的步骤,还是找到它的速度, 我们这个速度呢可以选择一百兆赫兹啊,高低都无所谓,尽量用一些高的速度或者快的速度就可以啊,这个都还好,影响不大, 一百兆赫兹, 然后呢这里面呢你我们的出口话呢, e l e 出口话 就写完了,然后呢我们可以翻译一下,翻译一下之后呢,大家可以看一下, 编一下是没有错误的。然后呢但是我们还没有,现在还没有成功啊,我们还需要进行一下操作啊,这个操作是怎么呢?首先呢是它出水化完之后,我们的 led 灯呢是开始亮的 啊,一开始就亮,然后呢我们首先要设置一下我们那个 gpo 呢啊,它是也就是说让我们的 led 灯一呢,首先属于熄灭状态 啊,这个熄灭状态呢,我们可以找到我们的 g p i o 啊,我们找到一下我们的 g p i o 点 c 啊,点 h 里面,点 h 里面,在最下面,同样在最最下面,最下面我们可以看一下这些函数啊,比如说我们这个,这里面五百六十九行啊,这里面有一个 g p i o set base 啊,我们设置一下 g p i o 的 引角啊,还有 g p i o reset base bose, 就是 这个是升高,这个是拉低啊,我们这里面呢,首先大家想一想,我们应该是使用升高还是降低,要一开始状态应该是属于应该是一个拉, 我们本身是应该拉低,如果说我们设置拉低的话,那他们就是也就是说一开始的时候灯就是亮的啊,那我们这里只能让他先是拉高状态啊,拉高状态之后我们才 才能够让那个灯是先灭的状态,然后我们在其他的啊,在慢函数里面啊,我们接下来在慢函数里呢会设置一下,让它灯亮或灯灭啊,然后呢这里面同样的像我们抽象函数一样啊,这里面他是说啊有两个,首先呢是 g p o 的 具体的, 好,那这里就就是 g p o e 了呗,然后还有个具体的引脚,那我们首先把这个复制过来,放到我们这个下面,然后括号,好,这里面我用的是中文啊,所以它会有问题, 建议大家呢这个,呃这写的时候呢一定要注意一下啊,是中英文啊,一定要切换过来。然后呢我们首先呢第一个就是 g i o e, 然后呢第二个就是它的引脚,我们这直接就可以复制过来。好, 首先呢设置 led 灯是熄灭状态。 好,这样呢我们的一个 led 灯呢触手画也就可以写完了,首先呢是它的这些,它的首先第一步呢是我们要开启它的时钟,第二步呢我们是根据它这个时钟啊, 时钟完之后我们来具体的去操作我们 g p l 的 触手画啊,在这里大家可以去看手册,也可以看我们的提供的 demo 啊。

以后夹打开 libraries c m s s c m 三 device support st stm 三 f 幺零 x startup up arm, 那 这些就是 stm 三二的启动文件, stm 三二的程序就是从启动文件开始执行的,我们把这些文件全部复制,然后保存到文件夹里。 可以看到这些就是我们刚才新建工程自动生成的文件啊,那如果直接把启动文件也放在这里,就有点太乱了是吧?所以我们需要新建一个文件夹,可以叫做 start, 然后把启动文件粘贴到这里面。 接着我们回到库的 s 幺零 x 点去和两个 system cat 的 文件,这个 s 幺零 x 点去就是 s 幺零 x 幺的外设计算器描述文件,它的作用就跟五幺零 t 点去一样,是用来表示 s 幺零 x 幺 二有哪些计算器和它对应的地址的。这两个 c c 文件主要用来配置中的 s 幺零 x 幺二组成的,何时就是 c c 模块的地址。那我们把这三个文件复制下来, 也粘贴到 start 文件夹下。接下来因为这个 c m 二是内核和内核外的设备组成的,而且这个内核系统的描述文件不是在一起的,所以我们还需要添加一个内核系统描述文件。我们可以打开 c m 三 core support, 这两个 c m 三文件就是内核的系统描述,当然它还带了一些内核的扩展,所以多了点 c 文件,我们把它俩复制下来,也粘贴到 start 文件夹 为止,我们工程的必要文件就复制完成了。然后我们回到 q 软件,把我们刚才复制的文件添加进来,我们可以点击选中这个搜索 group, 然后再点击一下,把这个主改名字,也叫四大,接着右键 选择添加已经存在的文件,到主页打开四大文件,把下面这个文件过滤器,选择 files, 这样就能看到文件里所有文件。我们首先添加一下启动文件,这个启动文件有很多分类,我们只能添加其中一个,我们视频所使用的,需要选择后缀为 m b 点四的启动文件。至于启动文件怎么选择,我们选中它,点击 id, 然后剩下的点 c 和点 q 文件都要添加进来, 我们可以按住 ctrl 点,然后一直选择它们,点击 id, 然后 close, 这样我们按到文件里面的文件添加好了,这里的文件都是 s 幺三二零,最基本的文件是不需要我们修改的,我们添加进来几个,那大家可以看到这个文件图标上带的小料啥?这个意思是它是个只读文件,我们可以打开试一下,这些信息都不让我们修改它。 最后我们还需要在工程选项里添加上这个文件的头文件路径,要不然软件是找不到点数文件的,我们点击这个魔术按钮,打开工程选项,在 c c 加加里找到这个 include process 栏,然后点击右边三个点按钮,在这里新建路径,然后再点三个点按钮,把十二点的路径添加进来点, ok, 这样就把这个文件的头文件添加进来。接下来我们再新建一个命函数,看看这个公式是不可行啊。我们打开工程文件夹,然后新建一个文件夹, 选择 c 文件名字叫 main, 下面录进去一下,要选择右手文件夹,要不然不能放在文件夹外面的,然后点击 alt, 这样我们就有了 main c 文件。那在工程文件夹的右上角也可以看到我们新建的 main c 文件哈。 看看库函数和计算机的操作方式有哪些区别。我们打开库函数文件夹,在这里新建一个文件夹叫 library, 用来存放库函数。接着打开固件库的文件夹,打开 libraries, s t m 三二幺的启动 s r, c, 这些就是库函数的源文件。这个 m s c 是 类格式的,其他的就是外部格式了,这个 m s c 是 空的意思,看来这个公司还不够的啊,把类格式都发到查下面去,那么按 ctrl a 全选,然后复制在 library 文件夹下粘贴, 然后再打开库键库的 n c 文件夹,这些是库函数的头文件,我们继续 ctrl a 全选,然后复制在 library 文件夹下粘贴,接着回到 q 软件,同样在它里的除掉键,然后添加主改的名字叫 library, 再右键添加已经存在的文件,打开 library, ctrl a add, 这样就把所有的库函数都添加进来。但是对于这个库函数来说,现在还不能直接使用,我们需要再添加一个文件,我们打开库函数文件夹,打开 project stm 三二,可以看到 stm 三二 f 幺零 x c o n f 点去和两个 at 结尾的文件, 这个 c o f 文件是用来配置素材,素材的包含关系的,另外这里还有一个三个点的素材,这是所有素材都需要的。我们把这三个文件复制下来,然后粘贴到图层的右侧目录下,接着回到 q 软件,在右侧处理,把刚才那三个文件添加进来。 最后还需要一个重定义啊,我们可以在这个头文件右键打开文件,然后打到下边,按到这个语句,这是一个条件定义啊,意思是如果你定义了使用标准外设驱动这个柱范,下面这个 excel 点去取取才有效。所以我们还要复制一下这个柱范,然后打开图层选项, 在 c c 加加的 define 栏目粘贴这个字儿,这包含标准外设库,也就是库函数。当然还有下面的后续路径也忘了,把这个 user 和 library 目录的路径也都添加上, 然后, ok, 这样我们记错了,我们可以看一下这个 library 里面的库函数,把这些不用改的都放到最上面再看一下。那我们编辑看一下,大家多打 第一次就知道怎么 word 文件了,但是我会把 word 文件夹进来,比较方便,而且 word 文件也是需要经常打开看的,所以我比较喜欢把所有文件都先加进来。第四步是 word 选项, c c 加加 eucla 的 pass 类型声明所有包含头文件的文件。这一步是因为这个 stanley library 等文件是自己建的,太过于他并不知道,所以你要用自己文件夹里的 word 文件,就必须声明一下路径,那最好就是你自己建的所有文件都声明一下,这样就不会出现 word 文件找不到东西了。第五步是 word 选项, c c 加以泛类定义,使用标准外驱系统的手册, 这是整数函数的前提下,整数函数就必须定义这个。另外其他工程在这个位置还声明了一个 s 幺幺零 s 杠 m t 的 部分,它对我的调查结果自动就把我们声明好了,这个不需要在额外声明的,所以这个函数的。