- 2024-05-16
-
回复了主题帖:
【2023 DigiKey大赛参与奖】M5STACK CORES3 ESP32S3 IOT DEVEL 开箱
秦天qintian0303 发表于 2024-5-16 09:31
这个小主机不错,有的人参赛使用的还想也是这个
比较完整的小制作基础硬件,拿到手还是非常喜欢的
-
发表了主题帖:
【2023 DigiKey大赛参与奖】M5STACK CORES3 ESP32S3 IOT DEVEL 开箱
本帖最后由 Tristan_C 于 2024-5-17 08:41 编辑
很荣幸能获得这次参与活动的机会。收到获奖信息之后立即搜索自己想要的板子,当想来想去还是没想好,最终看到了M5Stack,作为DIY类,并且基本属于乐鑫官方的硬件,于是自己也下了些本,下单这个硬件,虽然小贵。
官方对这个硬件的描述如下:
CoreS3是M5Stack开发套件系列的第三代主机,其核心主控采用ESP32-S3方案,双核Xtensa LX7处理器,主频240MHz,自带WiFi功能,板载16MFLASH和8M-PSRAM;可通过TYPE-C接口下载程序,支持OTG和CDC功能,方便外接usb设备和烧录固件;正面搭载一块2.0寸电容触摸IPS屏,面板采用高强度玻璃材质;屏幕下方内置一个30万像素的摄像头GC0308,附带接近传感器LTR-553ALS-WA;电源部分采用AXP2101电源管理芯片及4路电源流向控制回路,整体采用低功耗设计;板载六轴姿态传感器BMI270和磁力计BMM150;板载TF-card(microSD)卡槽;板载BM8563 RTC芯片,提供精确计时及休眠-定时唤醒功能;声音输出方面采用高保真16bits-I2S功放芯片AW88298,机身内置1w扬声器;声音输入方面采用ES7210音频解码芯片+双麦克风输入;在机身侧边配有独立电源按键与重启(RST)按键,自建延时电路,长按复位键便可进入程序下载模式。CoreS3套装默认附带DinBase底座,方便实现Din导轨、挂墙以及螺丝固定;可外部DC 12V(支持9~24V)或者内部500mAh锂电池供电;DinBase预留多处proto的位置,方便用户DIY。本成品适用于物联网开发、各种DIY项目开发、智能家居控制系统和工业自动化控制系统等场景。
下单时,恰逢五一放大假,直到5月8日digikey才开始处理我的订单,终于再5月15号等来了包裹。
大大的包装和填充材料很有安全感,因为里面的硬件很小,哈哈
产品包装很有电子产品的feel了
抽拉式
这就是主角了
开机
进入系统后有多个demo应用
如wifi扫描
电源
整个硬件做工还是非常在线的,包括外壳,以及安装方式,甚至还附带了一个拆装扳手
整个硬件的接口及配置如下
官方的资料也非常丰富,待后续细细研究
https://docs.m5stack.com/zh_CN/core/CoreS3
- 2024-04-11
-
加入了学习《泰克MSO6B探索营》,观看 如何完成AI芯片电源噪声测试
- 2024-02-04
-
回复了主题帖:
【得捷电子Follow me第4期】终极任务2:SD 卡搭建 FTP 服务器
学习学习
- 2024-02-01
-
回复了主题帖:
【得捷电子Follow me第4期】入门任务
向大腿学习
-
发表了主题帖:
【CY8CPROTO-063-BLE】6.PSoC的RFID读卡体验
PSoC的RFID读卡体验
RFID现在生产生活中已经非常常见,一个用非常广。手上也有一片RDIF的板子,是基于复旦微的FM17580芯片,这次就利用PSoC来驱动,进行RFID的基础应用功能:读卡
首先看一下FM17580芯片,EM17580 是一款高度集成的工作在 13.56MHz下的非接触通讯芯片,支持以下2种不同的工作模式:
支持符合 ISO/IEC 14443 TypeA 协议的读写器模式
支持符合 ISO/EC 14443 TypeB 协议的读写器模式
同时提供了低功耗的快速发场功能,方便电池供电、需要低功耗工作、并且需要实时处理任意时刻会进入射频场的外部卡片的读写器设备。
FM17580 具有低电压、低功耗、驱动能力强、多接口支持、多协议支持等特点。适用于低功耗、低电压、低成本要求的非接触读写器应用。
把本次利用PSoC也就是来实现RFID的基础应用功能:读卡,读取Type-A卡片的UID
FM17580的封装图下
实物图如下
其跟MCU之间使用SPI通信,IRQ引脚可输出IRQ中断信息,但也可使用查询功能,就可以不用该引脚了,本次就使用查询方式。
芯片RF部分是需要使用5V电源供电的,因此跟之前的WB2812B一样,使用开发板上的5V的电源插针引脚。
下面开始开发设计,首先打开下面的SPI主机例程DEMO
新建并根据前面的经验,更改芯片等配置,具体可参考前面的测评文章,本次就不再赘述这个过程了。
SPI硬件引脚使用工程默认配置即可。而为了配合FM17580的时序操作,这里的CS引脚可以改成软件控制。
增加一个FM17580的复位控制引脚
根据原理图,添加一下串口,主要用于打印调试和运行信息
增加两颗LED用于指示
工程转杯就完毕了,然后先增加FM175xx的驱动代码文件以及头文件路径。
为了打印一些状态和调试信息前面增加了一个串口,为了支持printf打印,需要增加如下的打印支持代码,也就是printf重定向。
接下来就先看一下主函数的设计,首先当然就是初始化初始化了串口打印,初始化了FM175xx的驱动,并读取Version寄存器,以判断是否是FM175xx芯片。因为手上又A1和A2两个版本芯片,因此两者做了兼容。
然后初始化成功之后,就每1秒扫描一次卡片。
然后再看下FM175xx的针对性初始化,首先就是SPI接口了
然后是字节和数据缓存的发送
然后是接收和收发的处理。
最需要注意的是下面这个read fifo的函数
需要严格按照手册上的读fifo时序,特别是第二个字节开始的MOSI需要输出address,这样才能正确读出FIFO中的每个字节,否则可能只能读出一个字节。
其它就是根据手册的寄存器,以及Type-A卡片的常规操作进行设计了。在如下的几个过程中,操作成功之后就可以获得uid卡号了
如下就是Type-A卡片的操作,当读到卡片,则通过串口打印卡片的ID等信息,并且LED亮起。当卡片移开,则打印卡片离开提示并熄灭LED灯。
编译下载运行
就可以在串口PC软件中看到运行过程了,如下。
使用逻辑分析仪,还能分析到SPI接口上的具体交互信息
比如读取芯片Version寄存器
而读卡号就在这个地方了
最后再来个整体照
实验还是非常成功的,也体验到了PSoC的强大,特别是PSoC Creator的便利性。测试仅做了卡片ID的读取,基于此还可以做很多应用,入门禁,考勤,安检,消费等等
- 2024-01-11
-
回复了主题帖:
【入围名单】: 安信可BW16-Kit
个人信息无误,确认可以完成评测计划
-
回复了主题帖:
【CY8CPROTO-063-BLE】5.用SPI和DMA驱动WS2812B炫彩LED
秦天qintian0303 发表于 2024-1-11 11:13
SPI驱动WS2812B的时序怎么计算啊?
咦,我这帖子图片咋都没了……
-
回复了主题帖:
【CY8CPROTO-063-BLE】5.用SPI和DMA驱动WS2812B炫彩LED
根据手册上的时序图,1和0的占空比,然后spi一个字节中,1的位数不同来实现具体的ws2812b的占空比
- 2024-01-10
-
发表了主题帖:
【CY8CPROTO-063-BLE】5.用SPI和DMA驱动WS2812B炫彩LED
本帖最后由 Tristan_C 于 2024-1-11 13:45 编辑
用SPI和DMA驱动WS2812B炫彩LED
在开始进行SPI驱动WS2812B设计之前,先了解一下WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅受限信号传输速度要求。这个灯现在应用非常广泛,其尺寸如下和引脚。
芯片的供电电压还是有一些要求的,最低要3.7V,为了能更好地驱动它,还得需要用板子上的5V电源。
而数据通信则用3.3V的电平,根据其电器参数表的描述,3.3V的高电平也足够其识别了。
电路设计上,只需要按照如下的串联即可
WS2812B的数据传输采用单线方式,如下为其数据传输时间、时序波形和数据传输方法,可以看到,其数据1和0,分别采用不同的高电平时间来决定。根据时间值,可以估算,数据1和0的总时间可以相同,而高电平时间分别为总时间的2/3和1/3即可,总时间可以设定为1.25uS,相当于是一个约800KHz的方波,只是占空比分别是2/3和1/3来分别待变1和0。但我们采用的是SPI的方式驱动,该方式驱动需要控制每个字节的8位中连续置1的位的个数来实现占空比的调节,根据下面的时间,可以分别采用5bit位和2bie位来表示数值1和数值0,也就是5/8和2/8,相当于781nS和313nS,正好能符合时序所要求的T1H和T0H的时间。
在数据传输的方法中,前面已经提到,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。也就是每个灯,只保留自己收到的第一个24bit数据,剩下的都传给下一个灯。
同时,在传输完一次所有数据之后,需要产生一个RESET信号,该信号时间大于280uS,设计中采用320uS,以满足改时序。
数据在发送时,按照下面的顺序传输,即高位线发送,GRB的顺序发送.
基于上面的内容,可以将WS2812B的电源接到如下J6排针上的的P5LP_VDD引脚进行供电,该引脚为5V电压,从USB接口而来,正好符合要求。
而根据芯片引脚的功能复用定义,可以选择P10.0和P10.1作为MISO和MISO
而选择P10.2作为SCLK引脚
当然,本设计实际只需要MOSI也就够了。
控制只需要接5V的电源以及SPI主机的MOSI引脚。5V就接到板子上的5V电源引脚即可。
打开PSoC Creator,通过芯片系列并使用SPI过滤搜多,发现还是有比较多的demo code的,这里就选择DMA+SPI MAter这个例程。
打开之后更新芯片型号到对应开发板的型号。
研究发现这是一个一颗芯片自发自收的例子。其主要功能就是Master发送命令给Slave,然后控制Slave上的LED灯亮不同的颜色。
甚至自发自收还是在一颗芯片的两个内核上,其中M0内核作为了SPI Slave设备,而M4内核则作为Master设备,说实话,非常妙啊。
但实际上为了驱动灯,只需要作为Master的SPI即可,因此需要将工程适当改造一番。
首先就是去掉Slave
留下Master即可
这时候确认Master的SPI各引脚已经选择正确的引脚了
双击mSPI进行编辑配置
其中最终的的一项就是配置时钟为6.4MHz,保存
SPI Master改成只需要发送
去掉M0的SPI Slave的大部分代码,留下如下main函数即可
接下来根据WS2812B灯带进行设计,首先灯带包含了16颗灯。
因此根据前文介绍的SPI驱动灯带的方法,先定义相关的宏定义和变量,定义包括了灯珠的个数,每颗灯珠的颜色字节数,需要SPI产生生一个颜色的字节数,数据之后更新颜色所需RESET信号的时长以及等效的SPI字节数,WS2812B的三个数据结构体,以及16颗灯珠的数据缓存等,其中数据1使用0x1F,也就是5/8的占空比,数据0使用0x03,也就是2/8的占空比。
实现数据填充函数,实际上就是将颜色转换为SPI每个字节的数据,而最后一个字节则填了0xFF,主要是为了让芯片的MOSI组后输出闭关保持高电平
在主函数中,除了初始化系统及spi接口之外,在主循环中每2秒更新一下16颗灯珠的显示颜色。
SPI接口初始化操作如下,配置使用DMA方式
而下面重点则需要看一下DMA,这颗芯片的DMA非常强大,使用Descriptors进行配置,可以有多个Descriptors,每个最大传输65536个字节。可以实现X和Y的2D的数据传输,入下图。且触发非常灵活,数据量可以极大。
本次使用DMA进行SPI驱动16颗WS2812B,根据前面定义的ws2812b_bit_buffer这个变量数组,需要传输624个数据,因此设计称了10个Descriptors
其中前9个Descripto中每个传输64字节,数据传输单元为Byte,位宽为Byte到Word,源地址需要自增1
第10个则传输624-64*9=48个字节。
每个Descriptor首位相连,且前要给完成之后触发下一个,最终在整个descriptor chain完成之后触发完成中断。
在DMA初始化时,需要手动初始化Descriptor
并指定每个Descriptor的便宜地址
发送函数调用ConfigureTxDma完成上述DMA的配置,并使能DMA通道。且使用变量masterTranStatus进行状态判断
当SPI传输完成时,在中断中清除上述状态
编译下载运行
用逻辑分析仪,可以看到SPI数据输出之后,对应到WS2812B的DI引脚上的频率,约800K,以及数据1和0的占空比情况
在等待上就可以实现每2秒在绿色、红色和蓝色之间切换颜色了。
总结:相对来说,DMA确实非常强大,初次使用,可能感觉还很麻烦,后来发现确实不错,很赞很香。WS2812B也非常好玩,后续还可以调试一些呼吸灯等效果。
-
发表了主题帖:
【CY8CPROTO-063-BLE】4.一些GPIO操作
本帖最后由 Tristan_C 于 2024-1-10 19:55 编辑
一些GPIO操作
通过前面几个体验,已经感受到Infinenon的这个开发环境确实比较强大,开发起来很方便顺手,这次就来体验一下GPIO的一些开发,由简单的先开始。
首先打开PSoC Creator之后,选择打开一个例程,搜索PSoC 63芯片,并通过GPIO过滤。点击打开第二个,GPIO_Pins这个demo code
创建后整体框架如下
其中原理图部分的细节如下图所示,其中代码:
创建了一个按钮接到P0_4,从图中看,外部没有上下拉电阻,应该是需要内部下拉,高电平为按下状态。
创建了两个LED,分别接到P0_3和P11_1,各接了一个10K的电阻,高电平点亮。
创建了一个全局信号,用于Port0的中断,看起来就是给按钮这个IO使用了,也就是说按钮使用了 中断方式了。
而在这里同样还是给工程重新选择一下所使用的芯片型号也就是如下选中的BLE模块
再回过去看工程和代码
首先看下M0和M4内核各自的代码
其中M0的代码可以看出来,其并灭有执行应用相关的内容。
而应用部分的代码则均在M4核上面执行了
再细看代码,按钮引脚主要使用了中断方式设计
并在main函数中根据中断状态延时取反LED的IO口状态从而控制蓝色LED的亮灭
而红色LED则是在上电初始化的时候根据按钮状态直接保持亮或者灭的状态了
尝试编译会出现比较多的错误提示,都是IO口问题,这时候就需要回到硬件的对应关系上了
根据如下开发板实际的硬件原理图中,两颗LED和按钮的设计
重新对GPIO进行分配
改为
而按钮格局实际图纸,将上上升沿改成下降沿,并去掉内部上下拉电阻,使用外部上拉。
编译下载到芯片。
然后用收按按钮可以控制LED的亮起
实际上从这里也看得出来,这颗芯片平台还是非常灵活和开放的,两个内核基本完全开放给用户使用,包括BLE协议栈,运行在哪个内核也交由了用户选择,开放程度还是相当有诚意了。
-
发表了主题帖:
【CY8CPROTO-063-BLE】3.搭建开发环境(详细)
搭建开发环境(详细)
好话先说吧:他们家这个PSoC Creator开发起BLE来说,确实真香。
开发板使用的是PSoC的MCU,开发工具也就是PSoC Creator这个官方IDE。PSoC Creator是一个集成设计环境(IDE),可实现PSoC和FM0+系统的并发硬件和固件编辑、编译和调试。当然,理论上也能支持gcc等开发工具,但官方做的ide自有官方ide的一些特性和有点,因此测评也用官方的这个ide了。本次体验文档整理还算比较详细。
可以到如下官网链接下载:
https://www.infineon.com/cms/en/design-support/tools/sdk/psoc-software/psoc-creator/
然后进行安装
安装过程比价常规
期间可能会要求安装MVC++的环境,按照提示操作安装即可。
安装完成打开IDE
在界面中,点击“Fimd Code Example”
或者在file菜单栏下也可以找到“Code Exmple”按钮
可以看到例程相当丰富,可以基于芯片平台选择例程,比如PSoC BLE、PSoC 61等
也可以基于模块选择例程,比如ADC、BLE、GPIO等
这里就选择一个之前做过初体验的BLE例程“BLE Find ME”防丢器例程创建工程
单击加载之后右侧是其简介
点击右下角的“Create Project”准备创建工程
器件可能如果有如下提示,则为例程还为下载到本地,点击左侧的圆球按钮即可下下
下载中
再次点击右下角的“Create Project”准备创建工程,由于只给予PSoc Creator开发,因此就不用创建其它工具的工程,均选择Disable即可。
创建成功
可以看到界面非常友好,其中左侧为资源窗,包含了设计原理图、芯片外设资源、两个内核各自的代码,以及例程的说明文档
中间则为原理图,这个开发模块还是非常先进的,将所有的设计模块化和图形化,让开发更加简单并侧重于应用的开发。
右键其中的某一个模块还能打开各自的一些操作,入下面的BLE模块可以打开对应的说明书
点击之后直接打开文档
右侧是组件目录列表
下方则为所有输出信息
在开始编译代码之前,还需要更改一下芯片型号,打开如下Project菜单下的Device Delector
可以看到工程默认选择的是如下的芯片型号
需要手动重新选择开发板对应的如下型号。
然后就可以点击左上角这个按钮可以开始代码的编译
这时提示了如下错误,也就是PDL的路径错误,其实为空。这时候需要手动选择一下PDL所在的路径了(在指定路径之前需要确认实际路径所在)。
打开Tools下的Options配置
在如下的PDL v3配置项中,选择PDL所在路径
比如如下
也就是如下的PDL安装路径
然后点击编译按钮再次启动编译
这次可以继续进行,并成功通过编译。
点击下载按钮
或者在Debug菜单下点击“Select target and program...”按钮
再选择指定的目标内核,CM0P或者CM4内核,先择其中一个先开始
点击OK进行下载,下载过程中仿真编程器的KitProg2上的LED开始快速闪烁,并在左下角显示当前下载的程序进度
下载完成之后选择另一个内核,同样操作过程,最后两个内核都下载完成。
这时发现烧写完成之后板子没用任何反应,LED也没了之前初体验BLE时的闪烁,按下复位键,发现还是没有反应,LED也不闪烁,感觉哪里有问题……
这时候想到了,前面改了芯片型号,可能硬件也有所需要改动,因为开发板的设计可能有所不同。因此点开左侧的cydwr文件,就可以看到如下的芯片封装以及右侧的引脚分配等细节了。
可以看到右侧的按钮和LED的配置,其中BLE分别为Advertising为P5[0],Disconnect_LED为P5[1],而Alert为P0[5],按钮则为P0[4]
再回头结合开发板原理图,LED只有如下两个,分别接到了P7_1和P6_3
按钮则是接到了P0_4上了
因此需要将LED引脚做些调整,如下,其中Disconnect_LED就没有引脚,就随便指定一个接口,这里就不用改动了。
编译并重新烧写
这时,LED终于闪烁起来了。
接下来就可以跟前面的《【CY8CPROTO-063-BLE】2.BLE初体验》文中一样体验该程序了,也就是Find Me的功能
接下来再体验一把自己该一下代码,更方便的方式就是改一下BLE设备的名称了。双击一下如下原理图中的BLE模块。
选择GAP Settings选项卡,可以看到设备名称Device name为Find Me Target
这里就将其改为Hello Infineon
OK保存配置,编译下载运行
这时就可以在App端扫描发现LBE蓝牙名称为Hello Infinenon的设备了。
至此,开发环境搭建算是没问题,可以进行后续开发了。
- 2024-01-05
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】基于STM32H7B3和LVGL的在线天气时钟站设计
sipower 发表于 2024-1-5 11:43
很详细,很厉害
水平有限,见笑啦
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】基于STM32H7B3和LVGL的在线天气时钟站设计
Jacktang 发表于 2024-1-5 07:32
4.3英寸,480x272像素TFT彩色LCD模块这个很可以
是啊,硬件性能和资源非常棒的,只是我的水平有限,还没将其真正全面发挥起来
- 2024-01-03
-
发表了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】基于STM32H7B3和LVGL的在线天气时钟站设计
本帖最后由 Tristan_C 于 2024-1-3 23:55 编辑
基于STM32H7B3和LVGL的在线天气时钟站设计
一、作品简介
本次参与DigiKey创意大赛的是基于STM32H7B3和LVGL的在线天气时钟站设计,使用的是ST的STM32H7B3I-DK开发板,本身基于性能强劲的STM32H7主芯片设计,除了其强大的处理内核性能外,还利用了其丰富高性能的外设资源,进行外围模块的驱动,如LCD、WiFi模块灯,其中通过WiFi进行网络链接,可以在线获取本地天气信息,如气温温度,湿度气压等,还可以通过NTP服务器,联网在线获取当前本地时间,并更新设备的本地时钟,另外,因为有LCD,因此结合STM32H7的高性能,可以利用LVGL的开源GUI库来进行用户界面的开发,从而将当前天气和时钟的信息展示在其上面。实现丰富的界面交互。
二、作品照片
作品界面使用LVGL官方的ui设计软件SquareLine Studio进行了设计,主要涉及了当前天气信息的显示,当前时间的走时显示,以及设计了两个按钮,分别继续手动时间同步和天气数据获取。另外,也将存储资源使用率以及lvgl的帧率进行了显示。
三、系统框图
系统主要的框图如下,其中STM32H7B3I作为系统的主控MCU,通过SPI等接口与WiFi模块进行通信控制,实现时间和天气服务器的数据交互拉取。通过硬件的LCD接口控制LCD的显示输出,再通过UART将一些信息进行打印。
四、硬件设计实现说明
4.1 主芯片
主芯片STM32H7B3LIH6QU基于ARM®架构的微控制器,提供2M字节的FLASH存储器和1.4MB RAM,BGA225封装,性能非常强悍,STM32H7B3xI工作频率高达280 MHz。Cortex®-M7核心具有浮点单元(FPU),支持Arm®双精度(IEEE 754兼容)和单精度数据处理指令和数据类型。STM32H7B3xI支持完整的DSP指令和内存保护单元(MPU),以提高应用的安全性。
STM32H7B3xI器件采用广泛的增强型I/ o和外设,连接到四个APB总线,三个AHB总线,32位多AHB总线矩阵和支持内部和外部存储器访问的多层AXI互连。
所有器件都提供两个adc、两个DAC(一个双DAC和一个单DAC)、两个超低功耗比较器、一个低功耗RTC、12个通用16位定时器、两个用于电机控制的PWM定时器、三个低功耗定时器、一个真随机数生成器(RNG)、一个加密加速单元和一个HASH处理器。该器件支持用于外部sigma δ调制器(DFSDM)的9个数字滤波器。它们还具有标准和高级通信接口。
芯片的主要框图如下,丰富的外设特别是还具备LCD等驱动接口,非常方便进行人机ui交互开发。
4.2电源部分
电源部分主要设计系统供电的来源,主要有ST-LINK,USB等,主要电源转换为3.3V
最重要的MCU部分电源,其中还包括了LDO方式和SMPS方式的选择。
4.3 WiFi & BLE模块
开发板本身板载的是一片ISM43340_M4G_L44模块,这是一颗Cypress的CYW43340芯片的2.4 & 5 GHz双频Wi-Fi 802.11 a/b/g/n, Bluetooth Low Energy (BLE) 和 Bluetooth 4.0的模块,内部还使用了一颗ST的STM32F405 作为主控芯片,采用SPI或者UART接口,本处就使用SPI接口使用。通过该模块可以连接WiFi AP热点,进行互联网访问以及数据的交互。
原理图的设计如下,将UART和I2C也接到了MCU,但实际主要使用了SPI进行通信。
4.3 LCD模块
开发板提供了一块4.3英寸(480x272像素)TFT彩色LCD模块,屏包含带RGB接口的电容式触摸功能。足够大的屏幕也能方便做到ui的交互设计
LCD屏的主要设计原理图如下,其中触摸部分为I2C接口。LCD还支持背光调节控制。
4.4 板载LED和UART输出
硬件设计上还使用了板载的LED作为指示,并通过UART进行log输出的部分。其中LED部分电路如下,其经过VCC的上拉电阻,实现低电平点亮的功能。
串口部分则用了USART1作为了串口debug口,引到了ST-Link的虚拟串口上,可以跟PC上位机软件进行通信,那么串口打印自然就可以用这个串口了。
具体使用的引脚如下
五、软件设计实现及源码说明
软件设计主要涉及几个方面,包括搭建、串口打印驱动、WiFi联网、LVGL及界面设计,整体功能实现等。
5.1 环境搭建
ST的环境搭建还算简单,大部分熟悉ST的都比较容易,安装部分不多赘述了,这里主要列举几个常用到的软件
首先是Keil,该IDE软件在使用过程中可以进行代码编辑,编译和在线调试等,需要提前安装如下的STM32H7的芯片支持包
另一个就是ST官方的IDE,也就是STM32Cube IDE了,这个IDE对ST字节芯片的支持非常好,界面也比较新颖,很方便。本次开发主要使用这个。
另外,开发过程中可能还会设计到芯片代码的擦除和烧写等操作,这里还需要一个ST官方的工具,STM32CubeProgrammer,也非常方便使用。
另外还有一个软件就是LVGL的界面ui设计软件SquareLine Studio了,该软件是LVGL官方的工具,基础版本免费,一般也够满足使用需求,如果需要一些高级功能则设计到一些付费部分。
5.2 串口打印
这部分串口主要用于调试的log打印等功能。接下来先添加串口的初始化代码
再添加重映射定义
然后在main函数中添加初始化,并打印一下做个测试
编译下载运行
运行即可看到PC上打印的内容了
另外,如果要支持浮点数的打印,需要在设置中将如下的两个配置选项都勾选上
5.3 WiFi联网
ST官方针对板载使用的这个WiFi模块有一个驱动库的,可以将其进行移植实现硬件的WiFi网络访问功能。
首先是官方开放的一个驱动库,为了使用这个驱动库,需要用到STM32_Network_Library
为了方便起见,直接拷贝外面的Middlewares整个文件夹
再拷贝应用层的es_wifi_conf相关内容。
以及对应的驱动应用文件
然后注意增加头文件和源代码路径
添加完毕之后,整体的代码框架如图
先做一次编译,无错误提示
增加一些头文件以
变量和函数声明
以及始化函数等
开始编译,可能会出现各种头文件包含的错误,这时需要一定的耐心,通过将头文件所在路劲添加到ide中等操作解决错误。
添加初始化函数调用到main函数中。并连接到指定SSID和Password的AP上,连接成功之后,通过串口打印分配到的IP地址。
其中WIFI_Get_Access_Points和WIFI_Connect函数的实现代码如下。
此时编译下载运行,可以看到成功连接AP路由器,并获得了IP地址为192.168.155.2
然后就可以再尝试做一些网络操作,比如同步一下时间。
H7B3I的DEMO中有举了一个从worldtimeapi.org获取时间的例子,这里我也参考从这里去一下时间数据。
在main函数中调用,该获取时间函数,并在成功之后打印获取到的json格式时间。
可以看到联网成功,并成功获取时间。但时间实际上还有一个时区问题,这里先不做时区处理,只验证网络这块,具体待后续再进行。
接下来还可以再做一个天气信息获取。
当前天气可以用http的get方式从api.openweathermap.org获取,获取时,需要指定APPID,城市,单位等信息。其具体实现操作如下。
然后同样可以在main函数的获取时间操作成功之后,获取一下杭州的天气信息
运行成功之后串口打印如下
5.4 LVGL移植和界面设计
因为使用的开发板是STM32H7B3的主控,并配备了一块4.3寸,480*272分辨率的LCD屏幕,加上项目是要进行天气时钟站的开发,因此UI界面的开发便逃不开了。虽然自己也没什么界面美工细胞,做不来很漂亮的界面,但这次就先把界面的基本功能先打好基础。因为也是第一次用,因此也比较期待能成功。
H7B3是一颗非常强劲的主控,其存储和外设资源及其适合及逆行图形开发,连LVGL官方的DEMO也已经先对这块板子做了支持。也就是下图的所谓官方认证开发板。
因此,先将LVGL官方的代码拉下来
https://github.com/lvgl/lv_port_stm32h7b3i_disco
可以看到这个其实是一个完整的功能,包含了STM32H7芯片的底层驱动,以及lvgl相关的全部代码。
工程是使用ST官方的IDE工具CubeIDE进行开发的,因此需要事先安装该软件。在从github下载下来之后,就将其导入CubeIDE中。
要注意此处最好选择拷贝一份代码到workspace中,以便备份原始代码。
导入成功之后可看到如下代码结构。
编译如下
还能看到具体的代码的资源使用信息
如果是手动下载代码包的方式,仓库的引用lvgl仓库是不会一起下载。
因此该文件夹为空
需要到lvgl的仓库中单独在下载,并解压到上述文件夹中。
点击run按钮
下载过程log如下
正常运行即可看到如下UI示例界面。在界面的左下角可以看到存储资源使用情况,在右下角则可以看到刷新帧率以及CPU使用率情况。
而LVGL的界面设计则可以使用SquareLine Studio进行设计,利用该软件,可以非常方便进行一些设计,采用所见即所得的开发方式,大大减少了敲代码方式开发UI的时间
如下就是开发的主要界面的设计了
5.5整体功能设计
代码的主函数设计如下,主要先进行一些主芯片的初始化,如时钟,引脚外设等,然后进行串口、RTC等使用的外设的初始化配置。然后进行显示ui、网络等配置,并进入主循环,以实现本地时钟的更新显示,以及定期进行网络时间同步和天气信息的拉取。过程中进行串口信息的打印等。
程序整体设计流程图如下
按钮交互功能处理流程如下
其中典型的部分代码如下
更新时钟显示,同时也查询你是否需要时间同步或者更新天气信息。
同步网络时间
获取网络当前天气
查看当前是否需要同步时间或者更新天气。其中时间为1天同步一次,而天气则为1小时获取一次。
更新天气内容显示
时间同步之后,设置RTC时间
六、完成情况
硬件部分主要利用了ST的STM32H7B3I-DK的设计,基于板载的电源管理,LCD、WiFi,UART和LED指示等进行开发。
软件部分则开发了对应的驱动、LCD显示,WiFi联网等,并实现时间的网络获取,以及天气的网络获取,并使用开源的LVGL库以及相应的ui设计工具,通过LCD进行显示,且可以通过LCD的触摸功能,实现ui的交互功能。最终实现效果如下
七、演示视频和代码(链接)
演示视频
演示代码链接:https://download.eeworld.com.cn/detail/Tristan_C/630636
八、项目总结
其实很高兴能参加参与到这次的得捷创意大赛中,从报名参加到中间遇到各种问题,并不断去尝试和解决,也学到了非常多,特别是能从各位一起参与的大佬们身上学到很多平时难易接触到的认知和知识,在交流过程中,不断提升自己。
当然,作品本身功能和成熟度并不是非常完美,也并没有充分发挥出板卡的资源和主控MCU的优秀资源,因此也希望这次的作品并不是一个结束,而是一个好的开端,在今后不断利用这块资源学习和完善自己的知识技能储备,完善作品本身,也将硬件板卡尽到发挥到最大的用处。
项目其它帖子主要有:
https://bbs.eeworld.com.cn/thread-1258226-1-1.html
https://bbs.eeworld.com.cn/thread-1266508-1-1.html
https://bbs.eeworld.com.cn/thread-1266804-1-1.html
九、相关附件
-
上传了资料:
【DigiKey创意大赛2023】基于STM32H7B3和LVGL的在线天气时钟站设计
- 2023-12-26
-
发表了主题帖:
【CY8CPROTO-063-BLE】2.BLE初体验
【CY8CPROTO-063-BLE】2.BLE初体验
英飞凌的这块板子有一个BLE Find Me Profile的BLE DEMO功能例程,且在出厂的时候已经烧写带了该功能的固件,这次就优先来体验一下该固件的功能。
在上次的开箱时,已经使用iOS上的通用BLE调试测试App的LightBlue扫描链接过一次,那时候链接上并写入0x00、0x01和0x02这三个数据则红色LED熄灭,闪烁和常亮,猜测时提示不同程度的警告。这次来深体验一下
根据官方的程序功能说明,Demo程序上电时,初始化BLE,并先开启广播180秒,如果没有被扫描链接,则进入休眠状态,此时可通过按钮唤醒并重新开始180秒的广播。如果被链接上,则处理LBE的数据通信事件,如更新警报等级。如果断开链接,则重新开启广播。整个状态切换图如下
目前测试App CySmart目前不能从应用商店下载到,但发现还有一个app可以下载到,就是下面这个AIROC Bluetooth Connect
安装之后打开自动会开始搜索设备,此时可以扫描到前面这个名称为Find Me Target的设备了
点击链接
可以看到有两个入口,分别时Find Me入口
以及通用的GATT DB入口
点击Find Me入口,可以看到有选择报警等级的按钮
点击Select可以在下方选择报警等级
点击并提示发送成功
可以选择不同等级发送,并看到红色LED根据等级进行提示了。
另一个就是Gatt DB入口
该入口进去后就是GATT的server和characteristic的原始操作了
点击对应的characteristic可以看到数据输入入口
根据前面的实验,再HEX栏填好对应的0x00、0x01和0x02并发送写入就可以看到报警等级的变化,也就是LED闪烁状态的改变了。
总的来讲还是比较的简单的一个demo例程,但五脏俱全,从ble初始化,到广播,链接以及数据写入,都涉及到了。
体验完就待后续搭建开发环境,包括IDE的支持,进行进一步的开发体验了。
-
发表了主题帖:
【CY8CPROTO-063-BLE】1.开箱初见
【CY8CPROTO-063-BLE】1.开箱初见
很高兴能参与这次的开发板评测,被幸运选中。这次使用的是英飞凌的PSoC BLE开发板,这是一块基于PSoC 63 BLE模块 (CYBLE-416045-02)的完整硬件工具的开发板,包括一个LED、一个按钮和若干电流测量跳线。该板采用卡扣外形结构,用户可将KitProg板载编程器和调试器模块与目标板分离开来,以便单独使用。模块保留了PSoC MCU的所有可编程性和灵活性,将可编程且可重新配置的模拟和数字模块与灵活的自动路由以及数字可编程逻辑、高性能模数转换 (ADC)、低功耗比较器、标准通信和定时外设相结合。模块 (CYBLE-416045-02) 提供支持蓝牙5.0的免版税BLE堆栈,并提供36个GPIO接口,采用14mm × 18.5mm × 2.00mm封装,实物还是非常小体积的。
说起来,很早之前也接触过英飞凌的方案,早前属于被收购之前的赛普拉斯Cypress。包括PSoC的方案之前也有所接触,其典型的高性能M4+M0的组合,并且两个内核的分配非常灵活,加上图形化,模块化的开发工具,很方便,给我留下了非常深刻的印象,本次评测的模块也是属于该系列。
拿到之后发现包装非常简介,纸盒包装的里面就是一块评估版和一根数据线。结合纸盒上的宣传图案和简单指引,评估版和线恰到好处嵌入到包装中
拆开之后就是主角,评估版和数据线了。
USB虽然没使用Type-C,而使用了Micro,但使用的座子还是用料很好,且加了一层塑料胶袋保护了一下,使用时将其撕去即可,比较用心。
板子背面
板载资源也非常简洁:主要是主角BLE模块,KitProg板载编程调试器,按键和LED,并将大部分的IO口进行引出,到外接排针上。整个板子细长精炼。
在KitProg部分硬件还有一颗Mode模式切换按钮,可以切换到大容量存储模式,拷贝hex文件到盘中直接烧写代码。
接下先从官网下载主要的资料了
其中开发板的主页链接如下
https://www.infineon.com/cms/en/product/evaluation-boards/cy8cproto-063-ble/
可以下载到板子相关的材料
而模块和芯片的主页为,可以下载到更详细的进一步不资料。
https://www.infineon.com/cms/en/product/wireless-connectivity/airoc-bluetooth-le-bluetooth-multiprotocol/airoc-bluetooth-modules/cyble-416045-02/#!designsupport
https://www.infineon.com/cms/en/product/microcontroller/32-bit-psoc-arm-cortex-microcontroller/psoc-6-32-bit-arm-cortex-m4-mcu/?utm_source=cypress&utm_medium=referral&utm_campaign=202110_globe_en_all_integration-product_families&redirId=VL1864
在主要的资料下载完之后,可以开始先让板子上电跑起来了。可以看到LED在以1Hz的频率周期性闪烁。
如果按下KitProg部分的Mode按钮
还能在电脑的资源管理器中看到新产生一个名称为KitProg2的新盘符
打开该盘,内含一个STATUS.TXT文件
打开就是具体的说明了,大致意思为:Cypress KitProg2 v1.05大容量存储程序。单击模式切换按钮,退出或进入海量存储管理模式。注意:此版本仅支持PSoC 4/6系列。拖放十六进制文件应触发目标设备的编程。如果错误的HEX文件或编程错误,目标设备固件将被擦除。目标设备:未知。状态:准备用HEX文件进行编程。
也就是说,该模式可以直接托进HEX文件进行程序烧写的。还是非常方便的。
再次按下MODE按钮可以切换回初始模式,盘符也会消失。
队医评估版,这时候拿手机上的BLE类App还能扫描到该名称为“Find Me Target”的设备
试着连上,连上之后LED熄灭了。
根据上图中的UUID内容猜测,这应该是一个iBeacon的设备,显示的UUID,A97A8811-E7B6-1A8A-B8C1-E775D14B3B92有可能是iBeacon的UUID,这点可以待后续可能的话再确认下。
点开Alert Level服务,这是一个只写的Characteristic特征值
点击“Write new value”,尝试写一个值,如0x01,这时候LED开始1Hz闪烁红色了
写0x02则常亮,写0x00则熄灭。
由此可知,该特征值可能是做丢失警报的等级,并利用LED的闪烁形式变化来体现。
好了,开箱就先进行到这里,等后面再准备细致的进一步研究。
- 2023-12-25
-
回复了主题帖:
【STM32MP135F-DK】1-开箱测评与开发环境搭建
qiao--- 发表于 2023-12-24 23:07 那你要先排除一下,看是硬件原因,还是软件原因,再来解决问题。
嗯,找了原厂帮忙看看啦,多谢
- 2023-12-24
-
回复了主题帖:
【STM32MP135F-DK】1-开箱测评与开发环境搭建
qiao--- 发表于 2023-12-22 22:42
我用的是树莓派的电源适配器,供电不足的情况下液晶是亮不起来,建议换一个电源线试一试
我换了个电源和线,识别出来5V3A了,但还是亮不起,感觉有点问题