【uFun开发板评测】系列 之一:开箱评测
单片机以前只在学校玩过51,STM没有接触过,有机会还是想琢磨一下。本人虽然申请试用抽签没有被选中,但是后来有好心群友因为时间的原因把机会让给了我,感谢这位群友!
3月9日寄出,3月11日终于收到了。在那之前,不知道STM32的开发环境是否有什么特殊要求,或者是不是需要Linux环境来装交叉编译环境/特殊驱动之类的,为了不破环日常电脑的环境,我就先尝试在win10里先装Docker,如果需要特殊的环境打算在Docker里配置。
板子比我想象中的要小,拿在手上都小心翼翼,怕损坏的感觉~~不过目测层数不小,器件摆放很整齐,不是粗制滥造的。器件丝印还算清楚,PCB是青色的。正面最明显是4个圆形的方向按键,触摸的,没玩过。RGB LED旁边有个“超级电容”,有点像纽扣电池,还没仔细研究它的spec。
为了防止碰伤元器件,我给小板子安装了4个螺柱,这样板子可以可以悬起来;如果发热的话也方便散热。与很多群友不同,我是把带按键的/插针的一面当成top面, 朝上。这一面有复位键,LED, 喇叭,插针,四个方向按键,拨码跳线等。底面主要是LED朝下稍微不方便看,但是加了螺柱垫高后还可以。其它USB口,上下点开关,SD卡槽不受影响。底面还有PCIE插口,但是暂时用不上。但是这样放置的话,感觉主要的发热器件都是在底面。
先上电再说。把串口的驱动安装好,用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 卡设备!
看样子板子正常启动,并且有打印!一切正常!
后面再看看可否把编译环境弄起来。
#######################################################################
#我是美丽的分割线#########################################################
#######################################################################
【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,过一会儿就安装好了。
回到MDK主界面,打开工程,不报不支持device的错误了。
高兴地点击编译,傻眼了,一会儿报了38个错误。还好都是因为没找到一个头文件。在《两只老虎》的目录下找到了这个文件,拷到本工程的core目录下即可。坛友说再kiel的安装目录下有这个头文件,反正我没找到,就用这个办法了。估计跟不同的MDK版本有关吧。反正这种文件也没人改,有得用就行了。另外一种办法是给编译器的Include路径加上这个目录,但是我这里暂时不指向另一个工程的目录。
解决了这个头文件的问题后,重新编译,成功!
接下来准备下载编译的hex到板子。看了下jlink,是一种仿真器,网上说有掉fimware的危险,不知道可靠不可靠;而且目前暂时不需要单步跟踪调试,所以暂时先不买。还好,这种单片机支持ISP下载的方式,能烧flash就行了。
下载了flash loader demostrator,打开app直接连。发现默认的串口是不对的,改正串口。boot拨码开关设置如下:
boot0=1,boot1=1----------------内存启动模式
boot0=1,boot1=0----------------rom启动模式(串口isp下载程序)
第一次出现不认识器件的提示,看来是两个跳线搞反了。感觉换一下两个拨码开关,就识别了,好开心!
接下来先选中合适的device,它默认识别是256K的 STM32,不错! 然后全部擦除,成功! 直接烧写刚才编译出来的文件,在output目录下的HEX格式的文件。
接下来把boot拨码开关复原,即两位都是“ON”
上电启动,打开串口终端查看打印,果然新的flash被烧进去了,两只老虎被覆盖了!成功编译并且烧录,环境ready!
#######################################################################
#我是美丽的分割线#########################################################
#######################################################################
【uFun开发板评测】之三:软件更改
前面尝试环境,本篇打算试着改下软件,“定制化”成自己想要的东西。
弄什么呢? 先前在使用板子的时候,经常播放“两只老虎”的歌曲。小伙伴就很鄙夷地跟我说:你这小玩意只会唱“两只老虎”,有本事你让他唱唱别的歌怎么样?尽管当时不敢一口答应,但是我还是想着把歌曲改一下,例程应该是把1,2,3,4,5,6,7等基本音节都已经封装好了。
首先,把“两只老虎”的例程重新编译下,下载到板子,没问题,两只老虎唱起来了!这证明baseline没问题!这个很重要,任何改动都应该基于一个已知的/好用的baseline
然后看代码,按照文档介绍,用户程序和入口在“USER”目录下,然后该目录下有所需要的驱动和封装,根据文件名就能对应对应的设备驱动
打开"mian.c",这里是主程序的入口
往下翻,一下子就看到了这个数组的定义:
unsignedint double_tigers[]
应该是把两只老虎的旋律放在这个数组里了,哈哈,原来这么简单啊!
看了数组定义,果真是两只老虎的绚丽。
那换个什么歌呢?换个“小毛驴”吧,“我有一头小毛驴我从来也不骑……"
把旋律对应的数组整一整,可以得到下面的定义(此处暂时不改变量名,还是用double_tigers做数组名,只是改变数组的初始赋值,应该是静态的):
因为这个旋律有点长, 定义数组时所以分成4句,每句一行:
我有一只小毛驴 我从来也不骑
有一天我心血来潮 骑着去赶集
我手里拿着小皮鞭 我心里正得意
不知怎么哗拉拉拉 我摔了一身泥
搞定原始数组,重新编译,没有错误!好顺利啊!赶紧按照上一篇的方法烧进去吧!
拨boot开个,烧录,拨boot开关,重启
欢乐的音乐响起!!但但~~~~~~~~~~~~~~~~~~~~
这是“两只老虎”的音乐,不是“小毛驴”~~~什么,改动没有进去?
检查代码,没问题啊
难道没有烧录成功?
严格一点的步骤:
1, 编译的时候选择rebuild all的选项,避免文件依赖方面的错误
2,烧录的时候,先擦除,证实没法启动,然后再重新烧录
3,重新烧录检查文件生产的时间戳,确认是刚编译产生的hex文件
就这样,折腾下去,发现还是不对,真是见鬼啊!看来是代码中还有别的可能
于是回过头来仔细看看mian.c
果然发现,在switch语句里的case2下面,第一个万能版被注释掉了, double_tigers这个变量就是在里面被调用的
再往下看,第二办是舒适版,这个没有被注释掉,都是case这个状态下执行的内容
果然是在这里,细看舒适版完全摈弃了数组,直接是hardcoding旋律了。
这里把舒适版注释掉,把万能版打开
注意以上 for循环里,原先是根据“两只老虎”来hardcoding数组长度的,这里我改成根据计算长度来限定循环次数,这样可以随便改旋律了。这要求数组必须被初始化。
这样重新编译,下载,终于变成“小毛驴”的歌曲了
如原文注释,万能版不能很好的控制节拍;如果需要很好的控制节拍,需要像舒适版那样的每个音符去控制delay。这是不够完善地方;但此文仅仅是试验,不是为了追求悦耳的音乐,所以练习暂时到此了。
#######################################################################
#我是美丽的分割线#########################################################
#######################################################################
【uFun开发板评测】之四:硬件外设尝试+总结
一直想拿这个板子连接一个外设,去控制外设。可惜这个板子没有网络连接的功能,只能用GPIO去控制了。
看板子上的输出,方便连接的只有CON3, PWMA1/PWMA2
原理图上的连接如下: 它连接到MCU的GPIO B的8和9两个管腿
打算用杜邦线把 PWMA1和GND连出来,接到外部的设备比如一个LED或者电机器件上
CON3的PIN1和PIN3分别是PWMA1信号的GND,下载之后用万用表量,并没有量到信号
怀疑是GPIO初始化的PWM的占空比不对,大概看了一下,按照控制LED的方式把pwm的初始化改了一下,发现貌似有微弱的电压跳动(0.2伏,基本可以忽略)
因为时间的关系,并没有来得及仔细研究GPIO的PWM控制,不知道设置不对还是驱动能力的问题
初始化设置不对: 占空比设置不对, 造成有效的电压太小
驱动能力: 这个一直有问号,一般GPIO是不能直接驱动电机的,得借助三极管放大;原图设计中有滤波器,没有仔细算频率范围;但是从DC的角度,每个GPIO都串了2K的电阻,这样哪怕是3V3打满,驱动电流也很小。
因为今天截止, 所以试验只能暂时到此,后面再找时间来完善输出方面的控制
总的来说,这个小板子麻雀虽小,但五脏俱全,本身带了很多控制的东西。将来的版本能把硬件连接改善一下,并且再加上无线连接就更好了!
感谢主办方给与参与的机会!希望将来的活动越来越多!生意兴隆!