很高兴能够申请到富芮坤物联网开发板。富芮坤开发的FR8016H是符合BLE5.0标准的SOC芯片,内置16位audio codec,内置PMU,在蓝牙协议范围内提供了强大的连接特性。FR8016HA封装为QFN 32,长宽高为4x4x0.75mm,引脚间距为0.4mm pitch,l内含512KB flash, 15 GPIOs, UART, IIC, SPI, PWM, ADC, I2S,LDO, Li-Charger, Audio CODEC好多组件。拿到开发板发现很精致、漂亮,特别是有一块小小的彩屏。忍不住要通上电看一下板载例程的运行效果。上电开机画面如下,显示富芮坤公司的LOGO,画面细腻,很好看。
于是犯了一些经验主义的错误,也没仔细看开发板的说明书和大侠们的评测文章,拼命试三个按钮看能出什么画面和信息。结果发现只有RST键是能起作用的,画面一直就是这副单调的富芮坤LOGO,难道我收到的开发板有问题,没仔细想,失望地冷落了它一段时间。后来关注开发评测里大侠们发的一些评测开箱之类的文章才知道,按键没反应是有原因的,因为K1、K2并没有和主芯片连接,而是要通过跳线帽自行连接才能让按键发生作用。
跳线帽这个东西太小,平常也不太用到,记得以前曾买过一小包,翻箱倒柜居然没找出来翻出了这条连接USB串口模块用的杜邦线,终于把K1、K2和PC5、PC6连接起来,SCL、SDA和PC8、PC7连接了起来,再按K1就有了反应,切换到SENSOR_DATA模式界面,终于有了传感器的数值显示。第一个skip count应该是计步器之类的数值,一直保持在0,还需探索。下面是温度和湿度数值,在下面CAPB18的气压和温度数值,两个温度值稍有差异,还是比较接近的。
和家用的温湿度计比较一下,温度数值有些偏高,湿度数值则偏低了点。
接下来刷各种例程先熟悉一下开发板的编程方式,下载官方的SDK,在FR801xH-SDK\tools目录下面有串口烧写工具FR8010H_Download_Tool,USB数据线连接并安装CP210x模块驱动,这里就不赘述了,工具非常简单:打开串口——开发板复位——连接——导入DAT文件——写入所有内容。
接下来就是提供可供烧写的bin固件文件,SDK的FR801xH-SDK\examples\dev1.0目录下面有三个示例工程,没有编译,然后安装了MDK5.30,打开例程,就出现了上面一幕:字面的意思是设备未发现。
经验主义错误又犯了,少设备,是不是就少了Cortex-M3这个库文件呢?下载安装库文件后问题依旧,于是查找对应信息,有说是MDK5不兼容MDK4创建的工程,工程扩展名加个x就能解决,有说下载安装一个兼容旧版软件包可以解决,事实证明兼容包安装一下能够解决这个问题。MDK是一架生产软件的大机床,这个机床可以安上各种设备和刀具,了解一下MDK的架构方式还是有一定必要的:核心、编译器、各种器件、软件包,有时候需要进行按需选择组装。
MDK旧版软件包安装程序下载地址为http://www2.keil.com/mdk5/legacy/,英文网站,用一下浏览器的翻译网页功能就容易理解多了,这是一个较大的的文件,在下载过程中还是耗费了不少时间的,作用就是一个打开工程时不会先弹出那个设备找不着的的提示了,而实际上忽略那提示也不要紧,真正产生不能编译生成目标文件的原因其实是工程配置的一个选项问题。
打开工程配置对话框,在C/C++选项卡中部右侧,有个C99 Mode选项打上勾,那么编译时出现上百个Error、不能产生目标文件的现象就完全解决了。好像这个还不是一劳永逸的,下次打开一个新的工程文件还需要来这里再设置一次才行。
编程工具的问题也解决了,接下来就是开始编程调试实践了。先上个图,变了一个新任务,按K1后进入了新任务的显示画面,希望是能够突出显示温度、湿度信息,还未全部完成。下面就任务模式编程的经验主义教训做些记录分析。
从基于函数的编程到基于任务的编程,那就是在工程里面添加任务,然后实现任务切换就好了,想象中是这样。编程练习从修改例程起步,首先将FR801xH-SDK\examples\dev1.0目录下的ble_simple_peripheral例程的工程文件夹整体复制一个副本,作为新工程的母本,可以修改文件夹名为自定义的工程名。打开工程,在ble_simple_peripheral.h中找到如上图定义任务位置添加一个任务Show_Temp
在user_task.c里创建一个任务函数showtemp_task_func,里面简单地设置了屏幕底色为GREEN,也可以设成其它的颜色。其它需要执行的操作可以在这里继续添加。
还是在user_task.c里找到uesr_task_init函数,里面添加提取任务id的语句。这样添加编译是会报错的,原因是showtemp_task_id未定义,在哪定义呢?
当然还是在user_task.c文件的顶部,接着原有的两个任务id变量定义,ok
任务创建好了,还需要去调用切换才能让任务执行起来。调用任务的方式是通过任务id实现的,需要在user_task.h里对showtemp_task_id进行申明。否则根据经验主义会在调用文件里又去重复定义,删了又会显示未定义错误。
用按键来调用任务是怎么实现的呢? 在button.c文件中button_send_event函数里有一个调用任务的语句,注释掉原有的,改成调用showtemp_task_id的句子,新添加任务的调用局实现了。
只显示绿底背景总觉得太单调了点,显示点什么才能突出点个性呢?找一下display下的lcd.c,找到好多个能显示图形、文字的函数,调来用用呗。选了一个画线函数LCD_DrawLine(x1,y1,x2,y2,colour);很简单,从(x1,y1)到(x2,y2)画一条线,颜色为colour,如上图所示,在user_task.c里的任务函数showtemp_task_func中加上三个画线函数语句,绿底背景上的彩线就显示出来了。按这个经验来的话,温湿度数值的显示也就是调用几个函数的事,这么就又进入经验主义的误区了。为什么?调用函数显示的内容是静态不变的,温湿度值需要实时更新。在这里是不能直接调用函数显示实时数据,这就要找一个不断刷新循环的位置来显示不断变化的温湿度数值。
这个实时显示动态数值的地方在哪里呢?这个要用上前面定义的一个任务模式App_Mode = Show_Temp,经过搜索找到这个用到App_Mode参数的位置在ble_simple_peripheral.c的timer_refresh_fun函数里面。timer_refresh_fun是一个由定时器驱动会被循环调用的函数,在这里加入的语句会定时被重复执行,显示实时刷新的数值就没问题了。App_Mode参数的作用就是要实现因“应用模式”施“显示内容”,switch……case……当App_Mode = Show_Temp时,调用读取温湿度和显示函数,如上图所示,if结构考虑到读取失败的意外情况。
经过这一番的探索,不断克服经验主义的误导,终于基本搞清了FR8016H开发板的硬件结构和任务模式编程的基本结构,希望这些写真能帮助到一些初次接触开发板的人。当然,显示温湿度数值只是一个初初的入门,蓝牙、WiFi把传感器收集到PC端才是FR8016H芯片强项所在,在这个入门的基础上要继续去探索更深入的秘密。感谢富芮坤官方和面包板论坛,有了开发板能学到不少,支持国产芯片继续做大。
文章评论(0条评论)
登录后参与讨论