【uFun开发板评测】系列 之一:开箱评测      
单片机以前只在学校玩过51,STM没有接触过,有机会还是想琢磨一下。本人虽然申请试用抽签没有被选中,但是后来有好心群友因为时间的原因把机会让给了我,感谢这位群友!
3月9日寄出,3月11日终于收到了。在那之前,不知道STM32的开发环境是否有什么特殊要求,或者是不是需要Linux环境来装交叉编译环境/特殊驱动之类的,为了不破环日常电脑的环境,我就先尝试在win10里先装Docker,如果需要特殊的环境打算在Docker里配置。
784522428.jpg
板子比我想象中的要小,拿在手上都小心翼翼,怕损坏的感觉~~不过目测层数不小,器件摆放很整齐,不是粗制滥造的。器件丝印还算清楚,PCB是青色的。正面最明显是4个圆形的方向按键,触摸的,没玩过。RGB LED旁边有个“超级电容”,有点像纽扣电池,还没仔细研究它的spec。
406648653.jpg
为了防止碰伤元器件,我给小板子安装了4个螺柱,这样板子可以可以悬起来;如果发热的话也方便散热。与很多群友不同,我是把带按键的/插针的一面当成top面, 朝上。这一面有复位键,LED, 喇叭,插针,四个方向按键,拨码跳线等。底面主要是LED朝下稍微不方便看,但是加了螺柱垫高后还可以。其它USB口,上下点开关,SD卡槽不受影响。底面还有PCIE插口,但是暂时用不上。但是这样放置的话,感觉主要的发热器件都是在底面。
342567954.jpg
先上电再说。把串口的驱动安装好,用USB线连接板子,打开串口程序,拨码开关打到ON,电源开关打开。电源灯亮了,一会儿唱起两只老虎来。按复位键,串口有如下打印:

LIS3DH Init issucceed!

External Reset occurred....
No need to configure RTC....
没有发现 SD 卡设备!

LIS3DH Init issucceed!

External Reset occurred....
No need to configure RTC....
没有发现 SD 卡设备!
991540437.jpg
看样子板子正常启动,并且有打印!一切正常!
后面再看看可否把编译环境弄起来。
#######################################################################
#我是美丽的分割线#########################################################
#######################################################################
【uFun开发板评测】之二:编译下载环境
大概看了下相关内容,需要专门的编译环境和下载环境。KIEL-MDK是比较合适的。在搜索引擎里找了一堆,有MDK511,MDK525等版本的相关链接。找了之后都是链接到百D网盘,有提取码。可是万恶的百D居然一定要下它的app才给下载,我不太喜欢这家流氓公司的软件,所以换成手机版本的网页尝试,不行;然后又搜索了其它方法比如嵌入一些JS代码的办法,还是不行啊!看来这能被这个流氓欺负了,好吧,安装一个它的app,注册还要手机认证才行…
下载后发现最后lic生成器都被防毒软件剔除掉,试了好几次都这样。没办法,直接找525版本里不含lic生成器的包了。
折腾了一阵子,总算把MDK525装上去了,还好,在试用期用一下;等到期了再想别的办法,先这么用吧
赶紧打开项目,提示项目指定的STM32F103不在列表里。想起前人说过,新版本的MDK为了减少安装包大小,去掉了老型号的芯片。好吧,自己加吧。打开pack install自己安装吧。(哪怕是自己手动装些老的支持包,我也喜欢用最新版本的软件,因为新版本软件功能/兼容性/性能方面一般会好一些)
在pack install里点击左上角的更新按钮,它会联网从官方网站下载所有的厂家型号更新到devices 页里,要好一会儿才更新完支持的device包。选中其中的STM32F103,在右边的packs页里,keil: STM32F1xx_DFP右边的action里点击install,过一会儿就安装好了。
1.png
回到MDK主界面,打开工程,不报不支持device的错误了。
2.png
高兴地点击编译,傻眼了,一会儿报了38个错误。还好都是因为没找到一个头文件。在《两只老虎》的目录下找到了这个文件,拷到本工程的core目录下即可。坛友说再kiel的安装目录下有这个头文件,反正我没找到,就用这个办法了。估计跟不同的MDK版本有关吧。反正这种文件也没人改,有得用就行了。另外一种办法是给编译器的Include路径加上这个目录,但是我这里暂时不指向另一个工程的目录。
3.png
4.png
解决了这个头文件的问题后,重新编译,成功!
5.png
接下来准备下载编译的hex到板子。看了下jlink,是一种仿真器,网上说有掉fimware的危险,不知道可靠不可靠;而且目前暂时不需要单步跟踪调试,所以暂时先不买。还好,这种单片机支持ISP下载的方式,能烧flash就行了。
下载了flash loader  demostrator,打开app直接连。发现默认的串口是不对的,改正串口。boot拨码开关设置如下:
boot0=1,boot1=1----------------内存启动模式
boot0=1,boot1=0----------------rom启动模式(串口isp下载程序)
第一次出现不认识器件的提示,看来是两个跳线搞反了。感觉换一下两个拨码开关,就识别了,好开心!
6.png
7.png
接下来先选中合适的device,它默认识别是256K的 STM32,不错! 然后全部擦除,成功! 直接烧写刚才编译出来的文件,在output目录下的HEX格式的文件。
8.png
接下来把boot拨码开关复原,即两位都是“ON”
上电启动,打开串口终端查看打印,果然新的flash被烧进去了,两只老虎被覆盖了!成功编译并且烧录,环境ready!
9.png
#######################################################################
#我是美丽的分割线#########################################################
#######################################################################
【uFun开发板评测】之三:软件更改
前面尝试环境,本篇打算试着改下软件,“定制化”成自己想要的东西。
弄什么呢? 先前在使用板子的时候,经常播放“两只老虎”的歌曲。小伙伴就很鄙夷地跟我说:你这小玩意只会唱“两只老虎”,有本事你让他唱唱别的歌怎么样?尽管当时不敢一口答应,但是我还是想着把歌曲改一下,例程应该是把1,2,3,4,5,6,7等基本音节都已经封装好了。
首先,把“两只老虎”的例程重新编译下,下载到板子,没问题,两只老虎唱起来了!这证明baseline没问题!这个很重要,任何改动都应该基于一个已知的/好用的baseline
然后看代码,按照文档介绍,用户程序和入口在“USER”目录下,然后该目录下有所需要的驱动和封装,根据文件名就能对应对应的设备驱动
Capture1.PNG Capture2.PNG
打开"mian.c",这里是主程序的入口
往下翻,一下子就看到了这个数组的定义:
unsignedint double_tigers[]
Capture3.PNG
应该是把两只老虎的旋律放在这个数组里了,哈哈,原来这么简单啊!
看了数组定义,果真是两只老虎的绚丽。
那换个什么歌呢?换个“小毛驴”吧,“我有一头小毛驴我从来也不骑……"
把旋律对应的数组整一整,可以得到下面的定义(此处暂时不改变量名,还是用double_tigers做数组名,只是改变数组的初始赋值,应该是静态的):
Capture4.PNG

因为这个旋律有点长, 定义数组时所以分成4句,每句一行:
我有一只小毛驴 我从来也不骑
有一天我心血来潮 骑着去赶集
我手里拿着小皮鞭 我心里正得意
不知怎么哗拉拉拉 我摔了一身泥

搞定原始数组,重新编译,没有错误!好顺利啊!赶紧按照上一篇的方法烧进去吧!
拨boot开个,烧录,拨boot开关,重启
欢乐的音乐响起!!但但~~~~~~~~~~~~~~~~~~~~
这是“两只老虎”的音乐,不是“小毛驴”~~~什么,改动没有进去?
检查代码,没问题啊
Capture5.PNG
难道没有烧录成功?
严格一点的步骤:
1, 编译的时候选择rebuild all的选项,避免文件依赖方面的错误
2,烧录的时候,先擦除,证实没法启动,然后再重新烧录
3,重新烧录检查文件生产的时间戳,确认是刚编译产生的hex文件
就这样,折腾下去,发现还是不对,真是见鬼啊!看来是代码中还有别的可能

于是回过头来仔细看看mian.c
果然发现,在switch语句里的case2下面,第一个万能版被注释掉了, double_tigers这个变量就是在里面被调用的
Capture6.PNG
再往下看,第二办是舒适版,这个没有被注释掉,都是case这个状态下执行的内容
Capture7.PNG
果然是在这里,细看舒适版完全摈弃了数组,直接是hardcoding旋律了。
这里把舒适版注释掉,把万能版打开
Capture8.PNG
注意以上 for循环里,原先是根据“两只老虎”来hardcoding数组长度的,这里我改成根据计算长度来限定循环次数,这样可以随便改旋律了。这要求数组必须被初始化。

这样重新编译,下载,终于变成“小毛驴”的歌曲了
如原文注释,万能版不能很好的控制节拍;如果需要很好的控制节拍,需要像舒适版那样的每个音符去控制delay。这是不够完善地方;但此文仅仅是试验,不是为了追求悦耳的音乐,所以练习暂时到此了。
#######################################################################
#我是美丽的分割线#########################################################
#######################################################################
【uFun开发板评测】之四:硬件外设尝试+总结
一直想拿这个板子连接一个外设,去控制外设。可惜这个板子没有网络连接的功能,只能用GPIO去控制了。
看板子上的输出,方便连接的只有CON3, PWMA1/PWMA2
原理图上的连接如下: 它连接到MCU的GPIO B的8和9两个管腿
1.png
2.png
打算用杜邦线把 PWMA1和GND连出来,接到外部的设备比如一个LED或者电机器件上
3.jpg
4.jpg
CON3的PIN1和PIN3分别是PWMA1信号的GND,下载之后用万用表量,并没有量到信号
怀疑是GPIO初始化的PWM的占空比不对,大概看了一下,按照控制LED的方式把pwm的初始化改了一下,发现貌似有微弱的电压跳动(0.2伏,基本可以忽略)
因为时间的关系,并没有来得及仔细研究GPIO的PWM控制,不知道设置不对还是驱动能力的问题
初始化设置不对: 占空比设置不对, 造成有效的电压太小
驱动能力: 这个一直有问号,一般GPIO是不能直接驱动电机的,得借助三极管放大;原图设计中有滤波器,没有仔细算频率范围;但是从DC的角度,每个GPIO都串了2K的电阻,这样哪怕是3V3打满,驱动电流也很小。

因为今天截止, 所以试验只能暂时到此,后面再找时间来完善输出方面的控制
总的来说,这个小板子麻雀虽小,但五脏俱全,本身带了很多控制的东西。将来的版本能把硬件连接改善一下,并且再加上无线连接就更好了!

感谢主办方给与参与的机会!希望将来的活动越来越多!生意兴隆!