stm32入门或不要重蹈覆辙

图片


在stm32f103c8t6和stm32l151rct6的示例中,在了解ARM的过程中遇到了关于rake的简短故事。


我对微控制器的了解始于AVR。 我工作了很长时间,从AtmelStudio4中带有划痕的电路板和汇编器的板子,到在记事本(在我的情况下为KWrite)和命令行中工作的常规战利品和自写的makefile中。


但是现在该戳他们的哥哥-ARM了。 选择一个特定的家庭是漫长而被动的(因为没有直接的需求,所以我并不着急),但最终它最终出现在stm32f1上,因为它可能是最受欢迎的一个。 购买编程器,调试板(例如Discovery或Blue Pill)? 您是什么人,我是AVR摄像机的专家! 任何板都可以制成LUT,甚至在需要时也可以制成,而无需太多的车身套件。 因此,我购买了裸露的stm32f103c8t6并开始用电路板的痕迹进行萨满化。 我需要什么? 至少应将两个端口带到梳子上,这样很难完全显示这些端口。 哦,我每条腿有8条腿-从端口A的小腿(0-7),从端口B的小腿(8-15)。 当然,LED和按钮仍然没有指示和控制。 这使我在完成的调试板上感到惊讶的是,缺少至少2-3个LED和1-2个按钮,它们不会与任何东西发生冲突。 他们如何想象调试? 在按钮PA8,PA9本身下面,它们的位置很方便。 USB,跳线BOOT0,BOOT1和手表的电池连接器也很有用。 还有石英连接器,非常漂亮(此后我再也没有使用过石英连接器)。 对于电源,控制器的电压不超过3.6 V,USB电压为5V。必须安装稳定器。 我读了很多书,人们如何选择低电压降的稳定器……为什么? 差别是一个半伏,但是橡木78l33足够。 现在是JTAG连接器。 Atmel的编程连接器具有标准的ISP10或ISP6。 JTAG可能也是标准的东西。 事实是……但仅适用于单个制造商或设备。 我们看一下st-link上的连接器:漂亮的10针。 我们来看一些AVR程序员:哎呀,已经是20针了。 我们在其他地方寻找:更多不兼容的连接器,这些都是不兼容标准之神。 好吧,如果是这样,我们将发明自己的。 如果有的话,它们之间的适配器将不会比ISP-6到ISP-10适配器复杂。 一切似乎都准备就绪,您可以付费。 事实证明,在业余水平上可以达到0.5 mm的间距,我什至不必用记号笔绘画。


现在如何刷新它。 由于有USB,它很可能可以通过它。 我读了数据表-是的,它不能通过USB来完成,但是可以通过UART1来完成。 糟糕,我忘了撤回它。 此外,它还与按钮冲突,与挂在PA9上的按钮冲突。 好吧,我会在帖子中输出它,但是还有一个按钮。 有点萨满主义,板子已经准备好,甚至在stm32flash中定义。


图片


图片


它似乎已被淘汰,现在该继续编写代码了。 在网上阅读了几篇文章后,我在gcc-arm-none-eabi下找到了一个现成的存档。 稍后,我将确切弄清楚如何设置组装顺序。 到目前为止,我正在做按钮和LED的问候。 由于这是我第一次接触这个家族,因此没有像HAL这样的包装器只是通过寄存器手动操作。 但是,在我看来,这是一种完全自然的方法,没有人提及。 一直在拉扯板上的电源和BOOT0有点烦我,但是哦,好吧,总有一天我会做一个JTAG编程器。 奇怪的是,我没有在时钟关闭的情况下踩到耙子。 他在TurboPascal上进行3D处理时回想起自己的青年时代。 在这里,我有一个来自rapiberry pi的ili9341显示器和一个高达72 MHz的控制器。 就是这样-每个模型最高200点,每秒11帧。 当然,所有变换矩阵都以定点数计算。



在某个时候,我想制造一种可穿戴设备,以长时间依靠电池供电。 我看了一下数据表,感到很沮丧:著名的ARM功耗要比同一个AVR差很多倍! 如果考虑到小时数,后者(在第一个控制器上发现是ATmega88p)消耗的电流为0.8μA,那么即使在最经济的睡眠模式下,第一个控制器在RTC时的消耗电流也为25μA±1.4μA。 不好 但是,stm32f103不属于经济系列。 我在STmicroelectronics网站上查找了其他系列的控制器,然后选择了stm32l1系列:除了消耗大约1μA的电流之外,还有一个电容传感器和一个LCD控制器。 没错,最大频率较低,只有36 MHz(如果使用USB,则为24 MHz),但我会以某种方式幸免。 决定:我要从32 KB的RAM(还有256 KB的闪存)中取出几个stm32l151rct6,但是我很难想象它会被锤打。除非绝对是垃圾或数据文件。


  • )不要混淆睡眠模式(睡眠,停止)和关机(待机)

同时,我用备用的stm32f103来制作st-link v2程序员,这仅仅是因为我已经厌倦了BOOT0和电源的困扰,而且速度更快。 但是,我将离开UART编程-您永远都不知道。 也有一些萨满教,但没有什么突出的。 除非找到openocd的命令行,否则将是一个问题。 对于子孙后代,我将离开她:


openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "reset halt" -c "flash write_image erase "$(firmware).bin" 0x08000000" -c "reset run" -c "exit" 

对于stm32l151,当然有必要将目标更正为“ target / stm32l1.cfg”


图片


图片


我会在时间顺序上领先一点,但不会回来。 先生们,不要节省PCB的厚度! 或至少添加道具,或不使用smd组件。 碰巧在编程板上我在随机的位置上只提供了两个安装孔。 而且这些地方离JTAG连接器很远。 一段时间后,我注意到程序员不稳定。 那行得通,然后不行,然后必须通过UART擦除“受害者”,然后将其捡起。 事实证明,从控制器输出到连接器的电阻损坏了。 他只是从身体的接触垫上掉下来。 我焊接了电阻器。 然后他焊接了其余的部分。 然后他意识到,即使是在电缆的插拔过程中出现的很小的板变形也足以应付不幸的组件。 结果,我在连接器旁边贴了一个备份。 按住时。


正如读者已经猜到的那样,编程也位于文本编辑器中,而编译和固件位于控制台中。 自然,为l151购买调试板的灵感无异于任何IDE。 擦掉第一块板留下的痕迹,我选出第二块板(将程序员视为第三块,但它仍然不是调试板)。 由于我要调试节能设备,因此需要耗电。 我不会更改78l33稳定器,但会用跳线将其输出撕裂,以便可以用电流表戳它(我希望对微安表也一样,但是可以了)。 让梳子与前一块板上的梳子相同-兼容性! 好吧,当然有几个LED和按钮。 带有UART1的耙子闪闪发光,但我仍然将其连接器放到了额头上。 当然,我已经有了JTAG,但是保险不会给您带来伤害。 就像前一个(以及程序员板)一样,即使跳线不太多,也可以在一侧分开。


但是当控制器密封时,出现了问题。 我以某种方式天真地相信微电路的主体上应该有一个指示第一条腿的钥匙。 谁能想到ST会做得好,将对称地制作两个键。 那么现在要焊接哪一边呢? 思考之后,我认为这些不是关键,而是技术的深化。 例如,您永远不知道要在制造中定位芯片。 或按基座以填充塑料。 然后,您需要按题词导航。 如果微电路是“标准”放置的,也就是说,当第一条支腿在左上角时,则铭文应该可读,这是合乎逻辑的。 于是他开始焊接。 LUT缺陷或弯曲的手,但是微电路的弯曲都是弯曲的,我在完全焊接之前及时注意到了它。 没关系,有一种使用剃须刀焊接千足虫的古老方法:它不会被焊料弄湿,并且必须薄到不会弯曲太多的程度。 事实证明,由于双腿弯曲,双手仍不够伸直。 但是不是向上,而是横向,很好,至少不是很好,他们设法以某种方式拉直了它们。 第二次尝试焊接是在显微镜下进行的,但在此之前,我决定校正腿部。 其中一个坏掉了。 它们是由什么制成的,您一次不能弯曲? 输出组件没有这样的问题。 好吧,就是这样,我认为婚姻中的芯片将不得不焊接另一个芯片。 但是突然这不是关键的一腿吗? 好吧,这是一个通用结论,或者是其中一顿饭。 到目前为止,我已经密封了它,并且可以看到它。 这次我设法均匀地进行焊接,尽管我想从中获得乐趣,但我的腿没有碰到I2C,但至少在诸如USB,JTAG,UART或BOOT之类的重要连接器上没有。 我连接了它-它不起作用,程序员看不到板子。 一段时间以来,萨满巫师用焊脚,但这无济于事。 浏览数据表时,会偶然发现位于文档地下室某处的控制器图片。 这就是您想出题字BOKOM的方法! 也就是说,如果您旋转控制器以读取铭文,则第一条腿将位于左下角。 一路上,事实证明,“技术隐患”之一仍然是关键。 没错,它没有解释如何将其与对称区别开来。嗯,至少有一些线索。 我用建筑吹风机焊接控制器,以免破坏结论,这次我将其焊接在侧面。 断开的输出正好到达UART1的TX输出,即到编程和调试连接器。 这是完全不好的,但是在更换控制器之前,您至少必须确保以我猜测的方向进行焊接,不要因连接错误而杀死它。 我连接了程序员-它可以工作。 万岁。 所剩无几-焊接连接器,二极管和其他线束。 评论提出了另一种方式-接地:它们通常连接在壳体内部,并且不完全对称。 的确,鉴于结论的步骤,很难得出正确的结论。 尽管如此,这是最可靠的方法。


我不想使用没有UART1的控制器,它甚至比现在还差。 如果确实如此,那么更改就完全一样了,所以我决定扮演一名外科医生,并使控制器从MGTF的头发变成假肢。 一个好的导电胶就在眼前,用它可以将头发果断地粘在芯片主体的平台上。 用手术刀无情地除去粘在相邻腿上的胶水。 您想进入半毫米平台而不进入相邻的突出支腿是什么? 我检查-可以。 倒入氰基丙烯酸酯,直至其脱落,以免以后脱落。


如果腿没有再次掉下来,也许这就是我本来要使用该板的方式。 并用胶水覆盖。 但是,它非常柔软,可以用手术刀切割,因此可以成功清除。 但是由于某种原因,我不想第二次使用相同的导电胶。 我会尝试焊接腿。 烙铁的通常尖端并没有爬进去,但套件中包括了锥体(实际上,锥体最初是唯一的,但由于其明显的不便之处,它被楔形锐化的通常的锥体所代替),完全爬进了锥体中。 奇怪的是,“移植手术”成功了,腿部正常工作(KDPV上腿部的特写照片)。


图片


图片


因此,熨斗已经准备就绪,是时候开始编写代码了。 最好在gcc和CMSIS库下找到一个现成的示例。 有什么比制造商的官方网站更好的呢? 事实证明,意法半导体对我并不乐观。 站点导航是通过一个不雅地方进行的,这一事实已经众所周知,现在很难找到一个人为人创建的站点。 但是他们不允许从网站上下载任何内容! 也许他们会在注册后允许注册,但是在此之前,我不想在任何地方注册,而且对开发人员持这种态度之后,甚至更是如此。 您为什么需要我的邮件,或者在那需要什么? 收集个人数据,发送垃圾邮件? 穿过森林,我会在公共领域中找到它! 顺便说一句,我对相应的软件包不在存储库中感到有些惊讶,但是ST可能提出了某种许可的痔疮。 因此,我将腹泻的光线发送给提出了这样的政策的商人,并且也发送给不舒服的网站。


尽管如此,该库还是可以在Internet上找到的(我不会提供任何链接,您永远不会知道该站点将发生什么情况)。 另一种选择是下载嵌入了这些库的开发环境或CubeMX。 的确,从官方站点下载它们也是不可能的,因此我们正在寻找第三方并在虚拟机上进行安装,以防万一“如果有事情发生”。


我们弄清楚了熨斗和种类。 现在是时候对付控制器了。 第一个惊喜是等待尝试在Discovery下使用第三方代码时。 他们使用了stm32l152控制器,乍一看它与我安装的stm32l151几乎相同。 除了微小的差异外,事实证明LCD模块未安装在“ my”控制器中。 有点令人失望,但我仍然不打算使用它。 尽管可以比数据表中的脚注更清楚地区分这种差异。 顺便说一句,在数据表中,建议在这种情况下将VLCD引脚连接到电源,在我的照片中,未焊接相应的0欧姆电阻,但实际上我已安装了它。 没有它,它也可以工作,但不会使内部连接过载。 事实证明,实时时钟的行为更加有趣。 他们固执地不想工作,在互联网上,他们只是简单地写“做到这一点,做到这一点,就可以了”。 但这行不通。 但是,在某些地方提到了“本系列RTC中的已知问题”。 尽管如此,尽管仅在内置的RC发电机上,手表仍会发条。 尝试锁定时钟石英导致了对LSE准备就绪位的无尽等待。 我试图检查微电路的支脚是否掉落在板上的轨道上,并以正常的GPIO模式将其拉出。 高频石英脱落。 WTF?! 通常,这两个石英不想一起工作,但至少它们至少分开起作用。


然后我猜到:充满控制器一半的胶水(它是液体,您不能精确地使用它,并且谁会想到的...)会泄漏,石英会干扰其尖端。 嗯,从外面刮掉胶水并不难,但毕竟即使在微电路的底部也麻木了。 而且如果石英上有足够的泄漏,那么它将影响消耗。 我在Google中寻找东西,而不是人们去除氰基丙烯酸酯。 它提供温水(???)和二甲基亚砜。 我不相信温水,所以我购买DMSO。 一个多小时后,我发现胶水表面没有化学滴,但我没有注意到有什么区别。 但是他们注意到了石英,并开始或多或少地正常工作(我想知道为什么吗?Dimexide代替了胶水吸收的水分?)。 但是,这并不能说服我,残留的胶水仍然令人眼花...乱……因为在板子下面没有什么特别明显的东西。 顺便说一下,我用二甲双胍洗掉的温水并没有影响胶水(我并不感到惊讶)。 我发现像去胶剂之类的东西,和胶水本身在同一根管中,只有紫色。 好吧,至少它应该工作! 事实证明,它可以并且确实起作用,但是其稠度类似于酸奶,并且根本不适合微电路。 好吧,橡皮擦对您有什么用? 在外面,我可以清洁它。 最后的机会:很少提及丙酮。 我对塑料零件有些担心,但是只需更换它们就容易了。 我将丙酮倒入一个玻璃罐中,将板扔在那里,并放置过夜。 第二天早晨,事实证明丙酮确实有效,而且效果如何! 没有胶水的痕迹。 而且,按钮之一的推动器溶解。 有趣的是,第二个幸存者大概是用更稳定的塑料制成的。 令其他塑料保持原样,即使铭文幸存下来,我也感到有些惊讶。 很好,但是按钮可以更换。


现在,我们设法从手表石英启动RTC,并触摸睡眠模式,并与其他外围设备通信。 而且,为了完全避免冒犯,他在董事会上签名。 但是不能用记号笔(突然又用溶剂浸泡?)而是用手术刀刮擦。 几个世纪了!


好吧,对于子孙后代,我将为两个控制器以及库,makefile等提供代码示例。 它仅保留安装gcc-arm-none-eabi,openocd,stm32flash和其他琐事。
stm32f103
stm32l151


在评论中,多次建议他们不要进行LUT并从专业人员那里订购电路板的制造。 如此处所示,对于原型制作,我没有理由。 另一件事是,如果您需要多层板或什至更小的台阶,BGA外壳或其他在家中难以完成的事情。 并且,当然是在设备最终版本的制造和复制中。 客户拆开箱子不好 从PCB焊接, 它将找到不带口罩和MGTF跳线的弯曲锯切板。


结论:


  1. 如果愿意,您可以自己制作调试板,它们并不比购买的板差。 但是如果调试器程序员不太昂贵,那还是更好的选择。 当然,您可以做到,但您不会更改方案,如果这样,它不会比购买方案更好。 更便宜,也很有可能。 除非多余的控制器仍然存在或存在交付问题。
  2. 同时,不要忘记备份编程连接器UART1,同时还有跳线BOOT0,BOOT1。 除了实际编程外,使用UART调试程序也非常方便。
  3. LQFP64盒上有两个钥匙,其中之一是假的。 您将必须导航到题字,以便您的脚向左看。
  4. 仅需在显微镜下进行很小的焊接步骤。 否则,很难确定是否一切都消失了,是否有“鼻涕”。 好吧,可以在“专业”设备上使用,例如专用吹风机,焊锡膏等。 我在这里不知道,我在写业余技术。
  5. 不要节省PCB的厚度。 它会弯曲,这可能足以损坏smd电阻器,甚至可能损坏电容器。 这对输出并不可怕,并且结论不正确的组件(晶体管,微电路)可能会幸免。
  6. 制造石英连接器是浪费时间。 您将不会更改它们,因此只需在板上焊接即可。
  7. 仅在没有吹风机的最极端情况下,才用剃须刀喝千足虫。 否则,损坏它的风险太大。
  8. 即使支脚从微电路上掉下来,也可以恢复! 即使间距为0.5毫米。 最主要的是使用焊接,而不是导电胶。
  9. 切勿用氰基丙烯酸酯胶(超级胶)填充芯片! 他没有适当的电气特性,甚至没有机械特性。
  10. 丙酮最适合用于去除难以触及区域的强力胶。 它完全溶解。 最主要的是确保周围的组件不受影响。 可以从难以到达的地方进行机械拆除。

Source: https://habr.com/ru/post/zh-CN456280/


All Articles