1

是否有任何从 MCU 制造商处读取源代码示例的提示。我是单片机编程的新手,目前我有一个单片机、数据表和示例代码。但问题是示例代码似乎是为有经验的用户编写的。关于他们为什么初始化 RS232、为什么设置端口 1 的第 4 位等问题太多了,

您是否有阅读提示或链接,我在哪里可以获得有关如何阅读 MCU 数据表和示例代码的信息?

4

2 回答 2

2

我想经验是我能给出的唯一答案。就像一般的编程一样,随着时间的推移,你会获得经验并学习流行语和概念。使用微控制器,您可以学习阅读数据表、原理图等。了解开漏、开集、弱上拉等。对于串行端口,出于某种原因,它们总是过于复杂。微控制器和串行端口最难的部分通常是弄清楚要编程什么以获得正确的时钟除数,一些微控制器串行端口是直截了当的,另一些则过于复杂,有些文档很好,有些文档不好,等等。

另一个答案是数据表总是错误的。信息中总是存在空白,您必须破解才能弄清楚。不要只使用数据表在真空中编写数千行代码,从几行到几十行编写少量代码,测试,然后继续,您可以在一天内编写和调试更多行代码数据表而不是其他路径。数据表通常不是由实际设计硬件的工程师编写的,有时是初级工程师或非工程师。有时信息完全是错误的,有时文档是针对与您所拥有的不同但相似的部分。如果他们提供的软件确实可以做一些事情,它有时(并不总是)比数据表更准确(当我说数据表假设用户手册、程序员参考手册时,

随着时间和经验的发展,如果您有足够的视野,您可能会发现,一些供应商倾向于在向用户提供信息方面做得更好,而另一些则没有,一些供应商将秘密隐藏在库中,有时是二进制形式而不是源代码。有时秘密隐藏在编译器和它们提供的其他工具中(这又回到了 api 和库)。我倾向于将此类公司列入黑名单,但有时你不能总是这样。例如,ARM 在提供信息方面做得非常好。问题是它们有这么多内核,每个内核都有许多选项,它们在本质上非常相似(支持相同的指令集),因此很难对你当时使用的一个处理器做了什么和不做什么进行分类文档。爱特梅尔,关于爱特梅尔的东西很难说清楚,文档通常远高于标准,但更重要的是,atmel 的某些特性使它们深受客户的欢迎。你永远不会看到像跟随、文化、选择一个词这样的 arduino,例如带有微芯片图片。有很多图片追随者,但它不像 atmel 世界(早在 arduino 事件发生之前就已经存在)。

另请注意,您可能无法通过单个示例程序和单个数据表了解产品的历史,可能存在已用于多个芯片代的代码,并且可能例如旧版本需要的代码芯片或更新的芯片,并共享该位被操纵的相同代码。看一个数据表可能有意义,看另一个数据表没有意义。这就是黑客攻击的来源,在没有尝试的情况下,看看会发生什么。也许研究据说该代码支持它的家庭中的其他部分可能更有意义。

google 是您的朋友或任何喜欢的搜索引擎,为特定设备或其他任何东西找到尽可能多的开源代码和其他项目。在这个级别上,黑客是必需的,我不会在不好的意义上使用这个术语,黑客是因为你必须尝试数据表中记录的一些位,看看它是否真的有效,如果没有,那么如果可能的话看看它做了什么,看看其他源代码,看看你是否能弄清楚。就像没有完美的汽车可以每加仑行驶无限英里、完全安全、永久使用并且价格低廉一样,也没有完美的芯片具有完美的数据表和示例代码。如果你想在这个软件/硬件级别上工作,你必须弄脏你的手,

如果您不会专门询问您正在使用的 mcu 或注册的原因是因为它是闭源产品或在 NDA 之后,那么您可能可以访问制造该产品的公司,并且您应该能够从他们那里获得支持。通常比您从不必签署 NDA 的公司获得的支持更好。不是那个开放文档,开源公司不好,只是如果你购买的公司对你感兴趣,以至于显示内部受保护的信息,他们有足够的兴趣让你更好地接触制造/了解产品的真正工程师. 如果不是这种情况并且您可以谈论它,请不要害怕向 SO 发布有关您想知道的寄存器和位的问题。

于 2012-04-06T02:25:05.130 回答
0

MCU 数据表中的示例代码和流程图是初始化特定外设(如 RS232)的良好起点。您只需从那里开始,并在 MCU 数据表中跟踪位信息及其作用。

于 2015-02-28T08:47:21.157 回答