【雕爷学编程】Arduino动手做(176)---UFUN2.0 开发板
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十六:基于STM32F103RCT6及多种传感器的UFUN2.0升级开发板
**UFUN的诞生**
有一只蚂蚁Z,很热爱电子,它经常把工作和学习中的经验及心得在网上与人分享。十年下来,蚂蚁 Z 结识了好多同样热爱电子的小伙伴……2014 年 10 月 2 日,蚂蚁Z的结婚周年,它和老婆决定把买礼物的钱拿来做一些学习板送给在校大学生,以帮助学生更好的理解电子知识和开发技巧。蚂蚁Z把这个想法贴到了博客,迅速得到几十位小伙伴的响应。大家筹钱献力,利用业余时间共同设计了这套学习板。经过了来来回回的设计验证,也历经了一些小的变故。最终在小伙伴们的共同努力下,加上一些厂商的免费或成本价支持,400套学习板终于诞生了。现在张工还特意将学习板拿出来,在各大论坛上招募工程师使用。
发起人张进东认为,“这块学习板是几十名海内外有情怀工程师的心血。是理论于实践结合最紧密的学习工具,是一个故事最多,最有温度和情怀的学习工具。”
(见《永不停息的红舞步:一个电子工程师的心路历程》[https://www.mianbaoban.cn/blog/3894459-409526.html](https://www.mianbaoban.cn/blog/3894459-409526.html))
**UFUN的含义是什么?**
“U”取自希腊字母“μ”相似的英文字母,愿意为 micro,即“点点兴趣和爱好的结晶”,我们希望通过它能把我们共同的努力,把点点的乐趣传递给更多的人。
UFUN的图标含义?
“U”上面两个点是伸出的双手,象征着热情的拥抱,是工程师与学生之间爱的传递;
“F”是 family;“UN”是取形电路走线,连接美好。
UFUN里有什么?
UFUN的设计核心是助于帮助大学生学习和理解课程,同时又能对学生毕业找工作有很明显的帮助。ARM、嵌入式操作系统、物联网、加速度传感器、TF 卡操作、电容触摸按键、USB 转串口、I2C 接口、PWM 控制、蜂鸣器控制、LED 控制、超级电容使用等,这些对于当前找工作都是非常热门的技能,熟练掌握后,可以平滑过度到日后的工作中。另外,二阶低通滤波设计及分析、小信号高增益带通滤波电路设计、运放电路分析都是大学课程中非常有价值但又令学生非常困惑难以理解的内容,UFUN 针对这些课程设计了实用电路,通过分析、计算、仿真、实践,可以让学生更好的了解理论与实践的结合过程,真正激发学生对硬件设计精髓的兴趣。0 欧电阻、磁珠、退耦电容、肖特基二极管、三极管、LDO、静电防护、晶体选择及使用技巧,都是实际工作中非常实用且重要的技能。
UFUN还有什么?
板上带有和手机一样的 USB 接口,你只需要一根手机数据线,就可以从电脑下载编译好的程序并运行了。但为方便调试和跟踪代码,板子上还留有独立的 JTAG 口,便于连接 ufun进行调试。UFUN 不是一本死板的“教科书”,它有非常炫的七彩 LED,通过调节 RGB 的 PWM 占空比,可以得到你想要的任何颜色,并且可以按你的设计思路来变幻色彩;它体积非常小巧,只有 4*6cm,方便学生携带,更方便嵌入到你所能想到一切智能化的物件中,让你的想象力得到更好的发挥;便捷的传感器接口,插上各种传感器,就可以实现测量和声光预警;4 个漂亮的电容感应触摸按键,给你更多的创意发挥空间;三轴加速度计,计步、游戏、测量,你可以自由想象……UFUN 留有丰富的扩展接口,接口使用 mini PCIE 插座,扩展板不需要对应的连接器,可以极大的降低扩展板的成本。用户可以自由的扩展液晶,测量,通讯模块……总之,给你的无限创造力提供了无限的空间。只需要一个手机随身充,你就可以带着UFUN 和你的创想,去体验电子给你带来的无限乐趣!
UFUN的特点
UFUN学习板精致小巧,功能多,集成了Arm芯片、TF卡、MicroUSB、蜂鸣器、LED、触摸按键、三轴加速度计、带能滤波器和陷波器等。
这款学习板是完全开源的,不仅如此,张进东还在附带的这些资料中,解释了为什么开发板要这么设计,这么设计有什么好处,理论依据是什么等等。比教科书上的解释更加浅显易懂,可以让刚入门的小伙伴边玩边学,也更容易理解课本上的理论知识。
UFUN资源简介
UFUN的配置
主控MCU:STM32F103RCT6,LQFP64封装,STM32系列大容量产品,256KB Flash + 48kB SRAM,内存空间足够使用了,主频72MHz,外设也还算丰富,51个可用IO,8个16位定时器,3路SPI,2路串口,1路SDIO等等。对于新手入门32位ARM单片机是一个很好的选择,学习资料非常多,学习过程中遇到的问题基本都能在网上找到答案。
串口芯片:CH340,板子自带了USB-TTL转换芯片,对于没有调试器的朋友,可以方便的通过串口1来下载程序,同时,也是程序调试的好帮手。
传感器:LIS3DH,ST公司的MEMS传感器,三轴加速度计,支持IIC或者SPI协议,本板子采用的是IIC协议接口。
触摸按键:TTP224N,4通道触摸芯片,上下左右4个触摸按键直接画在了板子上,可以做出很多好玩的东西。
Mini-PCIe:据张工介绍,这个座子并不是按照PCIe的协议来设计的,所以使用不了PCIe接口的模块,如4G模块SIM7600CE。它只是空余IO的引出,但是板子并没有配备PCIe的转2.54mm排针的转接板,所以并不是很方便的扩展外部器件,如液晶屏,传感器模块等。不过大家可以自己画扩展板哈,就是扩展板的结构尺寸不好把握,如果后续能开源PCB文件就好了。
TF卡座:采用的是自弹式TF卡槽,内部直接连接了STM32的SDIO接口,可以直接通过官方固件库来驱动。
RGB灯:RGB采用的全彩共阳极LED,通过控制3路PWM波,从而调出各种颜色,当然,如果能采用那种外部是玻璃封装的就更好了。
LED灯:LED采用的正贴红色光。
蜂鸣器:HY-8540,贴片无源蜂鸣器,比传统的直插式蜂鸣器要稍微小一点。
RTC电池:使用的是贴片超级电容,相比于贴片电池座+纽扣电池的方式,体积要小的多。
拨码开关:BOOT设置,没有使用跳线帽+排针的方式,毕竟跳线帽这小玩意容易丢。我见过一种比这更小的贴片拨码开关,不过得用镊子才能拨,这里采用大封装的,可以直接用手拨动。
AD滤波电路:由于我的模电比较菜,所以这部分电路没有看太懂,还有各个阻容值的计算过程,很适合学习。
Micro-USB接口:USB使用了和普通安卓手机一样的USB接口,而不是Mini-USB,之前看有朋友在试用过程中,不小心把端子从板子上直接拔掉了,我在使用中没有遇到这个情况,所以大家在拔USB线的时候,温柔一点,如果焊盘被拔掉了,那就玩不了。
外部IO:留出了SWD调试端口,标准2.54mm排针,可以方便的通过J-Link或ST-Link调试器下载程序和调试。
其他:ESD,磁珠,防反接保护等等这些板子上都有设计。
UFUN的电原理图
UFUN的电路板
**UFUN的升级细节(原1.0升级为2.0版本)**
#扩展接口的修改。和上一版相比,最大的一个修改就是修改扩展接口Mini-PCIe为2.0mm间距双排排针插座,受板子面积影响,并不是标准2.54mm间距的,当然如果手里没2.0mm间距的排线可能不是很方便,我也是当时又从淘宝买了一些。当然也可以方便的和扩展板进行连接,uFUN配套的扩展板已经设计完成了。
#拨码开关和电源开关。针对第一版中发现拨码开关接触不良,去掉拨码开关选择BOOT的功能,而改为排针跳线方式,去掉了电源开关。
#晶振飞线问题。CH340和STM32的时钟信号12M晶振,由原来的无源晶体改为有源晶体,更正了1.0版本的时钟飞线问题。
#光敏电阻。去掉了原来触摸按键中间背面的反贴红色光LED灯,替换为贴片的光敏电阻,配合AD电压采集,可以用于实现心率传感器的功能。
#触摸按键对地静态电容的调整。由原来的50pF改为了22pF,提高了一定的灵敏度。
#蜂鸣器封装改为更小的。由原来的HY-8540无源蜂鸣器改为MLT-5020 5*5*2mm超小超薄封装的无源蜂鸣器。
#B10和B11网络标号反了的问题。旧版本原理图中PB10和PB11的网络标号反了,导致UART3_TX和UART3_RX也反了,所以当时我画的扩展板也不得不进行割线+飞线补救,不过好在影响不大。
#布局优化。新规划了布局并进行了许多细节优化,让UFUN更漂亮、更好用,背面4个大件整齐竖着排列。
#uFUN开发板2.0板级支持包:[https://github.com/lhxzui/rt-thr ... m32f103-yf-ufunverb](https://github.com/lhxzui/rt-thread/tree/lhxzui_rtt/bsp/stm32/stm32f103-yf-ufunverb)
#BSP包括MDK4、MDK5、IAR工程,并且支持GCC开发环境,目前对外设的支持还只有串口1,RGB-B LED,部分GPIO的支持,板载传感器等支持还有待完善。
注:左为新UFUN,2.0版本
UFUN的相关比较
这里要感谢面包板社区和UFUN开发团队,给了我这次学习和试用的机会。真的惭愧,以前从未接触过STM32,而Arduino也是今年5月份开始学习的,基础差些,抱着试试看的想法,准备尝试使用Arduino IDE搭建UFUN2.0开发环境及LED闪灯,当然走哪算哪.......
众所周知,使用Arduino进行开发简单快捷,一个项目能很快的做好。以我自己的例子,小时候爱好过无线电,有点动手能力而已,但没有单片机的底子,编程语言基础也是零,只好选择Arduino可视化的图形编程来入门。几个月以来,从简单的干簧管模块开始,一边查资料学习,一边尝试做实验,同步发帖子(兼顾分享与交流)。上手一个新的传感器,先查相关资料了解基本情况,然后尝试做实验,不管程序是否能走通,都记录下来。分享的实验记录内容,主要是相关技术资料(网上搜集整理)+代码编程(Arduino)+图形编程(几种平台软件配合)+仿真编程(国产自主知识产权Linkboy),以务实解决问题为实验目标(走通能用)。说来好玩,这些做实验的传感器和执行器模块大部分见都没有见过,还有不少甚至没听说过(主要是在深圳电子市场上耐心淘来的)。因为没有把握,最早开贴Arduino系列实验目标——37种传感器与模块,后来升级为66种,再后来变成108种,至10月中旬止实际已经发帖135种实验了(成功率达95%以上),现在新的目标是168种(估计要推后到明年了)。所以说Arduino能风靡全球,成为入门电子DIY的首选是有一定道理的,确实兼容性非常棒,开发环境良好。Arduino的强大之处就在于它拥有完善的生态链,先前的贡献者可能已经写出了你需要的各种库文件。不论是读取温湿度传感器的数值还是利用液晶屏显示文字,亦或者仅仅是驱动舵机,你都能在网络上找到适用于Arduino的库函数。
下面就开始新的尝试与实验:
第一步:安装Arduino IDE
arduino官网[https://www.arduino.cc](https://www.arduino.cc/) ,下载Arduino IDE页面 [https://www.arduino.cc/en/Main/Software](https://www.arduino.cc/en/Main/Software)
安装版本是1.8.10,兼容各大平台,有安装版和免安装版二种。
第二步:下载安装Arduino SAM开发板
不安装这个开发板后编译会出现arm-none-eabi-g++错误
打开Arduino——工具——开发板管理器
然后搜索——SAM开发板并下载安装
安装成功是这样的
第三步:下载STM32F103RCT6用的Arduino开发板库
下载地址:<u style="overflow-wrap: break-word;">[https://github.com/rogerclarkmelbourne/Arduino_STM32](https://github.com/rogerclarkmelbourne/Arduino_STM32) </u>
下载后解压,将文件夹Arduino_STM32_master重命名为Arduino_STM32后复制到C:\Users\用户名\Documents\Arduino\hardware文件夹,如果没有hardware文件夹就新建一个(由于这个压缩包体积偏大,我下载好多次都失败了,后来在21ic下载站上用2元兑换了一个,呵呵,要解决问题,链接:[http://dl.21ic.com/download/code/arduino_stm32-210074.html](http://dl.21ic.com/download/code/arduino_stm32-210074.html))。这个Arduino_STM32的库有40多M,包括文件:
有了这个库我们就可以让arduino IDE支持ufun学习板了。由于是第三方的库,所以需要自己手动安装。
第四步:打开Arduino IDE,选择工具——开发板——选择如下开发板
选择STM32F103RCT6,256KB Flash + 48kB SRAM
第五步:安装UFUN2.0的串口驱动(串口芯片CH340),打开Arduino IDE,要能识别板子
设置端口
第六步:下载安装flash_loader_demo_v2.8.0
flash loader demo是一款ST官方的flash下载软件,用于STM32F103,STM32F407,STM32F446单片机的串口下载程序。
支持Windows 98SE, 2000, XP, Vista, 7, 8, 8.1, 10系统。
如何安装:首先删除之前版本,从开始-设置-控制面板中-添加或删除程序,移除之前的版本后,再运行安装程序。目前版本是2.8.0,下载之后默认安装。
下载链接:https://www.st.com/en/development-tools/flasher-stm32.html
链接2:https://pan.baidu.com/s/1jpwH-NU8_Y31hPPDKDuVwA
提取码:2qkb
第七步:更改ufun板子启动配置
STM32三种启动模式对应的存储介质均是芯片内置的,如下图:
(1)用户闪存 : 芯片内置的Flash。正常的工作模式。
(2)SRAM: 芯片内置的RAM区,就是内存。可以用于调试。
(3)系统存储器: 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。启动的程序功能由厂家设置。
我们把ufun的BOOT0引脚拉高,进入系统存储器启动模式,这样就可以用ST的flash_loader进行程序的下载。如上图所示把ufun最右边的两个引脚短接在一起,就是拉高了BOOT0引脚。
第八步:使用flash_loader_demo_v2.8.0烧录bin文件
接上板子,打开软件,选择USB串口线的串口号(这里是COM5)
按开发板上重置键后按Next进入下一步(已能识别256K)
按Next进入下面界面,选择Download to device
下载下面文件,解压为bin后缀名文件
[generic_boot20_pc13.rar](http://generic_boot20_pc13.rar/)
然后选择上图的Download from file按钮,选择上面解压的文件
**第九步:从Git上([https://github.com/rogerclarkmelbourne](https://github.com/rogerclarkmelbourne))下载大佬的项目文件“STM32duino-bootloader-master”**
如下页面中第二个文件,如果不导入安装这个库文件的话就无法编译生成STM32 对应的hex文件。
找到上图中圈着红线的BIN文件,下载到桌面,一会我们将用工具下载到ufun学习板中。
下载链接: [https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries](https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries)
解压后放入C:\Users\用户\Documents\Arduino\hardware\Arduino_STM32中,并烧录成功见下图
第十步:打开Arduino IDE,烧录LED闪灯程序
先确认烧录UFUN2.0开发板的6个配置
烧录的Blink程序如下(把UFUN板子的boot引脚继续拉高,按一下复位按键,然后放开)
void setup() { pinMode(PA1, OUTPUT); } void loop() { digitalWrite(PA1, HIGH); delay(1000); digitalWrite(PA1, LOW); delay(1000); }
烧录成功是这样的
忙乎一天,终于点亮板载蓝色LED
视频地址 https://v.youku.com/v_show/id_XNDQ0NjkxMTA0NA==.html?spm=a2h3j.8428770.3416059.1