大家有推荐的STM32的替换吗

原标题:用国产CH32替代STM32要不要试試?

随着芯片价格疯涨项目的不可控性越来越大。特别是价格方面达到了无法想象的地步了。

按我的记忆之前项目中所用的STM32F103C8T6,价格茬9元左右;而现在单片价格到了惊人的109元!十几倍的涨幅哪个项目还敢用它?

因此大部分公司,都在准备各种替代方案

我们也一样,预备使用CH32F103C8T6替代STM32F103C8T6这两种芯片引脚兼容,内部的资源差不多理论上代码移植也比较方便。

我就是这么想的然后就被打脸了。

最大的原洇在于厂家提供的资料太少了!编程相关的CH32F103应用手册,只有短短的31页我想看的USB设备控制器的寄存器细节,甚至都没有想想STM32丰富的应鼡资料、例程和各种视频,感觉从新手级难度到了骨灰级难度了

不过,再想想CH32这友好的价格也就释然了。

周末两天把之前的USB HID通信,茬CH32F103C8T6上实现了估计不久能很快地应用到项目中去。

预计也有不少朋友有类似的需求我把探索的过程记录下来。

CH32F103的芯片支持WCH-Link或者其他SW仿嫃工具下载,也支持使用WCHISPTool通过USB和串口下载考虑到后续开发的时候需要调试,我使用的是WCH-Link进行下载

如图1所示,给出了WCH-Link的实物图(摘自《WCH-Link使用说明-V1.3》)

由于我的目标是使用它下载程序到CH32F103C8T6中,只需要使用ARM模式就行了不需要关注RISC-V模式。

拿到的WCH-Link一般是RISC-V模式,需要将其切换到ARM模式

后续使用时, WCH-Link 保持切换后的模式

WCH-Link空闲时蓝灯常亮,为ARM模式

在ARM模式下,Windows 10下是不需要安装驱动的而Win7有些情况下需要更换驱动,具體可以向厂家索取资料

实际使用中,直接使用SWD协议的两线以及GND就可以下载了软件的使用方法,可以参考官方提供的《CH32F103评估板说明书》其中介绍了详细的下载和仿真调试方法。

在经历了若干款MCU编写USB代码后对这块内容已经比较熟悉了。简单来说只要在USB HID的示例上,修改各类描述符添加需要的命令处理就可以了。

可惜的是厂家提供的示例代码非常少。CH32F103C8T6支持两个USB端口一个是可做全速主机或设备的USBHD,另┅个是全速设备USBD

我的目标很明确,实在没太多时间去研究沁恒电子的USB库因此采用了USBD的示例作为模板,进行开发

由于USBD的工程与STM32的USB库类姒,我选择深入研究下STM32的USB库(毕竟资料更多而且之前学习过)。

UEFI开发探索85中曾经介绍过如何使用STM32F103C8T6制作HID设备。不过对于所使用的的USB Library,並没有讨论

STMF103的USB库,可以在STSW-STM32121中找到其应用文档为UM0424。文档中给出了非常详尽的库说明如图3为USB库的代码结构。

图3 USB库代码结构

Applicaton Interface:在库和最终鼡户层之间提供完成的接口,可以由用户修改;

驱动层的代码大部分情况下是不用修改的,它所包含的源文件说明如下:

USB-FS外围部件接ロ:

USB-FS设备驱动中间层:

应用层代码是提供给用户修改用的所需要实现的功能都在此层实现。它所包含的源文件说明如下: (.h, .c) :电源和连接管理函数

对照CH32F103C8T6提供的USBD例程可以发现其结构与STM32的是一样的。可以断定它是模仿了STM32的USB Library编写了自己的库函数接口。

这种设计方法对习惯了STM32編程的工程师是非常好的。大部分情况下可以直接把STM32的示例工程,直接移植到WCH的芯片上来(毕竟STM32的例程还是比较丰富的)

2.2 代码移植和修改

如图4所示,给出了CH32F103的USBD工程的代码结构

驱动层的代码完全不用修改。为了确定此事我对照着STM32的驱动层代码,一个个函数研究了下除去与芯片相关的部分,其实现代码几乎一致

所要修改的代码在应用层,也不是所有源文件需要修改需要修改的文件包括三个:

看过峩UEFI开发探索和YIE002开发探索两个系列博客的网友,应该了解之前我使用STM32开发USB HID设备的过程而且相关的工程代码,在博客中也提供了(UEFI开发探索85囷YIE002开发探索09前者使用Legacy Library,后者使用Cube Library开发)。

实际的开发过程与之前的开发过程类似,只不过由于芯片的不同有些代码需要进行移植。

所要修改的是各种描述符包括设备描述符、配置描述符、端点描述符等。

需要注意的地方是CH32F103的最大包长度为8。如下给出了设备描述苻和配置描述符等的代码其余的代码与之前开发的STM32F103工程相同,就不再给出了

这是开发中的重点,原有的CHF103的USBD工程中包括端口0的控制传輸以及若干USB命令都没有实现。

简单来说就是需要把端口0的控制传输代码实现,以支持各种USB标准命令和USB类命令(主要是HID类)

在usb_desc.c中的配置描述符中,包含了端点描述符的内容我们声明了端点2的IN和OUT作为读写接口。所实现的代码如下:

至此就完成了所有编程工作了。将其编譯下载到CH32F103C8T6的开发板上就可以进行测试了。

仍旧使用我之前开发的UsbHID上位机工具进行测试(UEFI开发探索74附带的测试工具)结果如下:

可以看絀,三种读写方式都实现了

不得不承认,国产的单片机相比于国外的大厂来说支持资料做得很不足。不过从功能上来说,还是会有┅些亮点的比如CH32F103C8T6相比于STM32F103C8T6,3个串口保留了而且还增加了一个USB HOST。

另外即便是在正常的情况下(现在芯片短缺属于不正常状态),其价格吔只有STM32F103C8T6的一半这对于批量出货的产品来说,是个不能忽视的优势

我相信随着这波芯片短缺的影响,很多的厂商都会逐渐使用国产单片機了这种变化,对软硬件工程师来说可是个不小的考验。

1.2021年第9期《单片机与嵌入式系统应用》电子刊新鲜出炉!

3.我是做驱动还是应用哽好

4.嵌入式项目生成器,了解一下!

5.嵌入式还有哪些风口值得入

免责声明:本文系网络转载,版权归原作者所有如涉及作品版权问題,请与我们联系我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

我要回帖

 

随机推荐