粉丝1745获赞8085

今天解锁 stm 三二调试新姿势, sega rtt, 现在花五分钟来移植,这是一个项目工程最小样例,直接打开工程例已经初步化了, system take 时钟还有 for 循环。先翻译一下,看有没有报错。 好,没问题,这是 s t m 三二标准库外设驱动文件夹,这是内核启动库文件。好,现在直接到 sager 安装目录中拷贝原码过来, 打开 glink 目录下的 sample 文件夹,找到最后一个 r t t 文件夹,点击进去,这个压缩包就是我们要的原码了,拷贝到工程目录下解压压缩包可以不要了,点击进去删除掉没用的文件,剩下 r t t 文件夹还有 css 文件夹就是我们要的了。 拷贝文件加名称,在工程项目管理里添加一个文件,加粘贴名称,点击 ok, 双击文件加名称,添加文件,找到二 t t 文件,加里面的 c 文件都添加进来,打开 c s cos 文件,加,找到后缀为 cos 的 文件,双击添加。 操作完成后,这里会有三个文件翻译,试下有错误,找不到头文件好办,添加进来, 选择二 t t 文件夹。 ok, 再编一次。好,没问题了。遗址完成后,验证下,找到头文件,拷贝出来,粘贴到 may 文件,然后从头文件进去查找下接口, 这里有很多函数定义,我们找到这个 in need 的 这个初设函数,拷贝出来,回到 may 文件,让其在 may 函数中初设化,然后继续在头文件中找到 sega r t t print 函数,拷贝,粘贴在初设函数后面,运行 好,使用日制通道零,后面是要输入的日制内容,翻译好没问题,稍露,运行 完成了。那在哪里看输出的日制呢?打开程序,找到 siger 文件夹,找到 j linktt viewer, 这个我用的比较多,所以固定到了开始菜单好,打开这里需要选择我们用的芯片型号, 点击 ok, 显示出来了,选择通道零拉大下。下面验证下这个函数的一些用法,拷贝下更改下内容, 翻译没问题,稍录好,运行正常。 这个日制打印函数名较长,函数还有个通道参数,不妨改造下。 这个文件是我写的一些常用方法,拷贝进来,放到 r t t 目录下,更改下头文件,引用 跳转到头文件包含了日制头文件,这里做了一些红定义开关,可以灵活使能常规输出,高量输出,成功输出,警告输出、错误输出,十六禁制输出,重命名出示化函数。 log 输出用的最多的黑底白字成功输出。这里可根据自己喜好定义背景和字体颜色,其他输出类似。翻译 更改下出场函数,使用 log 函数替换,去掉通道参数,零拷贝一份。 warning 函数,视力 success 函数,视力 error 函数,视力 highlight 函数,视力。头文件,这里做了菜单配置,可直接在这操作使能翻译运行。试下 可以看到输出了不同风格的日制,去掉循环打印的干扰,重新翻译,稍录查看输出,这里输出了多种不同的样式。日制 sigma r t t 凭借其高速的打印速度和不占用外设等优点,被广泛使用于前期开发,开发结束后可以根据情况使能输出降低内存占用。好了,下期再会。


如果没有这块小小的芯片,这台机械臂会怎样呢?它就会向人类失去了某些重要的东西,被按下了暂停键。本期我将由浅入深,带大家用 stm 三二一步步搭建机械臂的控制核心。首先有请我给大家示范一下,如果将机械臂比作人体, s t m 三二会在其中的什么位置呢?仔细观察,你会发现,电机、结构件、上位机等等等等,它们最终都会聚到了同一个地方。没错,这个汇聚点就是本期我们要讲的主角,小脑和脊髓,哦不, s t m 三二 有很多朋友问我说,啊,爸爸怎么不用 esp 三二啊?爸爸,这是 gb, 能不能用 esp 三二?答案肯定是可以的,而且对于这个项目来说,这两个都差不多,那为什么最后还是选了 stm 三二呢?下面我就具体说说选择的三个原因吧。第一, s t m 三二的哈酷配合 s t m 三二 q mx 图形化配置工具,可以快速的配置好外设、时钟中断以及背后的计算器,开发效率非常高。第二,其从应用场景来说,在工业和机器人方向, s t m 三二应用更普遍, 自然而相关资料和生态也更多。而 esp 三二在互联网领域用的非常多,因为它原生集成 wifi 和蓝牙,非常适合联网和远程控制。最后一点嘛, 因为 up 上项目用的就是 esp 三二,所以想换个口味,不知道小伙伴们能看出 up 做的是什么吗?至于为什么要做这么个东西,就留给大家猜猜吧。 只有一颗芯片本身是无法正常工作的,还需要配合各种外围电路,比如金正电源、串口等。此外,本项目用到了看通信,这意味着还需要额外的看总线相关电路支持。 于是另一个让人头大的问题就来了,是自己画电路板呢?还是偷个懒,直接买一块现成的开发板?根据阿普以往的经验,在开发一个新产品时,我通常会选开发板来做原型。原因很简单, 产品开发是一件很复杂的事情,尤其是同时涉及软硬件的时候。因此为了保证开发效率,我们可以尽量把变量降到最少。如果硬件和软件我们都自己从零做,一旦出了问题,很难判断是软件问题还是硬件问题。 而开发版的硬件已经被别人验证过了,我们就可以专心于软件开发。如果后续有硬件要求,到时候就能用验证过的软件反过来支持硬件的开发。那拿到板子第一步是干嘛呢?当然是 接下来就由初代点灯侠我来带大家点亮第一盏灯。好,首先我们需要下载这两个软件,下载完成后,先打开 qm 三二, 启动。进入配置界面后,因为我们后面要用到调试器进行烧录,这里先把 g tag 打开。接下来配置时钟切到 r c c, 打开外部时钟。在配置前,我们先看一眼开发版的原理图,可以看到 s t m 三二用的是八兆赫兹的外部。金正回到 q b m x, 选择 h s e 外部时钟, 填入八兆赫兹,然后输入我们想要的系统主屏,软件就会自动帮我们匹配时钟方案。第一次可能会失败,没关系,我们再匹配一次,一般它就成功了。 接着再看原理图,作为点灯侠,我们得先锁定点灯,目标就决定是你了。红色 led, 可以 看到红色 led 灯是由 p c 五这个 g p l 口去控制的,所以我们在引角式图中找到 p c 五的端口,配置成输出模式, 然后在 g p l 口进行进一步配置模式,选择推挽输出,上下拉改成下拉,最后给它取个名,这样 pc 五就配置完成了。接下来配置项目信息,输入项目名,选择路径 id, 这里我们选择生成 s t m 三二 q 二 id 工程。 最后在代码生成选项中开启,为每个外设生成一对点 c 点 h 文件,方便外设管理和修改,这样整体的配置就完成了。点击生成代码,项目就创建好了。接下来就要用另一个软件了。 cube ide 启动后,首先会让我们选择工作区,这里得选择项目的上一级目录,接着进入界面后导入项目就可以科研点灯了。 我们打开密函数,在死循环里加入这段代码,它的意思是每隔一秒,先让 gbo 输出低电频,再输出高电频,这样 led 就 会一秒亮一秒灭,不断闪烁。最后我们需要将程序烧录到芯片里,点击运行 编辑完成后,软件会让我们选择下载方式。 up, 这里用的是调试器,这里顺带提提怎么使用调试器,画面里这个就是网上常见的 s t m 三二调试器,调试上会标注各个引角,我们主要连接三个引角时钟数据和控地,在开发板上找到对应的位置,接上即可 回到软件,我们点击 ok q i d e 就 会尝试连接调试器,稍加等待,当看到这行提示,就说明程序已经成功烧录了。恭喜你已经成为了一名合格的点灯侠,但真正的挑战才刚刚开始,一台六轴机械臂,光靠点灯肯定是不行的, 还需要完成关键角度控制、复位运动学逆解、 pid 位置跟踪以及和上位机通信等功能。如果这些都讲详细,代码 up 到明年的素材可能都有了。所以我还是从软件架构出发,先带大家理清楚整体思路,后面的具体实现自然就简单了,这就是我们机械臂的切入式工程。首先,进入命函数, 可以看到这里做了一系列的初设部分,里面有一个默认的起始任务,我们会在这个任务里初设 robot 模块。 在 robot 的 初识化过程中,我们创建了两个队列,两个任务。其中 robot c m d service 是 自创解析任务,其功能是根据指令的来源,调用指定的函数, 将指令归一成一个 event, 优先级较高。 robot control task 是 主控制任务,其功能是根据 event 执行具体功能函数,例如控制关节旋转,优先级较低。 c m d q 为自创队列,用于传递自创指令数据。 event 为事件队列,用于传递事件。这里就引出了两个重要的知识点,队列和优先级队列本质上是一段预先分配好的内存空间,可作为先进先出的缓冲通道,确保先存入的数据必定先被取出。在我们程序中,中断与任务以及任务与任务之间的数据交互,都是通过队列来完成的。 这种方式不仅能有效避免数据竞争问题,还能适应任务中断之间数据处理速度的差异。在 free artworks 中,每个任务都有各自的优先级。由于 cpu 在 同一时刻通常只能执行一个任务,高优先级任务可抢占低优先级任务的运行权。 只有高优先级任务主动释放 cpu 后,低优先级任务才有机会继续执行。此外,中断的优先级高于任何任务,能够随时抢占正在运行的任务,从而保证系统能对实时事件快速响应。 现在,我们将整个流程串联起来看,当串口数据到达时,串口硬件首先触发中断。由于中断的优先级高于所有任务,它可以随时打断当前正在执行的任务,直接进入中断服务函数。该函数会从串口硬件读取字母串数据,并将其放入字母串队列内,随后退出中断并释放 cpu。 由于自创解析任务的优先级高于主控制任务,调度器会立即唤醒自创解析任务。该任务从自创队列中取出命令解析为对应的事件并发送至事件队列。而主控制任务作为优先级相对较低的任务,仅当无中断活动且自创解析任务也未执行时, 才会被调度执行。他从事件队列中取出事件,并执行对应的控制逻辑。另外,若队列为空,自创解析任务和主控制任务都会自动进入休眠状态, 等待新数据到来,不占用任何 cpu 资源。这是通过中断加队列、加多任务优先级的协同机制。我们构建了一套层次清晰、能够自适应数据处理速度的 gb 控制架构。接着,我们以关节控制功能为例,带大家过一遍开发流程。假设我们通过串口给 mcu 发送这样一条支付 表示,让关节一转动五十度。这条字母串首先触发串口中段,中段函数会接收这条字母串,并将其放入字母串对列,随后字母串处理任务,从对列中取出该字母串,根据指令来源调用不同的解析函数进行处理。 像这条指令是串口发过来的,因此这里会调用 robotus handle 函数,将自创解析成对应的 event, 然后自创就会被解析成这样的结构体,通过事件队列发送给主控制任务,主控制任务再根据命令表去调用对应函数,也就是这里这个函数。 那这个函数做了什么呢?主要两件事情,第一,把关节角度转换成电机需要旋转的角度发送给对应的电机驱动器。 至于电机驱动器内部,对我们来说就相当于一个黑盒子了,驱动器会根据指令自行完成底层的控制和执行,到这里,一个关节控制功能就完成了。后续如果要加入更多的 g b 功能,我们只需要在现有的架构上继续扩展,从点灯到完整的 g b 牵引式工程,其实差距只在思想和架构上, 如果我们一开始多花些时间把它搭对,后面的开发就会轻松很多。那么本期视频到这里就结束了,感觉看完有所帮助的小伙伴还希望能点赞加关注,下期我们将介绍运动学和 pid 控制算法,感谢大家观看,我们下期再见!

哈喽各位同学,寒假时间一到,是不是有很多同学都想趁着寒假这段时间解锁自己的一些个硬核技能呢?我猜不少人把 stm 三二单片机列入了自己的这个规划当中,但是一想到自己要兼顾硬件还有编程,可能就会犯愁 到底从哪开始,该跟着谁学,从准备什么开始?别慌,今天我就把 stm 三二的学习之路给大家拆明白,跟着走,新手也能快速上手。同时我也给大家准备好了全套的单片机学习资料, 从 c 语言基础到 stm 三二实战项目全都有,有需要的同学直接扣六六六就好,我到时候直接免费分享给大家。其实呢,学习 stm 三二就像是盖房子,地基打牢了,后面学习的才能够不费劲。 很多人刚接触就怕门槛高,但是其实完全没必要,咱们把该准备的这些材料全部给它准备好。首先是 c 语言,不用啃厚厚的教材,重点吃透这四个知识点就行。含水指针、 结构体,还有数组,尤其是指南,在单片机开发的时候用到的地方非常的多,提前熟练,后续你在写代码的时候才能够少踩坑。然后是书店还有魔店,很多同学纠结书店魔店要不要先给他学透?答案是不用,前期呢?你只需要能够看懂你自己手里开发版的电路图就足够了, 知道 led 灯能够对应哪个引脚,哪个按键,要连接到哪个接口,然后就完全够用了,千万别因为这个事情把自己给全退了,完全没必要 d, d 打好了之后,接下来选择老师非常的重要。 b 站上呢,教 stm 三二的大神非常的多,但是风格差异非常的大,选对了能少走很多的弯路。 如果是纯小白,连单片机师什么的都不太清楚的情况下,推荐两位 up 主,一位是江雪科技,他的课程被很多人称之为入坑圣经,就像你身边有耐心的学长一样,手把手带你敲代码,非常的细致,新手跟着学完全不费劲。另一位是 kiss king, 他 最厉害的是用动画来讲知识点,像时钟这些容易让人听起来犯困的知识点, 听他一讲就变得非常的有意思,理解起来也更加简单一些。等有了基础想要深入学习以后,也想靠这个来找工作,就可以关注正点原子和野火。正点原子的资料非常的全,实战案例多到你练不完,根本能够帮你快速积累大量项目经验。野火电子他的代码风格特别的严谨,工程化思维非常的强,跟着学能够养成你良好的这些编程习惯, 这对以后的求知是非常的重要的。最后给大家准备了一张表格,把这四位 up 主的特点和他们的适用人群列的明明白白的,大家可以根据自己的这些基础对号入座。 其实说实话,没有最好的老师,只有最适合自己的,等你把基础和外设玩熟了之后,才想要提升自己的这些成长空间和薪资。推荐韦东山老师的这个 free r t o s 教程,现在的实时操作系统可是招聘里面的热门要求,接下来给大家梳理一套从入门到实战的四步学习路线,跟着走效率非常的高。 第一步,准备阶段,集中补 c 语言基础,重点练指征,把你自己的这些基本功来扎扎实。第二步,入门阶段,跟着讲解科技,或者是 kiss king, 把 gpl 端口、定时器这些常见的外设给它玩清楚玩明白,先从简单的这些点灯实验开始。第三步,学习 hellok 和 cube max, 这是官方的图形化配置工具, 能够大大提高你自己的开发效率,不用再写复杂的这些底层代码。第四步,实战阶段, free rts 挑战你这些复杂项目, 把之前学过的这些知识点全部融会贯通,真正形成自己的技术能力。如果觉得这四步太繁琐的话,也可以试试这一条高效路径,先跟着将学科技打基础,找到学习节奏, 再砍烟火的教程,去建立自己的工程思维和知识体系,最后直接上手做项目,边做边查资料解决问题,技术提升的会非常的快。最后再给大家强调一句,学习 stm 三二呢,最核心的工具不是教程也不是资料,而是一块开发板,光看视频背原理是没有用的,一定要自己动手去实践。把代码一个一个敲进电脑里,边 把程序烧进自己的开发板里边,亲眼看着 led 灯被你自己点亮,遇到 bug 再一点一点的排查解决。这个过程虽然非常的艰难,也会遇到不少的挫折,但是它正是你技术正在飞速提升的证明,比你自己单纯看识别的视频都要管用。好了,今天就给大家讲到这,最后加油,祝大家寒假都能够学有所成!

今天给大家讲一下如何入门轻型 steam 三二应该去学些什么东西,然后去哪里找资料和资源。首先我们应该具备 c 语言的一个 基础,我们可以去 b 站上搜索我们的 c 语言入门,然后选一个自己觉得还可以的老师去把 c 语言先打好基础。然后学了 c 语言以后呢,我们可以去学 江科大的 stm 三二,然后跟着他的历程走,你对 stm 三二就有了一个框架,然后有了框架以后, 我们可以去我们的这个庆世仿真实验教学平台去找我们的资料, 可以自己去学,就比如我要搞个流水灯,然后这边有电路图,你要复刻的话,你可以根据他的一个电路的一个连线,然后连好以后,然后把代码 直接下载下来。但是你你又说,哎,下载下来了,你不知道这个这个东西,它的代码,它的就是是干什么的,好,我们可以用到我们这个去 cam 的 工具,你就跟他说,哎,首先我们的都是从 main 来的嘛,你可以跟他说,请你 帮我阅读代码,并告诉我 这个项目是干什么的,以及用到了什么东西, 它会对整个的工程文件进行阅读,这样子的话就方便了你去读懂整个代码,可以看到它这里写了,它说这是一个 stm 三二嵌式开发的学习项目, 就是虽然当前的 main 点 c 只只是实现了简单的 led 闪烁的功能,但是它集成了大量的硬件驱动模块,等于说它的 这一边我们可以通过这个东西,然后去更进一步的理解代码,就比如你要,你要去,哎,比如你就不知道它的 main 点 c 是 干嘛的,你就点 main 点 c, 然后这帮我解释一下 在吗?然后你跟他说可以看到他把我们的这边的东西就是 led, led 的 灯出示话,他都已经全部把它给他给你讲清楚了,如果你不会的话,你可以继续去追问他。就是 其实学习三二的话,我觉得更多的就是去。嗯,学习别人怎么去写代码,就跟我一样,我原来也不会先去装模作样,然后 自己把它模仿出来以后,你自己才会有模有样。先去学习别人的怎么做的,然后别人的学好以后你才能去做自己的东西,同时他这里的话他也会有, 有什么呢?有我们的一些硬件的数电和模电的课时也可以在这里面学习。然后 aduno 的 话也是一样的, 你选择一个你想学的东西,然后去上面给它下载下来,就是数码管的 都是可以通过这里。哎,这里不是有一个诺下载成 zip 吗?你把它下下来,如果代码看不懂,你就把代码丢给 ai, 让他去告诉你这个项目是干什么的,然后怎么去调用的,这样子的话 对你学习三 r 速度的话肯定是要比自己要快很多的。然后你学了三 r 以后,后面的话你可以自己去学习硬件,对硬件的话你可以 可以去立创的开元广场这边的话有很多的开元项目, 你可以选择一个你自己感兴趣的,然后现在立创的话,他立创的话他是呃,每个月的话是可以免费打板的,然后同时他也上线了毛买孔工艺和六十四层板支持。好的,谢谢大家。

价格大的 itm 三二学习划重点了,千万不要盲目刷课,浪费时间,你还学不会,我们先清楚一点 itm 三二学习它的总要求,你得知道内核的架构类型有哪些,外设外设的时钟数是什么样的,了解清楚这些,才能给对应的外设开发程序。首先是编程环境的下载安装, 新建工程对应的章节,一杠一到二杠二新建工程的时候,你要了解芯片厂家所提供的 s、 k 的 目录结构, 了解单反机的这个环境它需要哪些文件,一步步的去递进,了解每个文件的作用,可以了解到 i p、 m 三二芯片的启动流程。二、必须要会的 g、 p、 l 的 输入输出对应章节,三杠一到三杠四输出模式,推挽开漏输入模式,浮空输入输出 功能敷用作为外设的控制引角,目的是要清楚 g、 p、 l 的 八种工作模式,会使用每一种模式,在后面学学其他外设的时候,你要注意这个引角的模式怎么去配。第三,适中, 这个要逐步的加深了解,刚开始的时候理解了就行,学不懂可以先跳过后面代码写多了你再翻回去看,自然你就懂了。其实很多单面的工程师也有很多细节,他是不理解,这个不影响你编程的。第四部分,中断是重点的章节,五杠一、五杠二, 像中断优先级,中断服务函数,中断向量目的,你要了解中断的优先级不需要说记得多牢固,因为后面做项目的时候你自然就会有深刻的理解。外部中断需要学习, 并且要熟练使用,可以尝试按键中断,让按键来控制 led 灯的亮灭等等。五、定时器,这是一个硬核内容,利用了章节六杠一、六杠二重点学一下定时中断, 你得掌握定时的方法,利用定时器控制灯的亮灭,它和颜值函数控制灯亮灭有什么区别?第六, p w m 输入输出对应章节六杠三,六杠四、六杠五、六杠六, 使用定时器的输入和输出,它是属于 t i m 输出小节里的。第七, adc 采集目的呢?知道怎么计算分辨率,采集电压会计算采用频率,避免和带色信号的形成频率干涉。第八, d m a 对 应章节八杠一、八杠二 使用场景和 u o t iphone c s p i adc 共同使用。第九,窗口学习对应章节九杠一到九杠四,剩余的那两节你可以选看 常用的波特利,九六零零幺幺五二零零,常用的模式,八 n 一, 传输速率的计算,八 n 一下,波特利除以十,就是每秒传输的次结束。常用的协议数据图,起始位,数据位,这里是地位在前的,还有停止位,目的就是要学会基本的数据的手法,我们使用串口 来去操控板材上灯的亮面这样的程序,那这个中间需要掌握 dma 的 使用。十、 iphonec 通信的学习,这也是重点中的重点。那么对应章节是十杠一到十杠五,然后呢?波特利呢?一百 kbps, 四百 kbps。 读写存储器和读写计算器的操作模式的区别,协议的实系图。七、指位加从记地址,读写位, 数据结束位,每个外设它都有自己独立的地址。 iphonec 支持一对多通信,所以总线上可以有多个外设,大家可以写一些经典的程序,比如操作屏幕, 还有以防,譬如这一 s p i。 只要协议相关的内容你都要重点看,这对应的章节是十一杠一到十一杠五四种模式的区别。 c s m o s i m i s o c l k 这几根信号线是怎么连接的, 都起的什么作用?歪射,他没法主动的发数据。这二、其他的通讯大家要选择性的去学习了,知识要掌握其中一样知识,把高的内容,比如看通信 的八 c 协议,理解通讯包方式模式,还有限速持续等等。在看总线,在汽车领域当中用的是比较多的。十三、关于看门狗和 oled, 那 如果时间紧,可以暂时跳过看门狗比较简单,你稍微看一下肯定就能理解,而 oled 的 话确实比较耗时间,如果暂时用不上,可以放一放。

在 itm 三二里边儿有一个滴答定时器,实际上滴答定时器是 cortex m 内核都有的这样一个系统定时器,那 itm 三二属于 m 三,因此呢,它也是有这个一个定时器,叫滴答定时器,是系统专用的定时器。 那这个定时器呢,就是在我们开发 itm 三二的程序的时候,有的时候我们系统是需要一个 比较短的延时,比如说是微妙级别延时,这个时候如果单独开一个定时器的话,它是不划算的啊,不太方便。因此呢,我们可以直接利用这个它的系统定时器啊滴答定时器来做这个短延时。 比如说我们用 itm 三二再进行这个 r 放七通信的,用 itm 三二的 gpi 口模拟 r 放七通信的时候, 一个一百 k 速度的 r 放 c 通信,那它的半个周期大概是五个微秒,所以我们就可以用这个系统的滴答定时器来做这个五个微秒的延时,或者两个微秒的延时都可以哈, 这是关于呃,这个滴答定时器,那这节课呢,我们就来学习一下这个滴答定时器。那首先来了解一下什么是滴答定时器。滴答定时器呢,是 atm 三二内核自带的一个二十四位递减计数器 啊,这里有这么几个概念。第一个呢,他是二十四位,二十四位呢,他的最大值是二的二十四方减一, 他最小值是零,同时呢,他是递减的,也就说他是从从二的二十三方减一,然后二二的二十四方减一,二的二十四方减二,就逐步的往下减,减到零之后呢, 它就会溢出重新赋值,就是二的二十四方减一啊,就是这样一个啊,二十四位的递减计数器, 就像一个精确影不停歇的心脏起搏器,它为整个系统提供基础的时时间节拍和心跳啊。这个 system tick, 也就是滴答定时器,主要由四个计算器组成,那么因为我们现在是用的那个 comax 去配置 c tik 呢,它是四个寄存器,第一个呢是控制于状态寄存器,这个配置好了我们就不用管了。第四个呢是校准计数器,我们也不管,我们重点关注是两个,一个是 load 重装载寄存器,一个是 v a l y 啊,当前寄技术寄存器, 那么因为我们呃配置好之后呢,如果说我们没有特意去设置这个重装载值,它的最大值二的二十四方减一, 一直他是一个递减计数器吗?一直减到零之后呢,他就再次变成二的二次方减一啊,就这样不断的循环,不断的循环,是这样的啊,所以呢,他其实啊,可以跟我们之前五幺大盘机里边学的这个定论器,而五幺大盘机定论器是递增的 道理是一样的,只是他是个递减的,并且他的最大值呢,是二十二的二十四方减一。那么我们如何用这个滴答滴答器去啊进行一个短暂的延时呢? 比如说我们要设置一个几微秒级别的延时,这个地方呢是关于滴答接收器的一个什么一个他的时钟数啊,在对上上面这个地方,这个地方这不是有一个分频系数吗? 啊,这个滴答接收器可以不分频,那也就是说我们在左侧背频之后呢,背频到七十二兆,那滴答接收器可以直接用七十二兆,也可以进行八分频,这都可以,那我们用默认的这个,呃,不分频,然后就是七十二兆, 比如说这个我们现在这个程序用的滴答定时器,它的主频呢是七十二兆,它的主频是七十二兆,那么我们来进行使用滴答定时器做一个微秒级别的延时,做一个微秒级别延时。我们先来了解这么一个概念,就是 我们首先要算一下一个微秒,一个微秒需要多少个节拍,或者说叫一个微秒需要多少个时钟周期啊?那么也就是说 直接七十二兆除以一兆就得出来,比如说得出七十二就是一微秒需要多少个时钟周期,那在这个地方其实计算也很简单,那就是时钟周期,一个时钟周期是多少?一除以七十二兆,对吧?那一个微秒呢,就是零点零零零零零一秒, 那用零点零零零一秒除以这个七十二兆分之一,得到的就是七十二兆除以啊,一兆得到的答案呢就是七十二,也就是说一个微秒需要有七十二个时钟周期,那我们把这个数首先算出来, 算出来之后呢,我们来看一下那 n 微秒, n 微秒的脉冲数,也就说时钟周期数,我们假设定一个变量为 ticks, 那他呢需要多少个微秒,他多少个这个脉冲值呢?也就说用用这个七十二乘以这个 n 微秒,得到的就是一个总数,得到是一个总数,就是总的需要多少个脉冲数啊这是,呃,这个首先把 t x 算出来了,然后呢 我们有这么一个过程,我们在任何任意一个时刻去读一个这个滴答电路器的这个 y 值,读出来之后呢,我们复制给一个变量 to t o 的, 就是 old 嘛? old。 然后呢,我们过了一会,我们再读一个值送给 t now, t o 的 和 t now 之间的差值就是 t o 的 减 t now 的 差值,就这段时间我们经过了多少个节拍啊?那么这个时候呢,我们可以怎么办?定一个变量 t count, t count, 它就等于 t count 加上 t o 的 减 t now 啊,那在任意时刻呢?当然我们刚开始的时候,抽象的时候 t count 等于零,那么我们呃,过了一会,有可能它就不等于零吧,但其实 t count 就是 累加这个节拍数,那么我们算出来 t o 的 减 t now, 比如说这个 t o 的 减 t now, 它是等于四的,所以 所以 t count 就 等于 t count 加四啊,累加。然后来判断一下它是否大于 ticks, 如果它大于 ticks 呢?我们 表示我们延时结束了啊,大概就是这样一个逻辑,那这是一种情况,还有第二种情况,就是他有可能到了边界一出,那这种情况怎么处理呢?这种情况呢啊,我们看这个地方是 t o 的 啊,这个地方是 t n o, 那 这个地方是 t o 的, 这个地方是 t n o 的 时候呢?我们只需要把 low 的 值减去 t n o, 把这段 算出来,再加上 t o 的, 就得出来一一共有多少个节拍,是不是就左侧漏的值减 t n o 左侧这一块,加上右侧这一块, 因此呢,它的答案就是 tcon 加上 load, 减去 tnow, 再加上 todd, 那 累加给 tcon, 那 这就是这个一初的时候这个情况,那两种情况都考虑到之后呢?我们就也是,那这判断一下 tcon 是 否大于 ticks, 如果大于 ticks 呢?我们表示这个 延时时间到了啊,那我用一个程序来给大家看一下啊,这个程序就是说我们首先算出来一个微秒需要多少个时钟周期,这个时钟周期大概是七十二个啊, 定一个变量 ticks, 然后呢,定一个 to 的, 定一个 now, 就是 to o 的 啊, t now, 然后定一个 t count, t count 用来累计这个计数值, reload 呢?就 它等于 c tik 这个漏的计算器啊,它漏的计算器,那首先计算出 tik, 它等于 n 微秒,乘以就是我们要延时 n 微秒嘛?乘以这个呃,一个微秒有多少个节拍?计算出总的节拍,总的节拍送给 tik。 然后我们把这个 t o 的 读出来,读出来之后也说把最早的这个 t o 的 读出来,读出来之后呢? 然后我们过了一会儿呢,我们把 tnow 读出来, tnow 读出来之后呢?如果 tnow 不 等于 t o 的, 也就说这个节拍走了。 那又要判断一下,如果 tnow 小 于 t o 的, 因为它是个递减计数器嘛,大多数情况下它都是小于的,那 tcount 加等于 t o 的 减 t o, 比如说把 t o 的 减 t o 的 值累计到 t count 里边去, 否则的话 tcount 等于 reload, 减去这个加等于 reload 减去 tnow, 加上 to 的, 这就是溢出的情况,溢出计算完之后呢,把 tnow 的 值再给 tood, 那 我们要计算下一轮的时间, 那给完之后呢,我们来判断一下 tcon 是 否大于 ticks, 如果大于 ticks 表示我们计数的延时时间到了啊,如果说啊没有大于,表示我们时间没有到,大概的逻辑就是这样一个逻辑,那我们可以通过啊,在主主函数里边,我们 进行一个简单的延时啊,就是延时了五个微秒,然后呢就拉高拉低了一个引脚,那我这个程序就不往里下载了,我们来可以用我们的 l a 五零幺六逻辑分析啊,来抓一下这个波形啊,抓一下这个波形, 我们来看一下啊,你看这就是五个微秒延时的波形,在我们右上角脉冲这个地方显示是五点七三六个微秒,这个是一个误差,这个是很正常的,很正常的, 那低电平呢?是五点六八二个微秒,这个是多出来的部分呢,是程序带来的,里边的程序运行带来的。那这就是我们如何用滴答接收器呢?产生一个微秒级别的延时,方便给我们使用。那这节课内容就到这里,谢谢大家。