找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

13

积分

0

好友

1

主题
发表于 2023-9-13 14:11:24 | 查看: 754| 回复: 3 IP:江苏省南京市 电信
本帖最后由 teafox 于 2023-9-13 14:18 编辑

作为一个对STM32缺货涨价感到遗憾的粉丝,我认识到无论是在产品开发还是DIY玩耍时,成本是无法忽视的(即使声称忽视成本也是有限度的)。

在去年下半年,我设计了一个作品,该项目需要使用一个MCU进行简单的控制。因为我对STM32系列最为熟悉,所以我选择了价格相对较便宜的20脚芯片STM32F030F4P6。当时的价格大约是两块多一片,虽然不算是最便宜的MCU方案,但对我来说是最快的开发选择。一个月后我进行了第二批采购,但是同一卖家的报价已经涨了不少,尽管如此我还是选择继续使用。过了一个月,价格居然又涨了,于是我转而使用了兼容引脚的STM32L010F4P6,价格不到四元,虽然比之前的要贵一些,但相对于当时的F030F4P6来说还算便宜。

随后,STM32F030的价格越来越离谱(尽管MCU成本并不占据很大比重),于是我开始考虑国内替代方案。

中科芯 CKS32F030F4P6
我尝试了一种叫做CKS32F030F4P6的芯片,据说它是STM32F030的二进制兼容版本,价格也很便宜。我购买了一些样片进行了测试,结果发现它可以通过ST-Link下载,ST-Link Utility也将其识别为STM32F030。我直接将原来的HEX文件烧写进去,运行效果和STM32一样。由于我所需的功能非常简单,只需验证我使用的功能是否正常,这并不能保证它与STM32的100%兼容。它性价比高,但是今年初它也开始缺货涨价了。

航顺 HK32F030MF4P6
我接着尝试了另一种型号HK32F030MF4P6,当我发现国内替代的MCU也开始缺货时,我开始考虑其他方案,并且不排除以后采用C51代替STM32。因为我需要考虑引脚兼容性,所以我将PCB进行了修改以兼容STM8S003,而不再兼容STM32F030。后来我发现了这个奇特型号的芯片HK32F030MF4P6。同样的厂家还生产了一个名为HK32F030F4P6的型号,该型号和STM32F030的引脚兼容。而前者则兼容STM8S003。通过测试样品,我发现这个型号不能被ST的工具识别,只能使用OpenOCD自己编写脚本进行下载。尽管引脚布局有所变化,但是通过阅读手册,我发现它的寄存器与STM32基本一致,因此我将一段代码放入了一个STM8S的小板子上,点亮灯的功能也没有问题,所以我决定将其用于我的项目。

芯马科技 XM1008F6P6
最近,我还有另一个项目需要使用STM32F031F6P6,但是因为缺货的原因,我需要寻找替代型号。除了CKS32F031,我发现了一个叫做XM1008F6P6的型号,它据称兼容ST的F030/031,而且价格也不贵。而且这个厂家正在推广,购买样品还包邮顺丰,因此我决定先验证一下。结果令人惊讶的是,它同样可以被ST的工具识别为STM32F0,但是当我将我的代码烧写进去后,它无法正常工作。

总体而言,面对STM32缺货和涨价的问题,我不得不寻找替代解决方案。我尝试了一些国产替代型号,其中一些兼容性很好并且价格便宜,但是由于缺货和涨价,我还在不断寻找更合适的选择。无论如何,成本始终是一个重要的考虑因素,我会根据当前的情况和需求做出最优的选择。

发表于 2023-9-13 14:15:35 IP:江苏省南京市 电信
接下来介绍过程中遇到的一些坑,站友请注意避让。

首先是关于XM1008的,我在使用原来的STM32代码时遇到了两个兼容性问题。
(1) GPIO.BSRR寄存器在STM32中可以进行32位/16位/8位的读写操作,但在XM1008上,使用半字操作写入高16位就无效了。这个问题只需稍作修改源代码就能解决,但它也暗示了XM1008在寄存器访问方式上与STM32不完全一致。
(2) 这个实际上是我在STM32代码中的一个bug,但是在STM32上却按我的意图正常工作,在XM1008上严格执行却失败了。我在操作SYSCFG的CR寄存器以改变内存映射时,却没有在RCC中使能SYSCFG。令人惊讶的是,这个错误的操作在STM32上竟然能够正常起作用。

接下来是关于HK32F030MF4P6的问题,由于我刚收到板子并开始进行调试,花了我很多时间才找到问题所在。这个芯片可以看作是STM32F030的一个变种。虽然头文件中的寄存器定义与STM32看起来一样...但魔鬼可能就隐藏在细节中。当我修改了引脚使用的程序后,它无法正常工作,而且无法重新烧写程序,SWD接口也无法连接...

我的程序中使用了STOP模式,并通过外部中断唤醒。根据我的STM32经验,在STOP模式下是可以使用SWD进行调试的,除非在DBGMCU中启用了低功耗调试。但奇怪的是,即使我使用复位引脚,SWD也无法连接(复位时也无法连接),这个MCU就像变砖了一样。

为了找出问题,我使用了实验板和另一片芯片,并在代码中添加了一段延时以进行调试。我发现MCU的SCB.CR寄存器的SLEEPDEEP位不设置时,外部中断可以唤醒,也就是在普通的Sleep模式下正常工作。为什么在STOP模式下不正常呢?而且,在进入STOP模式后,不仅外部中断无法唤醒,复位引脚也无效。

后来我注意到该产品手册上提到,除了电源引脚外,所有引脚都可以作为GPIO。噢,没错,NRST引脚也可以作为GPIO。仔细核对,NRST引脚就是PA0。而我的代码将默认引脚都设置为模拟模式。所以,要将PA0设置为AF模式才能用作复位功能。

复位引脚的问题解决了,但在STOP模式下仍然无法复位。奇怪的是,我测量了工作电流,它还没有降到STOP模式下的水平。再次对照手册,HK32F030M有Sleep、Deep Sleep、STOP模式,相比STM32F030多了一个Deep Sleep模式。而我测量的电流似乎与Deep Sleep模式差不多。难道休眠模式选错了吗?

根据手册中给出的说明,我将PWR.CR寄存器的LPDS位设置为1后,居然就成功了。电流也降低了,同时NRST引脚也可以正常复位了。"
发表于 2023-9-14 14:19:03 IP:广东省 广电网
我也是一个DIY爱好者,经常用STM32做一些小玩意儿。我觉得楼主分享的经验很有启发性,让我了解了一些国产替代方案。
发表于 2023-9-14 14:19:39 IP:广东省 广电网
楼主的经验很有参考价值,我也是一个STM32的粉丝,但是现在的价格让我很难接受。我之前也用过CKS32F030,感觉还不错,但是后来也涨价了。我现在在用GD32F030,据说它也是STM32F030的兼容版本,价格比CKS32F030还便宜一些,而且性能也不错。我用它做了一个温度控制器,用ST的工具直接下载运行,没有遇到什么问题。我觉得GD32F030是一个不错的替代方案,可以试试看。
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|国产电子社区 ( 沪ICP备2023018578号-1|

苏公网安备 32011102010465号


)|网站地图

GMT+8, 2024-5-22 20:12 , Processed in 0.063834 second(s), 21 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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