1 Star 12 Fork 5

志宇益生菌 / 有趣的项目--STM32单片机

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
AGPL-3.0

有趣的项目--STM32单片机

介绍

  • 本仓库用于存放我制作过的各种与【STM32单片机】有关的有趣项目。(2018年至。。)
  • 是我大学期间主要用来做科研比赛的单片机,功能挺强大的。当时参加广大创客协会学习了avr单片机后,为了能在比赛中使用更强大,更多资源控制,所以师兄们推荐自学atm32单品机,也是当时参加比赛最常用的单片机。接触了库函数开发,掌握基本知识,后续也参加了很多比赛,有校内的创新比赛,上到全国电子设计竞赛、挑战杯比赛等,获得很多奖状。这里分享一些做过有趣的项目。[一些比赛的开源资料可能在其他仓库路径]
  • 欢迎大家来探讨交流,提出更多有趣的项目。
  • 本仓库使用AGPL开源协议,请大家遵循协议。

软件架构

  • 使用FSL库函数开发。(也有个别使用新的HAL库开发)
  • 使用keil5或以上编程的(也有其他编程软件),大部分使用stm32f103系列的,少部分使用stm32f4等系列的单片机。
  • 使用mcuisp及更新版本通过串口就可以烧录,或者通过st-link在keil5直接烧录(也有其他jtag、jlink等)
  • 有些项目是多年后整理的,可能需要自行在代码中找引脚连接等硬件信息。

视频展示链接(B站) (后续会贴上大部分视频地址)

  1. 机智云物联网控制9:
  2. 甲烷温度检测器18、47:
  3. 人流量检测器19:
  4. 风扇控制系统 仿真41:
  5. 自动量程测电阻 蓝牙传输42:
  6. 麦克纳姆轮小车-操纵杆控制:

各项目简介

1. 机智云物联网控制9:

  • 这个呢,应该是在我大二的时候做的吧。当时是物联网兴起不久,应该说是我对物联网刚好感兴趣,也开始接触esp8266一段时间,就去了解远程控制的平台,先是网上找到了机智云平台,说是可以自己生成固件,烧录到8266上,配合单片机即可实现控制。看起来好像比较轻松一些,就打算尝试一下。单片机为手上自学的stm32f103开发板(忘了具体型号),配合使用开发板上的资源来实现远程控制:手机机智云app上直接控制开发板的红绿led亮灭,蜂鸣器是否鸣叫,以及实时获取开发板的温湿度数值。信息显示在开发板的lcd屏幕上,可智能联网。
  • 大致思路:在机智云上配置数据流等信息,然后生成固件烧录到esp8266上,然后根据机智云提供的开发指南文档,将提供的几个库文件移植到stm32工程代码中,根据接口图让stm32为8266提供一些接口,即可让8266正常工作起来,然后通过库函数调用接口的方式,将数据发送到云端,或者回调函数通知stm32收到的数据命令。stm32再根据来执行功能。
  • 过程:现在看起来是不难的,但当时总有很多问题存在。。。首先是机智云平台,第一次接触,要学习了解一下,注册登录账号,选择最合适本项目的网络交互协议:MQTT,进行创建产品、创建设备可自动生成产品秘钥等信息(product key、product secert)这个很重要,在硬件中需哟啊绑定的。了解了里边的设置什么的,最后在数据点里边创建适合本项目的数据流,这里用了bool可写的方式,对应3个开关量的控制,设置2个只读数值类型,百分比的方式,来显示温湿度对应的数值。设置好后,使用虚拟设备进行测试数据交互是否正常,与通信日志做对比可验证。后来也用实际的手机上的机智云来测试(可生成手机apk进行安装,里边对应有配网的方式过程,以及在云端配置好的控制界面)。将生成的固件按照教程用ESP8266 DOWNLOAD TOOL软件烧录到esp8266后,插上串口模块连电脑(这里也老是运行不起来,搞了很久,最后了解到是因为8266上电瞬间耗电大,需要额外给个较大功率的3.3v才正常启动),烧录后连上电脑,通过 机智云串口调试助手,输入设备秘钥,设置好串口通信配置,即可观察到串口交互信息。先进入配置网络,在app中输入好wifi信息后,会自动配置完成并连上wifi。现在直接把电脑当做stm32来模拟运行情况,测试可发送模拟的温湿度值到机智云,手机端能跟着更新。同时也可以手机下发命令,在调试助手能看到接收到的数据并更新到数据点的值。说明8266到手机端都没有问题了,接下来搞8266与stm32的交互。
  • 输入图片说明
  • 这个交互得根据提供的开发指南和接口图来精选的(后来发现机智云提供了独立mcu的方式生成固件,这种更方便,这样就不需要stm32来串口交互了,还能直接由esp8266控制传感器)。 在图上可以看到,8266端成为gizwits逻辑端,里边就当做黑匣子,不用深究,周边有提供的接口:发送串口和配置接收中断给gizPutData函数、提供ms的中断来执行gizTimerMs函数,提供复位函数来执行mcuRestart函数,对于事件处理的回调函数gizwitsEventProcess中需要自行判断执行动作(就是下发指令解析执行),还有stm32主动采集数据通过userHandle来推送到云端。最后还有个配置入网的函数,由自己来调用。
  • 输入图片说明
  • 当时自学stm32的库是fsl库,而生成的机智云库是HAL的stm32库,查了是新出的库,(说是可统一很多种型号,通用性强的库),简单看里边的函数,跟fsl库还是有写差别,虽然初始化调用等的顺序基本差不多,但里边的函数名是跟fsl不一样的,并且有些还没有,这就麻烦了。。。当时试过直接移植进来,直接报错到爆炸,但重新学习HAL新库,感觉太花时间。两个库并存运行又很不现实。最后还是被迫学点HAL库,于是这个项目功能就简单些了。还好后续找到了stm32某个型号有提供HAL库,就直接把相关例程拿出来修改烧录测试,所幸正点原子的教程很多通用,能直接使用,就尝试先将机智云库移植进去显示屏的例程,初始化了定时器2的1ms调用指定函数,初始化串口2来与8266通信,串口1跟电脑通信调试,调用提供的各个初始化函数。就基本能运行了,lcd屏做好提示,通过配置多个按键来分别执行一键配网、热点配网、wifi重启功能并在lcd上做提示。然后使用userHandle函数模拟上传温湿度的值,多次测试后,可以实现一键配网及上传温湿度的值。意味着可以完成,于是将温湿度获取代码移植进来,解析转化格式,显示在lcd上并真正上传。然后在gizwitsEventProcess回调函数中,它里边已经有区分命令事件的逻辑了,就一一添加进去,写好变量函数对应执行:蜂鸣器命令响则写好变量,显示在lcd上;不响的命令也同样,主函数中通过变量执行,因为还要根据温湿度设置的范围来决定是否鸣叫。红绿led的控制也一样,串口提示、lcd提示,然后直接控制led。里边也串口提示了RSSI信号值、wifi信息、模式等。主函数还判断温度,超出则显示和蜂鸣器响。因为一开始lcd没怎么变化且有卡机情况,就在右下角放置了心跳,证明还在正常运行。整体项目就这样完成啦,过程困难多多,但成长也多多。
  • 机智云网页 数据点配置:
  • 输入图片说明
  • 使用模拟设备进行测试配置及通信是否正常
  • 输入图片说明
  • esp8266烧录固件
  • 输入图片说明
  • 机智云调试助手 调试测试8266
  • 输入图片说明
  • 正常显示的时候:
  • 输入图片说明
  • 手机控制开灯
  • 输入图片说明
  • 高温警告
  • 输入图片说明

2. 甲烷温度检测器18、47:

-这个呢,是我大学玩耍练习的,先做了个洞洞板的,后来大三有小课设,找了相接近的题目,把这个项目重新整理,绘制pcb嘉立创打板焊接的,优化一下就去交作业了。

  • 实现功能:使用stm32获取甲烷传感器、ds18b20温度传感器,将数据处理后显示到lcd1602上,同时通过esp8266的局域网建立服务器,发送到连接着的手机界面上,增加了led和蜂鸣器,当甲烷量超标或温度过高则声光提醒并wifi通知。恢复则关闭提醒。
  • 具体过程:首先呢,是之前在自学esp8266模块的AT指令中就知道了如何联网,如何内部建立服务器等流程。于是就将对应的AT指令用stm32的串口进行交互,开机让它STA连wifi,设置多连接开启服务器,最后还要将wifi的IP地址显示出来,这样才能在手机的客户端连接上。如何显示呢,当时也尝试用stm32控制lcd1602,就拿来显示了,驱动写好,初始化过程都可显示出来。接着配置引脚控制led和蜂鸣器。了解到甲烷气体模块是使用模拟量的,就用stm32的ADC功能引脚连接,初始化后单独测试,可以得到对应的模拟量。而ds18b20也是学习中将代码拿来用,读取得到温度值,各个部分单独实现后,接下来是移植组装环节。
  • 移植组装通常没啥难度,先各个初始化,显示过程,配置8266,显示出IP地址和端口号,这样手机的网络调试助手就可以使用tcp客户端按IP和端口进行连接,对了,这里手机需要跟8266连接同一个wifi。stm32读取温度值,显示到1602上,ADC读取甲烷气体数值,通过大致的曲线公式转化为ppm单位显示1602上(这里的1602使用了4线通信方式),然后数值依次拆解发送给客户端,也就是手机,因为在循环函数,所以手机能间隔不断收到这些量。stm32判断温度范围,大于则亮led灯,更高则加上鸣叫,并且显示在1602上,发送给手机警告。同样,甲烷气体值也是两阶段提醒及显示发送。判断情况进行不鸣叫及关闭led灯。
  • 经过简单测试,发现它预热需要1分钟多,期间读取到的数值会慢慢降低,这中模块其实也只能大概测量,且不能在风大的地方,我拿去煤气罐测试,确实能稍微升高一些,毕竟我也不能直接放煤气吧??
  • 简单仿真电路图
  • 输入图片说明
  • 第一代使用洞洞板焊接
  • 输入图片说明
  • 整体运行实物图
  • 输入图片说明
  • 拿去煤气瓶旁测试
  • 输入图片说明
  • 后续绘制的pcb图
  • 输入图片说明
  • 升级打板后的实物图
  • 输入图片说明

3. 人流量检测器19:

  • 这个是使用两个红外光电传感器来检测出、入的人数,每天统计到stm32的eeprom中,通过IIC的OLED显示屏进行实时人数显示,使用一个按键来交互查询近一个星期的人流量数值。同时具备da1302实时时间模块,获取到的时间实时显示到OLED上,并依据该实时时间进行统计存储的。
  • 当时也是自学OLED模块,编写显示的代码,就结合着来写个小项目,当时相当于实际操作锻炼吧。
  • 先是在仿真软件中,尝试编写好ds1302的驱动以及测试是否能正常读取实时时间,没问题会就将其他电路构思设计好加上,完成这个仿真电路图。(因为proteus8.6的引脚读取是失效的[BUG],所以就没有仿真了)
  • 实物方面:在最小系统板用杜邦线连接各个模块进行调试,逐个编写代码测试没问题,就将代码组合起来。系统开机整个进行初始化:有io口、串口、OLED驱动、ds1302驱动、按键引脚等。先读取ds1302的实时时间,显示出来。串口接收数据,在主函数中解析出,当前仅设置了修改ds1302实时时间的命令。两个红外传感器就使用两个io口来读取,通过电平的变化来检测是否有人经过,统计数量得到出入的人数。间隔一定的循环次数就读取ds1302时间更新到oled上,显示了年月日时分秒及当天的出入人数。当day改变说明到了下一天,就将前一天统计的数据存储到数组,采用移动存储,队列一样。因此能记录最近7天的数据。当检测到按键按下时,即可将缓冲数组解析显示到oled,展示历史数据。3s后恢复正常显示。
  • 仿真电路图
  • 输入图片说明
  • 实物图 器件布局
  • 输入图片说明
  • 实物图 正常工作
  • 输入图片说明

4. 风扇控制系统 仿真41:

  • 这个是大二学习stm32来进行仿真锻炼的,当时也发现了问题(仿真中io口读取电平失败),查找了很多,才发现是proteus8.6的毛病,存在BUG,据说8.9版本能正常使用,但太大了,就没去安装,后续直接实物测试了。
  • 该小项目是个风扇控制系统,具备自然风、正常风、睡眠风、无风4个档位并用led指示出来,可选择是否摇头,可设置定时关闭,每按一次按键增加定时时间5s(为了方便看到效果)。当风扇电机在运作时,有温度传感器来检测电机温度,当温度超过设定时则自动关闭电机防止烧坏。这一切状态都会显示在lcd1602上。
  • 制作过程:电机使用l298n来驱动,则需要使用定时器产生两路PWM信号,以及4个IO口控制方向,其中一个电机是主要的吹风电机,另一个是控制摇头的电机。指示灯led用io口控制,按键当时测读取电平不行,就想到了外部中断来检测,所幸可以使用。而温度高报警使用led和三极管驱动后的蜂鸣器来提醒,最后呢,温度一开始使用ds18b20来检测,移植了驱动代码,但发现读取失败,最后看代码也是发现了问题,里边还是会读取io电平,于是这个不能用。查找了资料后,最后发现可以用LM35通过stm32的ADC功能来读取,还好adc可以仿真。显示部分使用lcd1602模块,移植代码可以实现显示,于是剩下的就是组合了。
  • 开机先io口、定时器的pwm、外部中断、lcd1602、adc等初始化,完成后在1602上做欢迎显示,配置好外部中断后,使用变量来标记哪个按键有按下,自然风则转速较快,对应led亮,1602显示状态1。其他3个档位和摇头同样逻辑。当检测是定时的按键时,则变量增加,这里每次增加5s并显示出来。在主函数大循环中,不断判断时间是否到,到则关闭风扇电机,并显示定时是瞬间到。通过adc来读取LM35的电压,通过公式转化为温度值,循环检测温度值超过设定时,显示温度高,然后关闭风扇电机,当温度降下来了就重新开启。
  • 仿真图
  • 输入图片说明

5. 自动量程测电阻 蓝牙传输42:

  • 这个是我大三疫情在老家上网课,好用的万用表都在学校宿舍,家里的是老的指针的,测电阻很不方便,于是因为需求和感兴趣,就决定动手制作个自动量程的电阻表,将采集到的电压值通过蓝牙模块直接传给手机进行显示,很方便。(当时也要测某种纳米材料的按键检测阻值,波动很大要精确,然后电脑分析)
  • 项目组成很简单,但觉得比万用表的电阻档强,毕竟是会自动选量程测试电阻的,并且在判断测量的量程下精度算是很高的。硬件采用stm32最小系统以及电阻网络引出测量的两根线,串口接上蓝牙模块接口即可。纯接线测试没问题后,就绘制了pcb电路图,嘉立创打板回来焊接制作实物,打板好看多了。
  • 先硬件测试蓝牙模块与手机的通信,设置好协议参数后,即可直接串口发送。就剩下如何自动选量程了,我的想法是先划分几个量程范围,这里最后确定为4个量程,覆盖了从几欧姆到几M欧姆的范围。档位通过4个引脚控制对应的电阻的,不使用的电阻引脚值为开漏模式,减小对该电阻对测量的影响,需使用的档位则用低电平下拉来接地,分别有680k、100k、10k、1k的电阻。先各自确定好阻值并分别测试到范围后,对4个范围的叠加覆盖。理论上越接近分压电阻,测量约准确,所以以此确定量程电压的分界点。
  • 所以自动量程就是从最大量程开始测,当测量值小于量程边界,则选择最合适的量程再次测量得到准确值,这样自动测量最多2次adc即可显示电阻值,直接蓝牙发送。为了实用些,这里增加了指令控制,手机发送s则为停止采集,停止adc的测量;发送1则固定实用最大量程测量,因为只需测1次adc所以快;发送2是开启自动量程的模式。发送u则降低采集速度,增加了单次采集的次数,让数据发送慢一些,但数据更加精确,因为经过平均计算的。发送d则相反,提高采集速度,单次采集次数减少,反应快,但数据可能有些漂浮。当然,接收到了命令会回复接收的命令,证明有响应。
  • 当然,它也可以通过蓝牙主机直接连电脑,在电脑的串口直接收到数据,或是发送命令控制,这样就不用拉着线,灵活性高。
  • 电路板pcb图
  • 输入图片说明
  • 实物图
  • 输入图片说明

6. 麦克纳姆轮小车-操纵杆控制:

  • 这个是在我大二电子设计竞赛的准备工作中完成了最基本的驱动功能:能蓝牙手机控制上下左右及斜向总共8个方向的平移,还有原地正反转功能。当时想着使用操纵杆来遥控控制呢,只是学习比赛繁忙,就忘了去实现了。最后是工作后才完成的。

  • 毕业工作后整理东西才发现当时有这个想法,而且也觉得很有趣,并且在想应该不止8个方向的平移,理论能任意方向移动,于是就尝试写代码实现,理论先实现任意平移,再结合操纵杆控制实现任意平移,结合自带按键可旋转(其实操作杆是先实现的,控制其8方向平移,再开发任意方向平移)。

  • 先实现遥控器部分:操纵杆是有x、y运动轴组成可360°随意转动的,因为两个轴对应有滑动变阻器,所以单片机采用2个adc来读取对应的值,结合滑动范围0-4096(12bit)可以判断此时操纵杆的姿态,与2048对比得出其位于哪个象限。在操纵杆这边就直接读取adc,然后根据串口的自定义命令格式进行传输就可以了。我这里就用 #x轴adc值,y轴adc值* 来通知小车的平移姿态,但还要有自旋转,还好这个操纵杆也带了一个按键,藏在操作杆下面,于是可以用来切换控制旋转。这里的旋转就使用x轴来判断顺时针还是逆时针 发送命令格式 #x轴adc值* ,而且操纵杆越偏离,自旋转速度就会越快,跟平移是一样的。这些逻辑不难,很快完成了,后续为了方便就在操纵杆端加轴向纠正系数。

  • 操纵杆后续也加上了开机直接发送绕圆形运动的小车命令,由三角函数来生成xy轴数据发送的,用来校正系数和展示任意平移的效果的。最后效果也挺不错的。

  • 小车原理:这个嘛,先看看麦克纳姆轮的结构,是呈45°的,这样在一些组合下,可实现4轮小车的8个方向的平移,这个在网上都有很多图示教程帮你分析,这里就不罗嗦了。那8个方向是很好理解的力的组合,如何实现任意平移呢?这个就设计到物理的力学了,先明白8个方向的运动,其4个电机的速度都是一致的,那当其中有速度不一样的时候,会发生什么呢?于是就成为力学的力的合成。我当时的想法是如何从一个状态过渡到另一个状态,比如从上过渡到右上,分析一遍后,可以看到哪个离力需要增大,哪个力需要减小,然后分析两个力从哪些轮如何转向得到的,进而控制对应轮子的pwm占空比。在纸上换一遍图就分析出来了。我发现8个方向是作为典型的例子,过渡需要在8个状态过渡的,逐个力的分析结束后,就开始写代码了。操纵杆那边设计在中心点为坐标(2048,2048),左上为(0,0),横向为x轴,纵向为y轴。使用偏差量来控制小车平移方向和速度。采用蓝牙互联,构造数据格式,通过解析即可得到数据,于是逐个过渡逻辑代码慢慢实现后,进行测试,好像可以,但发现不对,速度上不是矢量等同的,导致某些方向速度大,想绕个圆形都偏离了。而且中心点不是很准确的2048,于是写了个判断排除中心小圆圈的逻辑为停止运动。

  • 接着分析了力,发现确实是要矢量计算,最后计算化简发现是可根据x、y的偏移量来矢量计算控制各车轮pwm的。改好代码后测试,终于正常些了,但还是发现绕个圆不是很圆。分析后才觉得,是小车整体的4个轮子间距不是正方形导致的,通过代码上的偏差纠正系数,终于可以像样了。通过手机的快门时间1s多来拍摄小车圆形运动,可以看出车上led拼成的圆形还是挺圆的,依次来证明调整的系数是否合适。

  • 小车旋转,就直接根据接收对应的命令进行解析。得到x轴与2048的偏差,根据偏差大小正比占空比从而改变速度,偏差为正则顺时针转,反之则逆时针转。即可对接好操纵杆那边的全部功能。最后呢,当然要让手机能够控制,于是就加上了原始的直接控制8个方向平移和自身旋转的简单命令,还有几个速度档位设置。

  • 小车整体玩起来不错,单手可以控制小车各种姿态,能直接控制它去追我的小猫,猫咪一直又好奇又害怕地保持距离,哈哈哈。同样,关闭操纵杆后,可以在手机蓝牙软件直接控制小车,实现多个遥控的功能。因为小车有点大只,而且电压采用是12v的,测试过能驱动小车运行时的速度已经有些大了,而小一些则小车动不了,所以只适合在空地大一些的地方跑,不然有些难控制。

  • 后续计划:用它来做物联网视频监控小车,让我能够在宿舍之外的地方,随时可以远程控制小车,结合“掌上看家”手机来查看视频画面,组合控制小车来找找小猫咪,看它在干啥,哈哈

  • 麦克纳姆轮小车及操纵杆

  • 输入图片说明

  • 操纵杆控制

  • 输入图片说明

  • 手机蓝牙控制

  • 输入图片说明

  • 绕圆平移的效果图

  • 输入图片说明

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see <http://www.gnu.org/licenses/>.

简介

本仓库用于存放我制作过的各种与【STM32单片机】有关的有趣项目。 是我大学期间主要用来做科研比赛的单片机,功能挺强大的。 欢迎大家来探讨交流,提出更多有趣的项目。 本仓库使用AGPL开源协议,请大家遵循。 展开 收起
C++ 等 4 种语言
AGPL-3.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/lsy_zhiyu/funny_stm32.git
git@gitee.com:lsy_zhiyu/funny_stm32.git
lsy_zhiyu
funny_stm32
有趣的项目--STM32单片机
master

搜索帮助