STM32U5是意法半导体公司新出的一款基于M33内核开发的专为物联网定制的MCU,所以在进行基本熟悉之后,应该体验一下B-U585I-IOT02A的无线部分,这几天一直在学习B-U585I-IOT02A的蓝牙部分(采用ST推出的STM32WB无线蓝牙模块)和WiFi通讯方面(WiFi模块采用的是MXCHIP旗下的EMW3080B)。STM32U5与其通讯均采用的是串行通信的方式进行通信的,(蓝牙采用的是UART,WiFi采用的是SPI),按理来说不会有啥问题,巧的是,我就遇到了这个麻烦,今天就说一说,给大家填填坑。
首先说说蓝牙部分,之前蓝牙部分ST的官方说:
按我的理解就是原来蓝牙不好使,是因为蓝牙模块里没有这个固件(stm32wb5x_BLE_Stack_full_fw.bin)烧录这个固件就可以了,我烧录之后,发现蓝牙的状态不对,后来看官方邮件里还有个附件,所以又在STM32WB中烧录个BLE-AT-Server,这俩都烧录到STM32WB中,但是发现蓝牙的状态还是不对,后来小密好像也是这么操作的,他竟然成功了,我觉得这个STM32WB是在针对我。接下来就是U5提供的蓝牙例程(BLE_AT_Client),发现官方提供的例程是IAR的,好像采用的版本还很高,我用IAR8.3发现编译之后会出现个错误。如图所示:
觉得是IAR8.3的这个版本好像不支持U5的M33内核,如果下载更高版本的IAR,我好像也没有钱买license,所以还是选择移植到MDK吧,移植过程不是很难,编译完成0error,0 Warning,非常开心,但是后来让我意想不到的是,编译出来的固件,不能直接用,只有仿真的时候,全速运行点击两下,才能运行到printf这里,然后就跑飞了,也不知道哪里移植出现了问题。
后来也是小密移植了一次BLE之后,神奇的好用了,那估计是我移植有问题吧,如果官方有时间,可以帮我解答一下,我这个问题应该怎么解?
好,蓝牙这块就到这里吧,挺愁的,鼓捣了蓝牙三天了,也没啥好成果,最后,竟然还指导兄弟们鼓捣成功了,我也算是这三天没白熬夜,算是心安了。
接下来说说WiFi吧,WiFi我之前没看上,因为我看官方都有截图操作,说真的没有什么技术含量,那既然张有理同学说测测这块吧,那我就测测吧,不测不知道,一测吓一跳,啥玩意儿啊,处处是坑,WiFi的话首先把家中WiFi的名字和密码编写到程序之中,然后编译程序输出固件烧录到U5之中,神奇的事情来了,提示我EMW3080B的固件好像有点儿老,不能用,这就来学习新技能吧,把EMW3080B升级一波,首先按照官方操作,把EMW3080B的BOOT推上去,让其进入到烧录固件模式。
接下来烧录程序吧,好吧,我也不会,因为官方截的图有点儿让我懵逼,后来去搜了一下EMW3080B,原来是庆科的模块,好吧,去搜一下怎么下载固件就好啦。
在官方社区看他们写的帖子用zadig_2.2,把jlink转成libusbk这个东西,然后又有用串口烧录的GuduYL_MXCHIP_1.0.10.0265_x64_Release,巧的是我们这款U5开发板只能使用SWD接口下载,因为没有预留出来串口,后来无意之间查到了一篇帖子,他在玩EMW3080B的时候,不经意的一个操作,让我找到了它——mflash,这个玩意儿好啊,非常简洁,容易上手。这里将EMW3080B的固件奉上。
EMW3080B固件下载:
https://doc.weixin.qq.com/txdoc/word?docid=w2_AKcAPgZcANgggFB4kEWThi530TtM0&scode=AOgA3QdlAAcxA1AUtqAKcAPgZcANg&type=0
下图是使用jlink烧录EMW3080B的成功截图
烧录完成之后,发现重新将U5复位,属实得到了“救赎”,可以正常打印串口数据了,而且可以扫描WiFi信号了。如图所示。
之后,我想使用一下ping,又发现了好玩的事情,我使用ping命令的时候,提示我没有找到ping的命令,我心里想:“怎么可能,这玩意儿这么坑么,通过程序都可以看到有ping操作的啊”,哎,抱着不服就干的心态,我换了一个串口,使用了SSCOM_v5.13.1。
果然,它也没惯着我,还是ping不好用,后来不知道谁走漏了风声,让技术高知道了我们遇到了难处,然后技术高投来了橄榄枝,用了他的串口工具之后,咦,好用了,还是专业的人干专业的事儿啊。
总结一下这几天对U5的“恩怨情仇”吧,属实,板子是好板子,U也是好U,接口非常丰富。而且性能也非常强劲。