收藏官网首页
查看: 5395|回复: 0

[经验分享] 基于hal库实现Gokit3 4LED点灯项目

106

主题

107

帖子

7264

积分

论坛元老

Rank: 8Rank: 8

积分
7264
跳转到指定楼层
楼主
 楼主| 发表于 2023-7-24 18:20:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
    点灯是大部分单片机学习时完成的第一个功能,机智云gokit3的大部分外设虽然都在拓展板上,但是在st底板上还是留下了4个LED供我们测试使用。
机智云平台生成的代码是可以通过cubemx配置的,cubemx则包含了hal库,那么用hal进行开发最适合不过了。假如这是第一次上手单片机,那么还是建议先通过寄存器进行测试,或者基于标准库开发。
那么这次我们就使用这4个LED,来模拟一个4灯环境的智能设备。
首先我们要在机智云上创建一个智能设备,就以吸顶灯为例,创建一个自定义的吸顶灯项目。
接下来就是创建我们的数据点,创建4个可写的布尔值,用于控制4个led灯
再到模组信息页面,选择乐鑫模组,Gokit由乐鑫的esp模组负责wifi通讯。
接下来,点击控制页面,再点击配网引导。为了更方便用户使用,建议启用airlink方式连接设备,并把首选方式更改为airlink,通过长按可进行拖拽排序,把airlink拖动到第一位并选中即可。
点击保存,然后,我们创建一个移动应用,用于控制我们的设备
可以选择关联或不关联现有应用,看个人选择,关联现有应用就不用再注册账号,上一个应用的账号也可以在这个应用登录使用。
下一步就是关联我们上一步创建的智能设备,点击页面的关联,把刚才创建的智能设备关联上。
关联完成后,即可构建我们的应用,使用自动生成的签名生成debug包
现在我们就可以来配置编写我们的代码了。
在产品开发的 mcu开发里,选择STM32f103c8x 填入我们的product secret生成mcu代码包。
等待生成完成后即可下载代码包。
机智云已经帮我们定义好了数据点,剩下的管脚配置和具体的外设驱动还需要我们自己来完成。首先第一步是完成管脚的配置,这里我们使用cubemx来方便开发,打开云平台代码里的STM32F103C8x.ioc
假设cubemx版本不同则会弹出警告,这里我们选择migrate 迁移到新版本
在配置管脚前,先看一下led灯具体连接到哪个io口,gokit2gokit3几乎无区别,因此可以看gokit2 st底板的电路图
从图中可知,我们要配置的io是PB1 11 1415,点击cubemx软件内芯片上的管脚,把上述几个管脚配置成output
接下来,给管脚定义一个别名,点击软件上方的point->Pin/Signals options
为管脚起个别名,方便管理
这里我以LED 1 2 3 4为例,输入后点击apply使其生效
接下来点击右上方generate code生成代码 完成之后点击close关闭cubemx,使用keil打开项目
有没有发现一些异常,cubemx重新生成后我们之前的部分路径丢失了,但是问题不大,重新添加回来即可
右键项目STM32F103c8x 在弹出的选项中选择add group 像下图那样添加三个组,与文件名一致
再分别向三个组添加文件夹里的.c文件
添加完成后如图所示
此时完成文件的添加,但是我们还没有包含我们的文件路径,此时进行编译会报错。
点击keil的魔术棒,选择c/c++ 单击include paths右边的三个点,添加我们的文件路径
如图所示,添加代码包里的Hal Gizwits Utils三个文件夹

完成文件路径的添加后,返回target,勾选microlib,不勾选这个生成的文件烧录会导致stm启动异常,microlib是针对arm嵌入式高度优化的库,缩减了部分代码,并且默认把printf定向到串口方便调试。
接下来我们就要实现我们的灯的功能代码了。
在gizwits_product.c里面已经为我们定义好了基本的条件语句,只要完成io管脚的驱动即可。
按下列代码,完成编写我们四个led事件的驱动 注意包含头文件main.h,具体代码是如何实现可以参考hal开发手册。
具体的代码
  1. if(0x01 == currentDataPoint.valueLED_OnOff_1)
  2.             {
  3.             //user handle
  4.                                                         HAL_GPIO_WritePin(GPIOB,LED1_Pin,GPIO_PIN_SET);
  5.             }
  6.             else
  7.             {
  8.             //user handle
  9.                                                         HAL_GPIO_WritePin(GPIOB,LED1_Pin,GPIO_PIN_RESET);
  10.             }
  11. if(0x01 == currentDataPoint.valueLED_OnOff_2)
  12.             {
  13.             //user handle
  14.                                                         HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_PIN_SET);
  15.             }
  16.             else
  17.             {
  18.             //user handle
  19.                                                         HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_PIN_RESET);
  20.             }
  21. if(0x01 == currentDataPoint.valueLED_OnOff_3)
  22.             {
  23.             //user handle
  24.                                                         HAL_GPIO_WritePin(GPIOB,LED3_Pin,GPIO_PIN_SET);
  25.             }
  26.             else
  27.             {
  28.             //user handle
  29.                                                         HAL_GPIO_WritePin(GPIOB,LED3_Pin,GPIO_PIN_RESET);
  30.             }
  31. if(0x01 == currentDataPoint.valueLED_OnOff_4)
  32.             {
  33.             //user handle
  34.                                                         HAL_GPIO_WritePin(GPIOB,LED4_Pin,GPIO_PIN_SET);
  35.             }
  36.             else
  37.             {
  38.             //user handle
  39.                                                         HAL_GPIO_WritePin(GPIOB,LED4_Pin,GPIO_PIN_RESET);
  40.             }
复制代码
至此,暂时完成了网络点灯的代码,要是想让按键点灯,需要在userhandle里写数据点的上报以及完成按键实现,这里就只是简单测试led就不写了。
接下来生成烧录文件,打开STM32CubeProgrammer烧录到gokit里,由于我们并未编写rgb的驱动,所以按键长按还无法显示到rgb灯上
但是我们可以使用串口调试连接stm的串口,长按key2进入airlink配对模式,看到串口输出信息
最后是实现效果,配对完成后,在APP里点亮第一个第三个灯,可以看到开发板上对应的灯亮起。
开发板图



微信截图_20230722221847.png (176.44 KB, 下载次数: 65)

微信截图_20230722221847.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表