精华内容
下载资源
问答
  • 基于stm32的毕业设计 在Java 8中,某些类在Javadoc中有一个小注释,说明它们是基于值的类。 其中包括简短说明的链接,以及有关不使用它们的限制。 这很容易被忽略,如果这样做,则可能会在将来的Java版本中以微妙的...
    基于stm32的毕业设计

    基于stm32的毕业设计

    在Java 8中,某些类在Javadoc中有一个小注释,说明它们是基于值的类 其中包括简短说明的链接,以及有关不使用它们的限制。 这很容易被忽略,如果这样做,则可能会在将来的Java版本中以微妙的方式破坏代码。 为了避免这种情况,我想在自己的文章中介绍基于价值的类,尽管我已经在其他文章中提到了最重要的部分。

    总览

    在详细说明这些限制之前,本文将首先探讨为什么存在基于值的类以及为什么限制了它们的使用(如果您不耐烦,请跳至此处)。 它将以在FindBugs上的注释结束,这将很快为您提供帮助。

    背景

    让我们快速了解为什么引入了基于值的类以及JDK中存在的类。

    它们为什么存在?

    Java的未来版本很可能包含值类型。 我将在未来几周内写他们(所以调整),并会在一些细节呈现出来。 尽管它们肯定有好处,但本博文未涉及这些好处,这可能会使限制显得毫无意义。 相信我,他们不是! 或者不要相信我自己去看

    现在,让我们看看我已经写了一些关于值类型的内容:

    该想法的最大简化是,用户可以定义一种不同于类和接口的新型类型。 它们的主要特征是它们将不会由引用(如类)处理,而是由值(如基元)处理。 或者,正如Brian Goetz在他的介绍性文章《价值观的状态》中所说的那样:

    像类一样的代码,像int一样工作!

    重要的是要添加值类型将是不变的-就像今天的原始类型一样。

    在Java 8中,值类型之前是基于值的类 未来它们的精确关系尚不清楚,但可能与装箱和拆箱原语(例如Integerint )相似。

    设计Optional时,现有类型与将来值类型之间的关系变得显而易见。 在指定和记录基于值的类的局限性时也是如此。

    存在哪些基于价值的类?

    这些都是我在JDK中找到的所有标记为基于值的类:

    我无法保证此列表是完整的,因为我没有找到列出所有列表的官方来源。

    此外,还有一些非JDK类应该被认为是基于值的,但不要这样说。 一个例子是Guava的Optional 还可以安全地假设大多数代码库都将包含基于值的类。

    有趣的是,现有的拳击类(例如IntegerDouble等)未标记为基于值。 这样做似乎很可取-毕竟它们都是此类的原型-但这样做会破坏向后兼容性,因为它将使与新限制相抵触的所有用途追溯无效。

    Optional是新的,而免责声明在第一天就到了。另一方面, Integer可能受到了无可救药的污染,而且我确信,如果Integer不再是可锁定的,它将破坏重要代码的空子(尽管我们可能会这样认为)练习。)

    Brian Goetz – 2015年1月6日(格式化我的)

    不过,它们非常相似,因此我们称其为“价值至上”。

    特点

    在这一点上,尚不清楚如何实现值类型,它们的确切属性是什么以及它们如何与基于值的类交互。 因此,对后者施加的限制不是基于现有要求,而是源自某些所需的值类型特征。 这些限制是否足以在将来与值类型建立关系还不清楚。

    话虽如此,让我们继续上面的引用:

    在Java 8中,值类型之前是基于值的类 未来它们的精确关系尚不清楚,但可能与装箱和拆箱原语(例如Integerint )相似。 此外,编译器可能会自由地在两者之间进行静默切换以提高性能。 恰恰是,来回切换(即删除并稍后重新创建引用)也禁止将基于身份的机制应用于基于值的类。

    像这样实现的JVM无需跟踪基于值的实例的身份,这可以带来实质性的性能改进和其他好处。

    身分识别

    在这种情况下, 身份一词很重要,因此让我们仔细看看。 考虑一个可变对象,该对象会不断更改其状态(例如正在修改的列表)。 即使对象总是“看起来”不同,我们仍然会说它是同一对象。 因此,我们区分对象的状态和身份。 在Java中,状态相等由equals (如果适当实现)和身份相等通过比较引用来确定。 换句话说,对象的身份由其引用定义。

    现在假设JVM将如上所述处理值类型和基于值的类。 在那种情况下,两者都不会具有有意义的身份。 值类型将没有一个开始,就像int一样。 相应的基于值的类仅仅是值类型的盒子,JVM可以随意销毁和随意重新创建它们。 因此,尽管当然有对单个盒子的引用,但是并不能完全保证它们将如何存在。

    这意味着,即使程序员可以查看代码并遵循在各处传递的基于值的类的实例,JVM的行为也可能有所不同。 它可能会删除引用(从而破坏对象的标识)并将其作为值类型传递。 如果是身份敏感操作,则可能会重新创建一个新引用。

    关于身份,最好考虑基于值的类,例如整数:谈论“ 3”( int )的不同实例毫无意义,谈论“ 11:42 pm”的不同实例也没有意义( LocalTime )。

    如果基于值的类的实例没有标识,则只能通过比较它们的状态(通过实现equals来确定)来确定其equals 这具有重要的含义,即状态相同的两个实例必须完全可互换,这意味着用另一个实例替换一个这样的实例必须不会产生任何明显的影响。

    这间接确定了应将哪些内容视为基于值的实例状态的一部分。 所有类型为基本类型或其他基于值的类的字段都可以成为其一部分,因为它们也可以完全互换(所有“ 3”和“ 11:42 pm”的行为相同)。 普通班比较棘手。 由于操作可能取决于它们的身份,因此如果基于vale的实例都引用相同但不相同的实例,则通常无法将其交换。

    例如,考虑锁定String ,然后将其包装在Optional 在其他地方,将使用相同的字符序列创建另一个String并将其包装。 然后这两个Optionals不能互换,因为即使它们都包装了相等的字符序列,这些String实例也不相同,并且一个充当锁,而另一个则不起作用。

    严格解释这意味着,基于值的类必须考虑引用本身,而不是将引用字段的状态包括在其自身的状态中。 在上面的示例中,仅当Optionals实际指向同一字符串时,才应将其视为相等。

    但是,这可能过于严格,因为必须对给定的以及其他有问题的示例进行某种程度的解释。 强制基于值的类忽略诸如StringInteger类的“值-ish”类的状态非常违反直觉。

    值类型框

    被计划为值类型的框会增加一些其他要求。 如果不深入探讨值类型,这些将很难解释,因此我现在不再这样做。

    局限性

    首先,需要注意的是,在Java 8中,所有限制都是纯人工的。 JVM并不了解这类类的第一件事,并且您可以忽略所有规则而不会出错。 但这在引入值类型时可能会发生巨大变化。

    正如我们在上面看到的,基于值的类的实例没有保证的身份,在定义相等性方面的宽松程度较低,并且应该符合值类型框的预期要求。 这有两个含义:

    • 该类必须相应地构建。
    • 该类的实例不得用于基于身份的操作。

    这是Javadoc中所述限制的基础,因此可以将其分为对类的声明和其实例的使用的限制。

    申报地点

    直接来自文档(编号和格式编号):

    基于值的类的实例:

    1. 是最终的且不可变的(尽管可能包含对可变对象的引用);
    2. 具有equalshashCodetoString ,它们仅根据实例的状态而不是根据其标识或任何其他对象或变量的状态来计算;
    3. 不使用身份敏感的操作,例如实例之间的引用相等( == ),实例的身份哈希码或实例的内部锁上的同步;
    4. 仅基于equals()而不是基于引用相等( == )被视为相等;
    5. 没有可访问的构造函数,而是通过工厂方法实例化的,该方法对返回的实例的身份不作任何承诺;
    6. 在相等时可以自由替换,这意味着在任何计算或方法调用中互换equals()任意两个实例xy都不会在行为上产生任何可见的变化。

    通过上面讨论的内容,大多数这些规则都是显而易见的。

    规则1的动机是基于价值的类,是价值类型的盒子。 出于技术和设计原因,这些必须是最终的且不可更改,并将这些要求转移到其包装盒中。

    规则2 模糊地解决了有关如何定义基于值的类的状态的问题。 规则的精确效果取决于对“实例状态”和“任何其他变量”的解释。 读取它的一种方法是在状态中包括“值-ish”类,并将典型的引用类型视为其他变量。

    3号到6号表示缺少身份。

    有趣的是, Optional打破了规则2,因为它在包装的值上调用了equals 同样,来自java.timejava.time.chrono所有基于值的类都通过可序列化java.time.chrono打破规则3(这是基于身份的操作,请参见下文)。

    使用网站

    再次从文档中:

    如果程序尝试直接通过引用相等性或通过呼吁同步,身份哈希,序列化或任何其他身份敏感机制间接地将两个引用区分为基于值的类的相等值,则可能会产生不可预测的结果。

    考虑到缺少的身份,直接区分参考是不言而喻的。 但是,没有解释为什么列出的示例违反了该规则,因此让我们仔细看看。 我列出了所有可以解决的违规事项,并给出了简短的解释和具体案例( vbi代表基于值的类的实例):

    参考比较:这显然根据实例的身份来区分实例。

    vbi的序列化:希望使值类型可序列化,并且有意义的定义似乎很简单。 但是,今天,序列化对对象身份做出了承诺,这与基于身份的基于价值的无类类的概念相冲突。 在其当前实现中,序列化在遍历对象图时还使用对象标识。 因此,目前,必须将其视为基于身份的操作,应避免使用。

    情况:

    • 可序列化类中的非临时字段
    • 通过ObjectOutputStream.writeObject直接序列化

    锁定vbi:使用对象标头访问实例的监视器–基于值的类的标头可以自由删除和重新创建,并且基本/值类型没有标头。

    情况:

    • 在同步块中使用
    • 调用Object.wait,Object.notify或Object.notifyAll

    身份哈希码:要求该哈希码在实例的生存期内保持不变。 由于基于价值的类的实例可以自由删除并重新创建,因此从某种意义上说,对于开发人员来说,恒定性是无法保证的。

    情况:

    • System.identityHashCode的参数
    • 键入IdentityHashMap

    突出显示其他违规或改进说明的评论将不胜感激!

    查找错误

    当然,了解所有这一切是很好的,但这并不意味着阻止您超越规则的工具并不会真正有帮助。 作为FindBugs的重度用户,我决定要求项目实施此功能,并创建了功能请求 该票证涵盖了使用场所的限制,并将帮助您在JDK以及您自己的基于值的类(带有注释的类)中维护它们。

    由于对FindBugs感到好奇,并且想要做出贡献,我决定着手尝试自己实施它。 因此,如果您要问为什么花这么长时间准备好该功能,现在您知道了:这是我的错。 但是谈话很便宜,所以为什么不加入我的行列呢? 在GitHub上放置了一个FindBugs克隆,您可以看到此pull请求中的进度。

    一旦完成,我计划也要实现声明站点的规则,因此可以确保在值类型最终出现时正确编写并准备好基于值的类。

    反射

    我们已经看到,基于值的类是值类型的先驱。 随着Java的更改,这些实例将没有有意义的身份,并且定义其状态的可能性也将受到限制,这将对其声明和使用产生限制。 这些限制已详细讨论。

    翻译自: https://www.javacodegeeks.com/2015/02/value-based-classes.html

    基于stm32的毕业设计

    展开全文
  • 设计选用STM32单片机作控制器,设计温度单反馈控制系统,对电加热水器内水温度进行控制。通过PT100温度传感器实现对水温信号采集,并利用模拟量前向通道来对水温信号进行处理。利用STM32单片机进行控制输出PWM...
  • 基于STM32的热水器设计,可以自动加水,自动放水,自动加热,可以通过按键设计加热时间,水位过低,自动上水。
  • 基于STM32单片机空气净化器毕业设计
  • 基于STM32设计。。。。自取。。。。///////
  • 张家界航空工业职业技术学院毕业设计说明书 摘 要 设计一种基于STM32单片机开发板该开发板具有成本低体积小可靠 性高功能齐全低功耗设计操作方便等特点本论文详细介绍了该开发板 开发过程及相关硬件结构和软件...
  • 最新毕业设计(论文)-基于STM32的小车控制.pdf
  • 项目是2020年TI杯电子设计大赛中题目类似设计,用来巡线与速度调节都可以参考此教程源码 2020年TI杯电子设计大赛中题目 1.任务 利用TIMSP430/MSP432平台,设计制作一个四轮电动小车。要求小车能沿着指定路线在...

    化作尘所有项目开源!!!

    视频代码资料文件包链接:https://download.csdn.net/download/mbs520/18273096
    (积分老变动,老铁们想想办法,资料不知道放哪好)

    一、项目描述

    项目是2020年TI杯电子设计大赛中的题目类似设计,用来巡线与速度调节都可以参考此教程源码

    2020年TI杯电子设计大赛中的题目

    1.任务
    利用TI的MSP430/MSP432平台,设计制作一个四轮电动小车。要求小车能沿着指定路线在坡道上自动循迹骑线行驶。小车必须独立运行,车外不能使用任何设备(包括电源)。小车(含电池)重量小于1.5kg,外形尺寸在地面投影不大于25cm×25cm。坡道用长、宽约1m的细木工板制作,允许板上有木质本色及自然木纹。木工板表面铺设画有1cm×1cm黑白间隔的纸条(以下简称为标记线)作为路线指示;标记线起始段为直线,平行于木板两边;标记线在坡顶转向90°,转弯半径20cm;标记线平行坡顶距离≥30cm,距坡顶距离≤20cm;标记线总长度为1m。停车标记为宽1cm长5cm的黑色线条,垂直于坡顶标记线。小车坡度角示意及行驶线路顶视图如图1所示。
    在这里插入图片描述

    2.要求
    (1)坡度角θ=0°,电动小车能够沿标记线自动骑线行驶,在停车点停车;小车上标记点到停车标记中心线的垂直距离误差≤2cm。停车时立即发出声音提示。小车行驶过程中,其地面投影不得脱离标记线。 (15分)
    (2)在完成(1)的基础上,电动小车能够设定行驶时间,自动控制小车匀速通过1米长的线路,在停车点停车。行驶时间可在10s~20s间设定。误差绝对值≤1s。行驶过程中不得碾压、脱离标记线。时间误差每超过1s扣1分。 (20分)
    (3)坡度角θ=10°,完成要求(2)的动作。 (20分)
    (4)可任意指定坡度角θ在11°~30°,完成要求(2)的动作。 (20分)
    (5)在完成(4)后,尽量增加坡度角θ,完成要求(2)动作。 (20分)
    (6)其他。 (5分)
    设计报告:

    项 目 主要内容 满分
    方案论证 比较与选择,方案描述 3
    理论分析与计算 系统相关参数设计 5
    电路与程序设计 系统组成,原理框图与各部分的电路图,系统软件与流程图 5
    测试方案与测试结果 测试结果完整性,测试结果分析 5
    设计报告结构及规范性 摘要,正文结构规范,图表的完整与准确性。 2
    总分 20

    3.说明
    (1)本题目必须使用指定的MSP430/MSP432平台。并将该平台置于显著位置便于评测。不得另外使用其它CPU控制芯片。
    (2)不得采用履带小车及带刺轮胎。小车轮胎采用橡胶塑料等柔性材质,不得在其表面涂抹粘性物质等。行驶路面不得铺设除标记线外的任何材料。小车全程在木工板上行驶。
    (3)小车设定模式后自动行驶,中途不得人工介入控制。在要求(2)~(5)的测试中,小车应匀速行驶。停顿、打滑、碾压标记线每次扣除2分。
    (4)小车标记点:小车到达停车线的标记点自定,并在行驶前明确标记在车体上,以便测量。
    (5)所有测试中,行驶过程时间超过30s、小车投影脱离标记线或停车误差超过2cm,均视为失败。
    (6)要求(5)中最大角度的测试,θ由选手自己选定。
    (7)每项测试过程允许测试两次,取最好成绩。坡度角可以用安卓手机上的“指南针”APP软件测量。

    二、制作选材

    1、主控芯片stm32f103c8t6

    STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB
    STM32 F1系列为Cortex-M3基础型MCU 。其中增强型STM32F103- 72 MHz CPU,具有高达1MB的Flash、电机控制、USB和CAN。
    其FLASH(KB)大小为64
    RAM(KB)大小为20
    封装方式采用LQFP48
    通用I/O口个数为37
    工作电压为2~3.6V
    16位定时器个数4
    电机控制定时器个数1
    CAN个数1
    在这里插入图片描述
    2、编码电机
    型号MG513 p30 12v
    转动一圈390个脉冲
    减速比1比30

    然后通过获取每100毫秒的脉冲个数

    就可以计算出速度的大小

    在这里插入图片描述
    3、7针0.96寸oled显示屏
    在这里插入图片描述
    4、舵机
    看着挺高级的,马力大,不过控制代码与那种两块钱的一样,模拟控制,PWM控制,用来控制方向
    在这里插入图片描述
    4、红外传感器模块

    4个红外对管,一块模拟转数字模块
    在这里插入图片描述
    5、电源18650+电池座
    经济实惠
    在这里插入图片描述

    6、锂电池充电器
    一个模块加一个电池座,加起来不到2块钱
    商品链接我得整理一下。。。
    在这里插入图片描述

    7、旋转编码器,
    用来调节时间的,按下小车就可以跑了

    在这里插入图片描述

    7、小车底盘
    购买链接: https://m.tb.cn/h.4MEu0RC?sm=51a10c
    其实编码电机与舵机小车上面都有,直接买一个小车车身
    买来是散装的,装了好久装好:
    在这里插入图片描述

    三、原理图设计

    首先就是要进行硬件设计,连接好了硬件,软件就好办了

    原理图设计:(可能有点模糊,建议下载我的资料里面有原图)
    在这里插入图片描述

    然后开始连接硬件

    在这里插入图片描述

    在这里插入图片描述

    连接好了硬件,写程序就可以调试了…
    在这里插入图片描述
    硬件与程序调试用了两天时间总算搞定了接下来开始测量数据

    四、数据测量

    功耗测量:
    在这里插入图片描述

    设置全程1.5m走的时间:

    时间 电流 电压
    静态 111mA 11.5V
    10s 242mA 11.1v
    11s 238mA 11.1v
    12s 228mA 11.1v
    13s 224mA 11.2v
    14s 204mA 11.1v
    15s 191mA 11.2v
    16s 189mA 11.3v
    17s 188mA 11.3v
    18s 187mA 11.2v
    19s 184mA 11.3v
    20s 185mA 11.3v
    21s 183mA 11.2v
    22s 181mA 11.3v
    23s 179mA 11.3v
    24s 177mA 11.3v
    25s 174mA 11.4v
    26s 171mA 11.4v
    27s 168mA 11.4v

    2、OLED速度监测

    在这里插入图片描述

    显示屏数据说明:
    v1 v2左右轮实时速度
    pidout输出pwm值
    time 设定时间 speed通过设定时间计算得到的速度,因为路程固定
    running stop运行状态

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到PID算法起到了良好的效果,很好的把速度恒定在指定范围之内

    平地测量场景:
    在这里插入图片描述

    记录数据

    在这里插入图片描述

    五、程序设计

    1、主程序设计
    主函数它是执行了整个程序的入口点。
    首先初始设置定时器参数,设置TIM1 16位定时器递增计数,设置定时器时间10MS,主要用来在定时器中断测量小车速度与PID算法调用
    配置TIM4为PWM模式,设置周期为30ms,298能够反应过来,周期太大小车会有抖动,通过脉宽来调节小车速度,脉宽越大,小车运动越快,设置计数器为1000向上计数,也就是重装载值设置1000小车最快,设置重装载值0小车不运动
    配置TIM3为PWM模式,根据舵机的特性,配置周期为30MS,向上计数模式,计数器设置为3000,当脉宽长度为28MS时,舵机刚好再0度位置,所以初始化重装载寄存器为2800,上电默认向前方向
    配置红外传感器4个输入引脚为输入模式,来检测输入的电平情况
    配置旋钮编码器为3个引脚输入模式,用来检测是否旋转与按下
    配置LED引脚为推挽输出模式,来驱动LED闪烁
    配置串口与滴答定时器延时,串口主要用来调试,延时用来消耗某些时刻需要消耗的时间
    循环:
    循环检测旋钮状态,如果旋转了就根据旋转的方向与角度设定时间的大小,如果旋钮按键按下,那么前进状态变成1

    main.c

    //主函数
    int main(void)
    {
    	u8 state;
    	int ang,i;
    	
        uart_init(9600);//蓝牙串口初始化
    	delay_init(); //延时初始化
    	SteerinMotor_Init(); //舵机初始化
    	EncodeMotor_Init();//编码电机初始化
    	OLED_Init();//oled初始化
    	LED_Init();//led初始化
    	TIM1_Int_Init(100,7200);//定时器初始化10ms
    	Encodeing_Init();//旋钮编码器初始化
    	//测试
        printf(" this is Ramp patorl trolley  by HUAZUOCHEN! ^_^ \r\n");
        while (1) {
    		OLED_update();//更新OLED显示
    		encodeing_scan();//编码器扫描
    		//获取红外线传感器传回的数据
    		state = Get_Infrared_Sensor();
    		ang = 0;
    		switch (state)//循迹转弯设置
    		{
    			case 0x00:ang = 0;
    				break;
    			case 0x01:ang = -55;
    				break;
    			case 0x03:ang = -45;
    				break;
    			case 0x02:ang = -10;
    				break;
    			case 0x06:set_steerMotor_ang(0);//设置舵机角度 0
    				break;
    			case 0x04:ang = 10;
    				break;
    			case 0x0c:ang = 45;
    				break;
    			case 0x08:ang = 55;
    				break;
    			case 0x0f:  //识别到杂乱信号角度设置为0
    			case 0x09:
    			case 0x05:
    			case 0x0a:
    			case 0x0e:
    			case 0x0b:
    					run_flag = 0;//停止	
    				break;
    			default:ang = 0;
    				break;
    		}
    		if(ang != 0)
    		{
    			set_steerMotor_ang(ang);//设置舵机角度
    			delay_ms(100);
    		}
    		state = 0;
        }
    }
    
    

    定时器1中断,10ms调用一次,调用时计数10次调用,也就是100ms进行一次速度测量,V = X/t ,速度等于位移处以时间,位移等一编码个数乘以编码单位长度,小车轮的直径为6.4厘米,周长为20.12cm,得到一个脉冲计数,大约是0.258毫米,得出左轮速度V_left = pause_cnt_left2.58;右轮速度V_right = pause_cnt_right2.58;当按下旋转编码器的按键run_flag = 1;使得PID算法开始运行,小车开始按照计算好的速度与当前测量到的速度做比较,进行闭环PID调节。

    timer.c

    
    u16 time_cnt,run_cnt;
    //100ms计算一次速度
    void TIM1_UP_IRQHandler(void)
    {
    	if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
    	{
    		TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源 
    		time_cnt ++;
    		if(time_cnt >= 10)
    		{
    			V_left = pause_cnt_left*2.58;
    			V_right = pause_cnt_right*2.58;
    			pause_cnt_left=0;
    			pause_cnt_right=0;
    			time_cnt =0;
    			LED = !LED;
    		}
    		
    		if(run_flag)
    		{
    			speed = 1200/time;  //总路程/时间
    			Set_Temp1 = Set_Temp = speed;
    			set_pid_speed();
    			run_cnt++;
    			if(run_cnt == time*200)
    			{
    				run_flag = 0;
    				run_cnt = 0;
    			}
    		}
    		else 
    		{
    			PID_OUT = 0;
    			PID_OUT1= 0;
    			//run_cnt = 0;
    			car_go_forward(0,0);//停止
    		}
    	}
    }
    

    霍尔编码器脉冲获取采用中断方式,中断设置上升沿下降沿都触发,
    电机传动轴与编码器相连,编码器感应论上有13个感应线条,从而使得编码器齿轮转动一圈,或编码器能识别到13个脉冲
    减速箱使得小车轮子转动一圈,电机轴转动30圈,使得编码器齿轮也转动30圈,得到,小车轮子转动一圈,编码器输出13×30,等于390个脉冲,又因为一个脉冲有一个上升,沿有一个下降沿,单片机通过检测上升沿和下降沿,可以得到有780个计数,

    encode_motor.c

    double V_left,V_right;//定时器计算
    u16 pause_cnt_left,pause_cnt_right;//脉冲计数
    
    //外部中断2服务程序
    void EXTI2_IRQHandler(void)
    {
    	pause_cnt_left++;
    	EXTI_ClearITPendingBit(EXTI_Line2);  //清除LINE2上的中断标志位  
    }
    //外部中断3服务程序
    void EXTI3_IRQHandler(void)
    {
    	
    	pause_cnt_right++;
    	EXTI_ClearITPendingBit(EXTI_Line3);  //清除LINE3上的中断标志位  
    }
    

    速度平衡算法,给定一个速度,听过与编码电机反馈的速度进行比对,然后输出一个算出来的PWM值返回给电机调速,达成闭环速度调节

    PID.c

    
    void PID_calc(float V_1, float V_2) //PID算法
    {
        /***********************左轮**************************/
        float Rate;//误差变化率
        float Rate1;//误差变化率
        Current_Error = Set_Temp - V_1;//当前误差
        Sum_Error += Current_Error; //误差积分
        Prev_Error = Last_Error;//存储误差积分
        Last_Error = Current_Error;//存储误差分析
        Rate = Current_Error - Last_Error; //变化速率计算
    
    
        if (Rate > 10) //不让ta大于5也不让ta小于5
            Rate = 10;
        if (Rate < -10)
            Rate = -10;
    
        P_OUT = P * Gain * Current_Error; //比列项
        I_OUT = I * Gain * Sum_Error; //积分项
    
        //积分限幅处理
        if (I_OUT > PID_I_MAX)  I_OUT = PID_I_MAX; //不能超过最大值不能低于最小值
        if (I_OUT < PID_I_MIN)  I_OUT = PID_I_MIN;
    
        //微分输出处理
        D_OUT = D * Gain * Rate;
        PID_OUT =  P_OUT  +  I_OUT  +  D_OUT ;
        if (PID_OUT >= V_DATA_MAX)  PID_OUT = V_DATA_MAX;
        if (PID_OUT <= V_DATA_MIN)  PID_OUT = V_DATA_MIN;
    
        /***********************右轮********************************/
    
        Current_Error1 = Set_Temp1 - V_2;//当前误差
        Sum_Error1 += Current_Error1; //误差积分
        Prev_Error1 = Last_Error1;//存储误差积分
        Last_Error1 = Current_Error1;//存储误差分析
        Rate1 = Current_Error1 - Last_Error1; //变化速率计算
    
    
        if (Rate1 > 10) //不让ta大于5也不让ta小于5
            Rate1 = 10;
        if (Rate1 < -10)
            Rate1 = -10;
    
        P_OUT1 = P * Gain1 * Current_Error1; //比列项
        I_OUT1 = I * Gain1 * Sum_Error1; //积分项
    
        //积分限幅处理
        if (I_OUT1 > PID_I_MAX1)  I_OUT1 = PID_I_MAX1; //不能超过最大值不能低于最小值
        if (I_OUT1 < PID_I_MIN1)  I_OUT1 = PID_I_MIN1;
    
        //微分输出处理
        D_OUT1 = D * Gain * Rate1;
        PID_OUT1 =  P_OUT1  +  I_OUT1  +  D_OUT1 ;
        if (PID_OUT1 >= V_DATA_MAX1)  PID_OUT1 = V_DATA_MAX1;
        if (PID_OUT1 <= V_DATA_MIN1)  PID_OUT1 = V_DATA_MIN1;
        /*******************************************************/
    }
    
    

    获取红外传感器值
    红外对管用一个发射管与一个接收管组成,红外发射管发射出去的红外线遇到白色物体会反射回红外接收管,使之导通,反之遇到黑色物体不反射,使之截止。接收到的红外线越强,导通电流越大,输出电压越大,输出的电压经过逻辑电路转换为数字信号传回到单片机进行识别处理。单片机引出4个引脚对应接收电平状态,4个引脚配置为输入模式,循环检测电平的变化,电平为1则对应红外对管识别到黑色,电平0对应红外对管识别到白色

    //获取传感器状态
    u8 Get_Infrared_Sensor(void)
    {
    	u8 state=0;
    	if(PBin(4) == 1)     
    		state |= 0x08;	//IN4
    	if(PBin(5) == 1)
    		state |= 0x04;	 //IN3
    	if(PBin(6) == 1)
    		state |= 0x02;	 //IN2
    	if(PBin(7) == 1)
    		state |= 0x01;	 //IN1
    	
    	return state;
    }
    
    

    化作尘其它开源项目:

    单片机项目:

    基于stm32c8t6的坡道行驶巡线小车(2020年TI杯大学生电子设计竞赛 C题)https://blog.csdn.net/mbs520/article/details/115438122

    基于STM32F4的音乐播放器
    https://blog.csdn.net/mbs520/article/details/111313042

    基于STM32F4的电子阅读器(首创)
    https://blog.csdn.net/mbs520/article/details/110817173

    基于51单片机WiFi视频小车(首创)
    https://blog.csdn.net/mbs520/article/details/109843972

    基于51单片机蓝牙小车
    https://blog.csdn.net/mbs520/article/details/109775964
    基于MSP430 坡道行驶电动小车(2020年TI杯大学生电子设计竞赛 C题)
    https://blog.csdn.net/mbs520/article/details/109090072

    基于stm32f4的智能门锁系统
    https://blog.csdn.net/mbs520/article/details/106987758

    基于51单片机超声波测距小车
    https://blog.csdn.net/mbs520/article/details/106599219

    基于51单片机定时宠物喂食系统
    https://blog.csdn.net/mbs520/article/details/108292187

    Linux项目:

    基于QT5 Linux平台 停车场管理系统
    https://blog.csdn.net/mbs520/article/details/113481824

    基于QT5 Linux平台 车载系统
    https://blog.csdn.net/mbs520/article/details/112873809

    基于Linux系统 媒体播放器
    https://blog.csdn.net/mbs520/article/details/107880118

    基于Linux系统 语音识别、人机对话
    https://blog.csdn.net/mbs520/article/details/113179224

    基于Linux系统小钢琴程序(暂无博客)
    https://download.csdn.net/download/mbs520/12798287

    基于Linux系统 QQ通讯录管理系统(暂无博客)

    展开全文
  • 基于STM32的嵌入式操作系统程序设计及实现本科毕业设计论文 摘 要 随着科学技术不断的进步,工业生产越来越先进复杂,操作系统C/OS-II是高效稳定可靠节能的系统,广泛应用安防,消费电子中而基于Cortex-M3架构下的STM32...
  • 详情请查看CSDNPeOS博客:毕业设计——基于STM32的音乐播放器设计(一)
  • 基于STM32音乐播放器设计 SD卡文件,详情请看CSDNPeOS博客:毕业设计——基于STM32的音乐播放器设计(一)
  • 设计并实现了在STM32嵌入式平台上缺陷图像获取,缺陷边缘轮廓提取算法,以及缺陷边缘轮廓图像追踪算法与绘制。(该代码来源于本人本科毕业设计一部分)
  • 大学帮别人做的毕业设计,现在开源出来,分享两个STM32系列的毕业设计:基于stm32GSM远程控制以及基于STM32的VFD时钟设计,资料都有原理图、PCB以及源码,希望能够给正在寻找资料的你一些思路。
  • 093【电路方案】基于stm32的智能台灯完整设计方案 本设计实现如下功能: 1.要求人体靠近台灯(1.5米)时且环境较暗时,红外感应开灯。 2.当人在台灯下工作时间过长(45分钟)或过于靠近时(设定靠近距离用于近视...

    093【电路方案】基于stm32的智能台灯完整设计方案

    本设计实现如下功能:

    1.要求人体靠近台灯(1.5米)时且环境较暗时,红外感应开灯。

    2.当人在台灯下工作时间过长(45分钟)或过于靠近时(设定靠近距离用于近视形成防护),通过闪烁灯提醒人注意保持距离(可手动停止闪烁或关闭该功能)。

    3.当人离开(或者亮度变亮时)智能关灯。

    4.小夜灯功能,夜间有声音时,以较小亮度打开灯,持续3分钟关闭。

    5.可设置多个亮度挡位以及可调色温(触控开关),可设置为普通台灯(关闭智能)

    【资源下载】下载地址如下:
    https://docs.qq.com/doc/DTlRSd01BZXNpRUxl

     

     

    展开全文
  • 基于STM32的多功能MP3设计 毕业设计(论文)开题报告

     

     

    中国计量学院

    毕业设计(论文)开题报告

     

     

    学生姓名:    卢杰    学 号:  XXXXXXXXX   

    专    业:         电子科学与技术           

    班    级:            10电子1              

    设计(论文)题目:

              基于STM32的多功能MP3设计       

    指导教师:         叶有祥  讲师             

    二级学院:       光学与电子科技学院         

     

     

     

     

     

     

     

     

    2014年  03 月  18 日


    一、综述本课题国内外研究动态,说明选题的依据和意义

    1.1 本课题国内外研究动态

    MP3播放器起源于韩国,Saehan公司于1998年推出了世界上第一台的MP3播放器,取名为MPMan F10,可惜Saehan公司采用的是当时极为昂贵的闪存存储,并且没有足够的实力进行大范围的推广,很快便在与MD的较量中败下阵来,但是这却启动了MP3市场。后来美国的Diamond公司挑头,再一次进行MP3播放器开发,MP3播放器开始进入人们的视野,但是当时的MP3播放器的存储介质是以MB为单位的闪存,这样的容量不再能满足人们的需求。2000年1月,音频硬件领域的老大哥创新性的采用了富士通6.4GB的硬盘作为存储介质,存储容量大大提高,MP3播放器开始以惊人的速度风靡全球,在那个时候可以说Diamond公司的MP3是权威代表。在这之前,因为国内条件比较有限,太多东西不能与国际接轨,国内MP3播放器完全没有什么概念,在2001年以后大批量的MP3播放器开始进入国内市场,在市场驱动下,国内开始有大批公司开始致力于MP3播放器的研究和开发,在2005年左右MP3在国内达到了辉煌时期。在电子产品更新迅速的时代,特别是音乐手机、PAD等的出现,他们都集成了音乐播放功能,市场激烈竞争下使MP3开始走下坡路,国际和国内MP3品牌都开始意识到MP3产业发生的变化,无论是国内还是国外对MP3的研制,各国开发人员开始创新的开发出便携式、低功耗、多功能的MP3,以挽留MP3市场。
    1.2 
    选题的依据和意义 

    随着科技的发展,生活水平的提高,人们对消费电子的需求也越来越高。多功能的MP3播放器也受到越来越多人的青睐。电子技术快速发展和消费者的爱好需求,MP3的功能也越来越多,它与PDA、手机一样,都向多功能方面发展,尽可能吸收其它产品的功能,以便增加产品卖点。本文设计了一款基于STM32的多功能MP3,系统采用ARM Cortex-M3内核的STM32F103ZET6作为微控制器,并有外扩1M字节的SRAM和8M字节的SPI FLASH,结合VS1053B高性能音频编解码芯片、SD卡存储器、重力加速度传感器、摄像头模块、FM立体声收发芯片、USB串口、TFT液晶触摸屏和游戏手柄等外围设备,以及使用内存管理、FAT文件操作、图片解码、NES 模拟器、汉字输入、GUI界面和UCOSii实时操作系统等知识,设计并实现了集音乐播放﹑电子图书、时钟、计算器、红外遥控、数码相框、照相机、系统设置、FC游戏机、收音机、记事本、3D显示、手写画笔、录音机、USB连接、TOM猫等为一体的多功能MP3播放器。

    自1998年韩国Saehan公司第一款MP3面世来,MP3它能够将CD品质的数字录音压缩成极小的文件,并将其存储在电脑之中,因为其极高的压缩比而音质几乎不失真的优势占领了数码市场,一时风靡全球。MP3播放器是数字革命的先锋。而从2005年后,随着消费者转向音乐手机、PAD等其他数码产品,MP3的销量迅速下跌,如今已风光不再。特别是MP5的出现,更是把MP3几乎挤出了市场,MP5不但可以播放MP3、MP4,更能直接播放AVI和RMVB等主流的电影格式,可以说MP5具有MP3、MP4的所有功能,同时还具有他们不具备的功能,所以MP5取代MP3只是时间的问题,目前MP5的售价较高是最主要的原因,相信当MP5价格降下来之后,就是MP3退出市场之时了。如今另外一个数码产品是数码相框,随着数码相机的普及,也在悄悄袭来,数码相框就是能直接播放JPG/JPEG的一个小型显示器,一般的数码相框较MP3体积大,但是它们本来就不是针对移动设备的,数码相框主要用在家庭,它们一般不具移动功能,事实上,数码相框主要用来显示相片,如果做成移动设备的话,体积肯定不能大,但是体积小就意味着图片显示效果就不好。现在的数码相框显示屏分辨率一般是234*480,对于一般的照片显示效果还是比较不错的,当然数码相框的开发者对图像显示进行了精心设计,使得你的照片不论分辨率是怎么样的,它都会进行最优的选择,以显示效果最佳,同时数码相框一般还具有其他附加功能,MP3就是其中一个功能,在播放图像的时候同时播放MP3,使相片浏览有声有色。USB连接功能在当今也越来越重要,现在的笔记本电脑的外扩接口差不多都是USB接口,在本次MP3播放器设计的时候增加一个USB连接功能,可以直接从电脑中拷贝MP3音乐到MP3播放器里,这样对于MP3的使用更加的方便。还有其他很多功能可以扩展来丰富MP3播放器。

    通过以上分析,可以发现,新出的数码产品都包含了MP3的功能,但是又不限于此,也就是集成了MP3的优点,同时拥有原来MP3不具有的功能,同样对于MP3播放器,我们也要增加多功能。只有这样,新的数码产品才可以在市场上得到消费者的青睐。

     

    二、研究的基本内容,拟解决的主要问题

    2.1研究的基本内容

    本设计课题是一个软硬件相结合的设计类题目。要求设计一个基于STM32的多功能MP3播放器,既然是多功能MP3播放器,当然是实现MP3播放的基本功能的同时,尽量增加丰富并实用的外扩功能,整个系统的功能包括:可以阅读.c/.h/.txt/.lrc格式文件的电子书,可以浏览.bmp/.jpeg/.jpb/.gif格式的数码相框,能播放.mp3/.wma/.wav/.flac/.ogg/.mid等常见音频文件的音乐播放器,支持各种运算,达到12位精度并支持科学计数法表示的科学计算器,支持温度、时间、日期、星期显示的时钟,还有拍照功能、红外遥控、FC 游戏机、记事本、手写画笔、TOM猫、录音机和3D显示等功能,更重要的是还有USB连接功能,可以实现该硬件平台与电脑之间的通讯,无需拆下SD卡即可拷贝文件到该硬件平台的SD卡上,方便实用。

    整个系统由一块MCU(STM32F103ZET6)控制运行,各个部分协调运作,人机交互部分采用TFTLCD触摸屏、两个LED指示灯和4个独立按键实现,输出部分采用2.8寸的240*320的彩色液晶实现,输入部分以触摸屏为主,按键为辅,使本系统更具人性化。

    2.2拟解决的主要问题

    本系统拟解决的主要问题是增加MP3尽量多的实用功能,比如增加了电子书、数码相框、红外遥控、科学计算器、照相机、USB连接、FC游戏、录音机和触摸控制等内容,以增加MP3的卖点,涉及到的内容有内存管理、FAT文件系统、GUI图形界面、图片解码、触摸屏控制、手写识别、汉字输入、NES模拟器等几个部分,这也是本系统的难点所在。

     

    三、研究步骤、方法及措施

    由于该多功能MP3设计要实现集音乐播放﹑电子图书、计算器、数码相框、照相机、FC游戏机、收音机、记事本、3D效果、手写画笔、录音机、USB连接和TOM猫等众多功能,对RAM、FLASH和处理速度的要求比较高,比如对图片的解压缩和实现图形用户界面(GUI)要用到的RAM就比较多,而存储字库和其他用户数据就需要大容量的FLASH来存储,使用摄像头采集图像实现照相机功能是需要处理速度的,还有对MP3播放的处理速度也是有要求的,尤其对320Kbp的MP3格式数据流的处理,必须非常快,才能实现MP3的流畅播放。为了尽可能的实现MP3播放器的多功能,增加了许多比较实用和主流的功能模块,下面来研究一下整体设计思路:

    目前市场上可供选择的八位机有51、MSP430、AVR和PIC等,可供选择的32位处理器有SAMSUNG、NXP、STM32、ATMEL。八位机处理速一般在16M以下,处理速度完全跟不上,32位机的处理速度普遍有所提高,但是STM32以其低功耗、低成本、易于开发和其超多外设等优势是其他32机不能媲美的,通过以上分析,本系统采用STM32作为主控制器,具体采用了STM32F103家族里面最强悍的STM32F103ZET6作为控制核心,它是ST公司最新推出的基于Cortex-M3构架的芯片。该芯片具有64KB SRAM、512KB FLASH、2个基本定时器、4个通用定时器、2个高级定时器、3个SPI、2个IIC、5个串口、1个 USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO 接口、1个FSMC接口以及112个通用IO口,对本系统来说足够了,同时以后还有很大的升级空间。虽然这款芯片包含了64KB SRAM和512KB FLASH,但是本次要用到图形用户界面(GUI)、存储字库、实现一些复杂算法和其他用户数据等,STM32内部的存储容量完全不够的,这就要我们的系统外扩RAM和FLASH芯片,来实现存储大容量数据。

    其次,由于本系统要实现MP3音乐播放、数码相框和、FC游戏机等,而处理的这些文件往往比较大,所以存储媒介也就有要求了,可以继续使用FLASH芯片来存储这些文件,如SAMSUNG公司的K9F系列,但是这些文件是经常需要读写的,很容易损坏FLASH芯片,所以还是考虑SD卡或者U盘等,我们都知道SD卡相对于U盘,读取容易,而且相同容量的U盘和SD卡,SD卡的价格较低。所以本系统选择一个4G的SD卡作为存储媒介。最后,该系统需要存储一些系统设置的一些参数和触摸屏校准数据,在掉电情况下是不能丢失的,由于STM32内部没有EEPROM,这就需要外扩一个EEPROM芯片来实现掉电数据保存。同时STM32也不会一直供电,需要维持后备区域数据的存储,以及RTC的运行,这里就需要一块后备电源。本次设计的MP3是多功能的,每一个其他功能都需要相应的传感器,比如要实现照相机功能,就需要一个摄像头模块来拍照;为了实现人机交互,使用触摸输入并显示图片和查看文本等,就需要增加一个TFT-LCD触摸屏模块;有3D显示功能,就需要测量3个方向的重力加速度值,并转换为角度,这里就需要选择一块三轴加速度传感器,同样,要实现收音机功能就必须要有一个FM收发芯片等等,就这样一步步搭建系统硬件模块,然后将每个功能组合起来得到系统硬件,并编写和调试系统每个模块的软件,最后整合,实现本次设计的多功能MP3。

     

    四、研究工作进度

    2013年11月中旬~2013年12月下旬

    了解课题, 查阅资料相关资料,比如STM32,UCOS,内存管理,FAT文件系统、GUI图形界面、图片解码、触摸屏控制、手写识别、汉字输入、NES模拟器和各种芯片等

    2013年12月下旬~2014年2月中旬

    设计各个小模块电路并调试

    2014年2月中旬~2014年3月中旬

    根据各个小模块整合系统硬件,绘制原理图并制作PCB送工厂打样,打样回来焊接硬件电路并且调试,同时撰写开题报告,准备开题答辩

    2014年3月中旬~2014年4月下旬

    根据系统硬件开始软件调试并整合,尽量增加MP3播放器的功能

    2014年4月下旬~2014年5月中旬

    准备实物制作答辩,并且开始撰写毕业论文

    2014年5月中旬~2014年6月中旬

    毕业论文撰写和修改,并准备毕业论文答辩

     

    五、主要参考文献

    [1] 邹捷,唐荣年等.基于嵌入式系统的MP3播放器设计[J].海南大学学报(中国水运(下半月)), 2013,13 (2):1-2.

    [2] 周兆丰,侯向锋,鲁池梅,李莲英等.uC/OS-II在STM32F103上移植的新方法[J].湖北师范学院学报(自然科学版), 2013,33 (2):1-5.

    [3] 马义德,周炜超,文芳,李柏年,李庚. 基于SPCE061A的声控MP3播放器设计[J]. 微计算机信息,2009,1 (8) :301-303.

    [4] 程磊.基于STM32的MP3播放器的设计[J].苏州工业职业技术学院(内江科技), 2011,1 (12):1-2.

    [5] 李宁,熊刚,徐良平等.基于 Cortex M3的MP3播放器设计[J].武汉理工大学(自然科学版), 2009,1 (2):1-5.

    [6] 颜锐,谭周文.基于STM32的多功能MP3设计[J].湖南人文科技学院(自然科学版), 2013,1 (4):1-4.

    [7] 高云红,刘志群.基于STM32的多功能音频播放器的设计[J].山东行政学院(自然科学版), 2012,1 (12):1-3.

    [8] 张学慧,朱爱珍.基于STM32的嵌入式MP3播放器的研究[J].山东科技大学(电子技术版), 2012,1 (4):1-3.

    [9] 熊锦玲,陈湘萍.基于STM32的音频解码器[J].贵州大学(自然科学版), 2013,1 (2):1-5.

    [10] 颜秋男,胡毅.STM32F103VB的SD卡在应用编程设计[J].合肥工业大学(自然科学版), 2012,2 (2):1-4.

    [11] 覃松,李冰.jpeg图像解码器在STM32上的应用研究[J].山东科技大学(自然科学版), 2013,1 (5):1-3.

    [12] 席卫华.FATFS文件系统在数码相框上的应用[J].广西师范大学(自然科学版), 2012,1 (1):1-3.

    [13] 唐伟,于平,李峥辉.STM32F103x的USB多路数据采集系统设计[J].中国科学院长春光学精密机械与物理研究所(自然科学版), 2009,(8):1-4.

    [14] 肖慧超,王英坤,许明涛,徐伯庆.基于ARM Cortex M3内核收音机模块的实现[J].上海理工大学(自然科学版), 2009,25(2)1-2.

    [15] 陈雪芳.基于STM32F103的电子相框的设计[J].广西师范大学(自然科学版), 2012,19(1):1-4.

    [16] 胡锦霖,曾上游,王亮,戴伟. 基于STM32处理器的数字PAD系统设计[J].广西师范大学 (自然科学版),2012,35(4):1-3.

    [17] 邸兴,张建花,陈贝. 基于STM32的BMP图片解码系统[J]. 中国飞行试验研究院(电子设计工程), 2011,19(10):1-4.

    [18] 王铁流, 李宗方, 陈东升. 基于STM32的USB数据采集模块的设计与实现[J]. 北京工业大学(测控技术), 2009,28(8):1-4.

    [19] 李婕,蒲忠胜. 简易数码相框与电子书阅读器的设计[J]. 兰州理工大学(测控技术), 2013,36(10):1-3.

    [20] 丁鑫蕾,刘一清,余奔. 一种简易数码相框的设计[J]. 华东师范大学(微型机与应用), 2011,30(3):1-4.

    [21]Vijaykuinar Gurkhe, Optimization of an MP3 decoder on the ARM processor, Texas Instruments

    [22]Zhaozhi Wu,Design of built-in boot loader for ARM uCOS, Nanjing Xiaozhuang College

     

     

    展开全文
  • 基于STM32的多功能MP3设计 毕业设计(论文)文献综述
  • 毕业设计——基于STM32的音乐播放器设计(一)

    万次阅读 多人点赞 2015-01-06 20:05:03
    基于STM32的音乐播放器设计, 源代码下载地址:http://download.csdn.net/detail/cxp2205455256/8334021  SD卡文件下载地址:http://download.csdn.net/detail/cxp2205455256/8334089 电路图下载地址:文件太大了,...
  • 基于stm32的智能婴儿床(毕业设计

    千次阅读 多人点赞 2021-05-15 15:46:24
    主控 stm32f103c8t6 导线 若干根 OLED显示屏 一个 VCC-3.3/5V GND-GND SCL-单片机SCL脚 SDA-单片机SDA脚 轻触按键 三个 对脚连接 一脚接GND 一脚接VCC 一路5v继电器模块 一个 上面口VCC-5V GND-GND PIN-单片机...
  • 第33届电子设计大赛 作品设计报告说明书 作品名称 基于STM32的模数结合简易波形发牛器 参赛队名: 参赛队员 物理与电信工程学院 2016年12月 系统方案选择与比较 一方案一利用模数结合实现在模拟电路上产生函数信号波 ...
  • STM32的智能水杯设计-LCD1602-TDS-DS18B20-HX711-蓝牙-GPS 本设计设计由STM32F103C8T6单片机核心板电路+LCD1602液晶显示电路+电导率传感器电路+HX711称重传感器电路+蓝牙模块电路+DS18B20温度传感器电路+GPS模块...
  • 毕业设计 —— 基于STM32手势控制显示系统设计

    千次阅读 多人点赞 2019-11-09 18:14:22
    目录 一、前言 ...1、系统设计的原理 2、手势识别原理 3、系统设计框图 4、硬件部分系统框图 5、软件部分设计思路 五、硬件系统设计 1、32 * 80点阵显示屏 1.1 模块作用 1.2 实现功能 1.3 内...
  • 基于stm32的绘图机器人设计

    千次阅读 2019-07-07 08:26:29
    基于stm32的绘图机器人设计 经过一段时间的折腾,终于算是把绘图机器人弄完啦。转载请注明出处 简介 这是我的大学毕业设计,平平淡淡才是真,本设计只为完成简单的绘图工作而设计 简单的图像处理算法 简单的机电...
  • 基于STM32的数字示波器设计,本设计包含成套的资料。对于做毕业设计的,很有帮助
  • STM32毕业设计论文-STM32图像采集系统 (基于stm32的图像动态采集系统 论文)

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 194
精华内容 77
关键字:

基于stm32的毕业设计