本帖最后由 xiatianyun 于 2018-6-4 09:42 编辑
刚看到有前人发布自己学习中的持续更新贴作为鞭策自己不断学习的方法,我也做个学习笔记,把过程中的点点滴滴写下来。
其实写笔记我一直使用复制粘贴保存在电脑里,但最近我喜欢上了用笔写在笔记本上,觉得更有价值更有效率。
--------------------------
先来谈谈STM32的常识。
ARM公司其实不生产芯片,靠什么赚钱呢?靠授权。ARM研发内核然后授权给各个芯片厂家,靠授权费用赚钱,这个是个好注意。毕竟研发和生产在环节上很不同,一家科技公司很难占据产品的各个环节,占据了也就作茧自缚了,就像昔日的诺基亚。
但毕竟内核只是芯片的一部分,内核之外叫做片上外设,意思就是芯片上的相对于内核而言的外部设备,比如GPIO。
芯片厂家根据内核自己设计相关的片上外设成为单片机,如果没有统一的标准那么各个厂家的芯片就不能通用。
意法半导体公司就是其中一家授权生产ARM的公司,当然意法的产品不只ARM芯片。
芯片内核也是升级换代的,我以前知道的ARM其实是比较早的内核产品。精英版的STM32是比较新的内核,叫Cortex-M3,手机上的叫Core-A,A7、A8之类,是很先进的东西。
微控制器芯片Cortex-M3、M4、M7,一个比一个先进。
-------------------------------
事实上使用汇编编写程序已经变得很难了,51时代就有使用C来设计51程序了。学校里面曾看到高年级同学使用手操器来下载程序,那种是在纸上写好汇编程序然后自己手动通过手操器(不知道叫什么合适)一条条下载到试验机里面的,连个电脑软件都没有。想来那种手操器兼具汇编和烧制的功能。我是学PLC的,我以前也是这么学习PLC的。C语言是比较底层的语言,用来编写单片机程序就理所当然了。单片机的C语言采用的编译器和普通的C语言不同,可以把单片机的C语言看作是C的一个子集,并不是所有C的特性均支持。
要想用C来写单片机程序当然要做些底层封装,可以自己封装,事实上芯片公司提供了标准封装,ST公司提供的STM32库函数就是这样的封装。
------------------------------
Keil公司是另外一家公司,是软件公司,提供开发单片机的工具,从51到ARM均有。
ST公司也有自己的开发工具,为什么我们都用Keil呢?业有所专嘛。
Keil 提供的STM32开发工具似乎换了个名字,叫MDK,不过装好后还是叫Keil。
Keil不是免费的,以前很难找到破解的Keil,现在我们使用Keil,所以我们都懂了。
Keil是个IDE工具,除了编辑程序外还提供编译器,并且通过简单选择就配置好了开发链路,不用自己配置,类似与其他专有语言开发工具,比如微软的VS。
换句话说如果开发者要自己配置开发链路的话也是可以的,只要够专业。通过查看,安装好的Keil在目录下的ARMARMCCin里就是编译工具,其他 目录里面提供单片机的include、lib。
为什么还要从ST官网下载库呢?官网的比较新嘛。Keil提供的库我想也是ST提供的,不过可能不会同步更新。
Keil的编辑器不好用,不过keil提供从其他编辑器来操作的可定制菜单,看来Keil还是知道自己的短板的。
现在比较不错的编辑器有gvim/sublime text/vs code,不过这些都是普通编辑器,如果要在开发中实现跳转、自动完成的话需要插件,这些都是学习成本,就看值不值了。
补充:
其实开发STM32除了在windows平台外还有Linux平台和Mac平台也可以,这对于极客来说是个好消息。具体看ST公司提供的开发套件,从我了解的信息看是集成在Eclipse的开发环境。
----------------------------------
学习STM32除了软件外其实很重要的还有硬件,电子工程这类。我学习STM32纯属偶然,我在PLC设计中需要使用一块带Modbus RTU通讯的中继板来做扩展,这块中继板设置通讯奇偶校验时只能使用固定的无校验,这让我很郁闷,系统中其他站都要设置成无校验才行。所以有了我是不是可以修改下的冲动。电子工程没弄过,这个是个拦路虎,我想我以后如果中断学习了可能是因为这个。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
宏定义的用法有两种,一种是宏常量,比如定义各种寄存器地址,就是用一个比较好记忆的符号来代替一个难以记忆的数字。
另一种是宏替换,这种说法可能不太听说,我们通常不加区分地说“宏”。比如断言assert_param()就属于宏替换。
宏替换的作用和函数很像,不过宏替换不像函数那样需要额外的内存开销。
所谓替换就是用一个字符串替代宏名,这是在预编译阶段发生的。
记住:不是用宏值替换,宏值是发生在运行阶段。
既然是字符串替换,那么就可以在替换的字符串里面有普通函数,就像assert_param()替换里面的assert_failed()函数一样。
所以,assert_param()是宏替换而assert_failed()是普通函数。
所以,assert_param检测到非法参数输入时如果assert_failed()没有其他处理程序是不会终止的。
--------------------------------
#defined相关的预处理还有#if/#ifndef/#else/#endif等等。
照这个思路,
完全可以出书了.
不过,
我强烈怀疑这不是楼主的学习笔记,
应该是对STM32有相当的了解,
然后再来整理笔记.
不过无论如何,
这是一篇非常好的东西.
纯粹的笔记,不排除有抄的味道,不过也是我自己抄的。
我刚学习,点滴记录,我认为是我的学习之道。
首先自然是硬件内容了,也是我最薄弱的环节。
STM32F103ZET芯片共计有7组GPIO,每组16个引脚。是不是每款芯片都是成组(16Pin)提供呢?不知道,记得51的IO引脚似乎有些不是。
这些GPIO引脚都是作为IO用吗?可以作为其他用途,也就是复用,就像键盘上的按键有复用功能一样。
比如可以作串口使用、可以接触摸屏等等。
还是先来看GPIO。
每个引脚都可以有输入功能也可以做输出用,要么IN要么OUT,这个看怎么配置了。
Input功能有4种:模拟输入、浮空输入、上拉输入、下拉输入。
模拟输入暂时不讨论。浮空输入就是引脚内部不接任何器件直接接外部电路,但是直接接按钮吗?不是,需要电压的,所以一般外部电路需要设计有上拉或下拉电阻。
上拉和下拉输入可以和浮空输入合起来学习,因为在浮空输入外接上下拉电阻时起到的作用和设置成上下拉输入时类似。
上拉时通过电阻接VDD,VDD就是外部电路的电源+,这个根据不同的场合有不同的电压。可以这么认为,上拉就是为了配合外部电路的VDD设计的。
设置成上拉时,当没有信号时,也就是外部浮空既不1也不0时,端口通过上拉电阻接到VDD上使端口为1,这个就是端口默认电平。换句话说端口不能检测到1信号。
那端口能够检测到哪个信号呢?0信号。当端口出现了低电平时可以被检测到。
好奇特的端口,不是可以检测1和0吗?事实上PLC也是这么的。
同理,下拉输入时端口通过下拉电阻接到VSS上去,默认是0,当端口出现1时被检测到。
总结下:上拉用于检测0信号而下拉用于检测1信号。
如果设置成上拉输入或下拉输入(不同于浮空通过外部上下拉电阻),这个上拉下拉也叫“弱上拉或弱下拉”。怎么个弱法?可能是电阻阻值吧。
总之,GPIO的输入还是比较简单的。
这里需要了解下什么是1电平什么是0电平,什么是TTL电平什么是CMOS电平。
----------------------------------------------------
一周热门 更多>