前言和学习过程
寒假开始的任务是学习STM32单片机,刚拿到了微云电子的学习板并加入了微云电子STM32学习群中,下载了一些资料,并知道了该单片机学习板的主芯片为STM32F0系列,十分感谢老师给我学习的机会。 我学习时候,以看老师的学习开发手册和STM32的视频为主,并配上STM32芯片手册,由于自己英语学的不错,偶尔打开Wikipedia英文版和百度百科学习一些新知识。 第一章和第二章 开发板体验和简介 我认为这部分内容已经讲的很明确了,可以作为科普读物,详细地了解板子及其强大的功能,暂时无需太多补充。 第三章 电路原理 电路外设的介绍在开发板手册中已经十分清楚,这里补充一些原理和原因。 3.1 工作原理图的使用 面对这个功能强大却又让人陌生的STM32开发板,可不要望而却步,而要知道STM32开发板有什么功能,以及自己的知识框架中少了什么,然后要明白应该去学习哪些知识才可以攻克它。 知己知彼,百战不殆。其中电路工作原理图,就如同古代行军打仗的地图,你在看完电路图后,就可以知道开发板的引脚及其对应元器件分配,就如图打仗时候,在地图上标出敌军的具体部署,从而有目的的逐一击破。那么这里,我们先找到《STM32+Linux原理图.pdf》,打开看:
图1.STM32芯片外设原理图 上图可谓是重中之重,想要学明白我们的微云电子开发板,该文件必不可少,而在该文件中这张图必不可少,通过它,我们便明白了到底很多外设,例如Led、电源、LCD这些器件到底和谁连一块,这决定了我们之后的程序怎么写,如果不理解这段话,下面会详细再介绍。 3.2硬件载体选择:开发板VS面包板 有些人可能很不解,为什么我们程序一定要那么写?(如:为什么Led一定和PA12有关而不写PA11口呀?)或者说,为什么为什么Led就不能和其它的GPIO口“联谊”,让它们来输出? 由于我们使用的是微云电子的STM32开发板是PCB(Printed Circuit Board)印制电路板,开发板与面包板不同之处在于,开发板已经将所有的器件焊接完成,即电路是已经完全被确定,且一一对应好的;面包板是可以更改的,按照自己的意愿来完成电路的设计,但是电路可能不稳定,而且要很长的时间来搭建。 因此为了学习以及使用方便,我们还是用PCB。既然开发板上已经定死了引脚和外设的关系,在学习该开发板应该多多翻阅《STM32+Linux原理图.pdf》。 3.3 STM32介绍 我们在单片机里使用的是STM32F051C8T6,它是我们开发板的核心,也就是开发板上电子器件的老大,“擒贼先擒王!”。想要了解我们的这款开发板,其实也就是一直在学习STM32,怎么利用其他的小弟器件和它进行配合。 要想详细地了解STM32,首先应该查其对应的DATASHEET,因为这毕竟是它们公司的出品,最最详细地介绍了这款单片机。下面就通过翻译,来介绍下我们微云电子STM32开发板上的这款单片机。 3.3.1 单片机命名法则
图2.STM32命名实例图 每个单片机的名字可不是随便取的,它可是有自己的命名法则的,所以我们一开始得先知道为什么我们的单片机叫STM32F051C8T6。 结合上图翻译一下,来解释一下我们的单片机STM32F051C8T6。 “STM32”是意法半导体的一款基于ARM的32位单片机,32位一听就是高大上,完虐8位的80C51或者是它的同门师弟STM8; “F”指的是一般用途的单片机,就是比较适合民用,这样价格不高,我们才可以消费得起; “051”是子家族的意思,具体没去查,就是它们公司自己的一个分配; “C”指的是有48个引脚的封装类型,所以我们的单片机正好四四方方的每边12个引脚; “8”指的是有64KB的闪存空间,是STM32这几个款式中闪存空间的最大的一款,足够你用了!; “T”指的是,采用了LQFP封装,不用深究; “6”指的是,该款单片机适合在-40℃到+85℃的环境下工作。 而由于STM32F051C8T6上没有对应Options的字母,所以并不知道该选项,但是无关紧要,完全不影响我们的 那么,讲了它名称由来后,我们从应该已经宏观上了解这款单片机了吧,接下来讲讲引脚,进一步理解它!
3.3.2 引脚介绍 首先看一下,我们微云电子的STM32开发板上的单片机STM32F051C8T6俯视图:
图3.开发板STM32单片机俯视图 接着,我们详细地介绍一下我们这款单片机的引脚分配,为大家揭开我们开发板上STM32的神秘面纱!(在这里仅截取微云电子开发板上STM32F051C8T6的相关引脚,原创翻译,部分内容与STM32中文手册略有差异) 表1.STM32F051C8T6的引脚定义表 引脚号 | 引脚名称(复位后的功能) | 引脚类型 | I/O结构 | 复用功能 | 附加功能 | 备注 | 1 | VBAT | S |
| 备用电源 |
| 2 | PC13 | I/O | TC | - | RTC_TAMP1, RTC_TS,RTC_OUT, WKUP2 | (1)(2) | 3 | PC14-OSC32_IN(PC14) | I/O | TC | - | OSC32_IN | (1)(2) | 4 | PC15-OSC32_OUT(PC15) | I/O | TC | - | OSC32_OUT | (1)(2) | 5 | PF0-OSC_IN(PF0) | I/O | FT | - | OSC_IN |
| 6 | PF1-OSC_OUT(PF1) | I/O | FT | - | OSC_OUT |
| 7 | NRST | I/O | RST | 器件复位输入 / 内部复位输出(低电平有效) |
| 8 | VSSA | S |
| 模拟地 |
| 9 | VDDA | S |
| 模拟电源 |
| 10 | PA0 | I/O | TTa | USART2_CTS, TIM2_CH1_ETR,
COMP1_OUT, TSC_G1_IO1 | ADC_IN0, COMP1_
INM6, RTC_TAMP2,
WKUP1 |
| 11 | PA1 | I/O | TTa | USART2_RTS, TIM2_CH2, TSC_
G1_IO2, EVENTOUT | ADC_IN1, COMP1_INP |
| 12 | PA2 | I/O | TTa | USART2_TX, TIM2_CH3, TIM15_
CH1, COMP2_OUT, TSC_G1_IO3 | ADC_IN2, COMP2_
INM6 |
| 13 | PA3 | I/O | TTa | USART2_RX, TIM2_CH4, TIM15_
CH2, TSC_G1_IO4 | ADC_IN3, COMP2_INP |
| 14 | PA4 | I/O | TTa | SPI1_NSS/I2S1_WS, USART2_
CK, TIM14_CH1, TSC_G2_IO1 | ADC_IN4, COMP1_
INM4, COMP2_INM4,
DAC1_OUT |
| 15 | PA5 | I/O | TTa | SPI1_SCK/I2S1_CK, CEC, TIM2_
CH_ETR, TSC_G2_IO2 | ADC_IN5, COMP1_
INM5, COMP2_INM5 |
| 16 | PA6 | I/O | TTa | SPI1_MISO/I2S1_MCK, TIM3_
CH1, TIM1_BKIN, TIM16_CH1,
COMP1_OUT, TSC_G2_IO3,
EVENTOUT | ADC_IN6 |
| 17 | PA7 | I/O | TTa | SPI1_MOSI/I2S1_SD, TIM3_
CH2, TIM14_CH1, TIM1_CH1N,
TIM17_CH1, COMP2_OUT, TSC_
G2_IO4, EVENTOUT | ADC_IN7 |
| 18 | PB0 | I/O | TTa | TIM3_CH3, TIM1_CH2N, TSC_
G3_IO2, EVENTOUT |
ADC_IN8
|
| 19 | PB1 | I/O | TTa | TIM3_CH4, TIM14_CH1, TIM1_
CH3N, TSC_G3_IO3 | ADC_IN9 |
| 20 | PB2 | I/O | FT | TSC_G3_IO4 | - |
| 21 | PB10 | I/O | FT | I2C2_SCL,
CEC,
TIM2_CH3,
TSC_SYNC | - |
| 22 | PB11 | I/O | FT | I2C2_SDA,
TIM2_CH4,
TSC_G6_IO1,
EVENTOUT | - |
| 23 | VSS | S |
| 数字地 |
| 24 | VDD | S |
| 数字电源 |
| 25 | PB12 | I/O | FT | SPI2_NSS, TIM1_BKIN, TSC_
G6_IO2, EVENTOUT | - |
| 26 | PB13 | I/O | FT | SPI2_SCK, TIM1_CH1N, TSC_
G6_IO3 | - |
| 27 | PB14 | I/O | FT | SPI2_MISO, TIM1_CH2N, TIM15_
CH1, TSC_G6_IO | - |
| 28 | PB15 | I/O | FT | SPI2_MOSI, TIM1_CH3N, TIM15_
CH1N, TIM15_CH2 | RTC_REFIN |
| 29 | PA8 | I/O | FT | USART1_CK, TIM1_CH1,
EVENTOUT, MCO | - |
| 30 | PA9 | I/O | FT | USART1_TX,
TIM1_CH2,
TIM15_BKIN,
TSC_G4_IO1 | - |
| 31 | PA10 | I/O | FT | USART1_RX,
TIM1_CH3,
TIM17_BKIN,
TSC_G4_IO2 | - |
| 32 | PA11 | I/O | FT | USART1_CTS,
TIM1_CH4,
COMP1_OUT,
TSC_G4_IO3,
EVENTOUT | - |
| 33 | PA12 | I/O | FT | USART1_RTS,
TIM1_ETR,
COMP2_OUT,
TSC_G4_IO4,
EVENTOUT | - |
| 34 | PA13(SWDIO) | I/O | FT | IR_OUT,
SWDIO | - | (3) | 35 | PF6 | I/O | FTf | I2C2_SCL | - |
| 36 | PF7 | I/O | FTf | I2C2_SDA | - |
| 37 | PA14(SWCLK) | I/O | FT | USART2_TX,
SWCLK | - | (3) | 38 | PA15 | I/O | FT | SPI1_NSS,
I2S1_WS,
USART2_RX,
TIM2_CH1_ETR,
EVENTOUT | - |
| 39 | PB3 | I/O | FT | SPI1_SCK,
I2S1_CK,
TIM2_CH2,
TSC_G5_IO1,
EVENTOUT | - |
| 40 | PB4 | I/O | FT | SPI1_MISO,
I2S1_MCK,
TIM3_CH1,
TSC_G5_IO2,
EVENTOUT | - |
| 41 | PB5 | I/O | FT | SPI1_MOSI,
I2S1_SD,
I2C1_SMBA,
TIM16_BKIN,
TIM3_CH2 | - |
| 42 | PB6 | I/O | FTf | I2C1_SCL,
USART1_TX,
TIM16_CH1N,
TSC_G5_IO3 | - |
| 43 | PB7 | I/O | FTf | I2C1_SDA,
USART1_RX,
TIM17_CH1N,
TSC_G5_IO4 | - |
| 44 | BOOT0 | I | B | Boot memory selection |
| 45 | PB8 | I/O | FTf | I2C1_SCL,
CEC,
TIM16_CH1,
TSC_SYNC | - | (3) | 46 | PB9 | I/O | FTf | I2C1_SDA,
IR_OUT,
TIM17_CH1,
EVENTOUT | - |
| 47 | VSS | S |
| 数字地 |
| 48 | VDD | S |
| 数字电源 |
|
表1中有太多英文缩写,下面就由下表来解释一下,其中的缩写是什么意思: 表2. 引脚表的标记与缩写解释 名称 | 缩写 | 定义 | 引脚名 | 除非在指定的引脚名称下面有括号说明,在复位期间和之后,引脚作为实际使用的功能与引脚名称相同。 | 引脚类型 | S | 电源引脚 |
| I | 仅是输入口 |
| I/O | 输入/输出双向口 | I/O结构 | FT | 5V容忍能力I/O |
| FTf | 5V容忍能力I/O,附加 FM+ 能力 |
| TTa | 3.3V容忍能力的I/O直接连接到ADC |
| TC | 标准3.3VI/O |
| B | 专用BOOT0引脚 |
| RST | 双向复位引脚,并嵌入弱上拉电阻 | 注释 | 除非注释中提到,否则所有I/O口在复位期间和复位后,认为是浮空输入。 | 引脚功能 | 复用功能 | 通过 GPIOx_AFR寄存器选择的功能 |
| 附加功能 | 通过外设寄存器直接选择/使能的功能 |
在表1中,我们看到注释里有些引脚后面带有(1)~(3),这些注释如下: (1).PC13, PC14 和PC15需要通过电源开关来供能,由于电源开关吸收仅3mA大小的电流,所以说,PC13, PC14 和PC15 这三个GPIO口的输出模式受限:速度不可超过2 MHz,并且最大带一个30pF的负载,最关键的是这几个GPIO口禁止作为电流源(比如去点亮LED灯)。 (2).第一次实时时钟域上电后,PC13, PC14 和PC15口可以作为GPIO口来使用。它们的功能取决于实时时钟寄存器,而且这个部分的设置不会受到总复位的影响,详细请参考实时时钟域和实时时钟寄存器的描述手册。 (3) .在复位后,一些引脚被置成SWDIO和SWCLK这些备用功能,而且SWDIO的内部上拉和SWCLK的内部下拉功能被激活打开。
3.3.3 选择微云电子STM32开发板的原因 功能强大:为什么选择微云电子学习STM32单片机?这是因为从前面的介绍,或许我们已经发现STM32的高大上了,80C51可以做的,STM32都能完成,可以理解成STM32就是80C51不断进化,进化进化最终质变,虽然说现在80C51运用范围还是很广的,但是一旦遇到一些大工程,这款8位单片机便死翘翘了。尤其是随着时代的发展,智能家居已经成为显示,虽然还没有真正火起来,但是正如初生的旭日,越来越亮,它的前景可想而知。那时候,我想生产智能家居的单片机要更加高端,而不是80C51。我们知道80C51没有如ADC、内部时钟、温度传感器等等重要的功能,如果说它有的话,那就是外接了上去,这样浪费时间还浪费钱,多不划算!但是我们强大的STM32都已经给你备齐,请君使用!
|