1.单片机正常工作的基本条件
单片机正常工作需要满足三个条件:1) 给单片机供电 2) 单片机复位电路 3)单片机时钟电路。满足这三个条件的硬件电路,我们称之为单片机最小硬件系统。
(相关资料图)
单片机复位电路有两种,高电平复位和低电平复位。STM32系列单片机采用的是低电平复位,RESET这个标志我们称之为网络号,相同网络号表示导线相互连接。
单片机时钟电路也有多种方式, 一个是采用外置晶振的方式,一个采用内部时钟,还有一种是外部直接接入其他芯片生成的符合要求的时钟信号(这种不常见)。
2.单片机的时钟系统
数字电路都是需要时钟信号来驱动的,所谓时序,就是数据按照时钟信号来变化。单片机属于数字芯片,自然离不开时钟信号。一般来说,单片机时钟源来自外部晶振信号HSE或者内部时钟HSI。
系统时钟SYSCLK信号源可以选择HSE,HSI或者锁相环PLLCLK,一般我们都会选择PLLCLK这个信号源作为系统时钟。HSE或者HSI经过分频后,送到倍频器PLLMUL,然后产生PLLCLK。系统时钟SYSCLK经过各种分频器后产生各种外设所需的时钟信号。
同等条件下, 时钟频率越低数字电路的功耗就越低。另外,单片机内部不同的外设电路对时钟信号的频率要求不一样。有的电路反应慢,不需要那么快的时钟信号,例如,iic总线电路。有的电路需要速度快的时钟信号,例如usb电路。通过对时钟信号分频不但可以满足不同外设需求还能降低功耗。而且,这些内部外设电路的时钟信号还可以开启关闭。所以,我们在操作单片机内部模块时,第一步要做的就是开启对应外设的时钟信号。
3.浅谈单片机启动方式
单片机启动方式是指,单片机从哪里开始执行程序。STM32执行的第一条指令地址是在地址0x0000 0000上。如果程序放在SRAM里面执行,那就要在0地址上设置跳转指令,跳到SRAM的首地址0x20000 0000,所以是需要重新设置异常向量表的。系统储存器和Flash储存器都是双地址,系统储存器里面出厂前写入了bootloader引导程序相当于电脑的BIOS一样,可以把我们的用户程序转存到flash里面去。你可以把bootloader看成一个flash读写程序,当然了,BootLoader还做了一些硬件初始化工作。
4.一灯大师的手与脚
单片机最大的特色就是好玩有趣,当然了,学渣可能觉得不怎么好玩。我记得第一次点亮LED灯时,我激动的一夜无眠。那种感觉无以言表,反正就跟捡了钱一样,打开了新世界,从此走上了不归路,为什么叫不归路呢。等以后啤酒小龙虾准备好,我慢慢道来。
成为一灯大师,是每个电子人的必经之路。你可以啥也不会,但是你得会点灯,不然你咋好意思说你学过单片机。单片机通过Input和Output引脚来与外界交换信息,就像章鱼的触手一样,可以抓取物体,也可以扔物体。我们这里主要谈谈单片机的IO,单片机的IO有时候我们也会直接说成单片机的引脚。单片机的IO内部结构简图如下所示:
学单片机一定要去看用户手册和数据手册,这两个手册比开发板的例程和教科书更有用。通过上图,我们可以知道,上半部分是输出电路结构,下半部分是输入电路结构。单片机内部的上拉和下拉电阻是针对输入电路来说的,输出电路部分是没有上拉下拉电阻的。
在单片机后续学习中,我们会发现一些电路会外置上拉电阻。可是,单片机内部已经有上拉电阻了,为什么还要在外部加上拉电阻呢?因为,我们操作芯片除了读数据,还要写数据。读数据是输入,写数据是输出,单片机输出是没有上拉电阻的。在按键检测时,我们就可以根据需要来设置上拉电阻或者下拉电阻。
我们知道,单片机IO电路有两部分组成,输入和输出电路两部分,它们共用一个输出引脚,也就是说单片机的引脚可以读数据也可以输出数据。通过配置寄存器来设置单片机的IO是输出还是输入,下图是和单片机IO相关的寄存器,了解一下就可以了,知道有这些东西就行。
寄存器每4位对应一个引脚,比如PA0引脚,那么,0-3位就是PA0的配置位,点亮LED灯,属于IO输出功能。这里0-1位,我们可以设置成01,10,11。2-3位,可以设置成00推挽模式。
什么是推挽模式,可以简单理解成驱动能力强,电流比较大,详情可以自行百度:推挽电路原理分析。开漏模式是指输出电路中的P-MOS管被关闭,只有N-MOS可以开启与关闭,N-MOS开启时,输出低电平,关闭时,则为开漏。此时,驱动电路只能输出低电平0,无法输出高电平。要想输出高电平,需要外置上拉电阻。
这里强调一点,单片机的输出开漏模式是可以直接读取数据的,不需要切换到输入模式来读取数据。其原理就是,开漏模式的电平是由外部电路决定的,不受内部输出电路的影响。
在上面的引脚功能配置表里,我们总结了一下。输入模式有三种1)浮空模式,单片机引脚的电平是不确定的,电平由外部电路决定。2)上下拉模式,当向输出寄存器写入1时,为上拉模式,否则,写入0,则为下拉模式。上下拉模式常用于各种外部信号的检测。比如,要检测高电平,那就设置成下拉输入模式。3)模拟输入,检测模拟信号。
输出模式,是可以选择io引脚的电平变化频率的。输入模式没有这个选项,输出模式时,上下拉电阻是禁用的。复用模式是指,io没有连接到输出寄存器,而是连接到了内部其他电路(内部外设,比如定时器,串口等等)。推挽模式,就是常规的输出模式,对应于输入上下拉模式。开漏模式对应于输入浮空模式。开漏模式是一种特殊的输出模式,这种模式下可以直接读输入寄存器来获取io的引脚电平状态。
通过以上知识点的学习后,我们可以正式开始进入点灯环节了,看再多的理论知识,最后也需要实践来检验我们的理解是否正确。我以前都是一边看资料或者看手册一边写程序来验证自己理解的对不对。
标签: