当前位置:文档之家› STM32神舟系列开发板从零入门到精通

STM32神舟系列开发板从零入门到精通

STM32神舟系列开发板从零入门到精通
STM32神舟系列开发板从零入门到精通

第5章 STM32神舟I号快速入门篇2013年1月版本 V1.0 作者:https://www.doczj.com/doc/615812028.html,

STM32神舟ARM系列技术开发板产品目录:

● 神舟51开发板(51+ARM)开发板

● 【神舟I号:STM32F103RBT6 + 2.8"TFT 触摸彩屏】

● 神舟II号:STM32F103VCT6 + 3.2"TFT 触摸彩屏

● 神舟III号:STM32F103ZET6 + 3.2"TFT 触摸彩屏

● 神舟IV号:STM32F107VCT6 + 3.2"TFT 触摸彩屏

● STM32核心板:四层核心板

(STM32F103ZET+207ZGT+407ZGT+407IGT)

● 神舟王103系列(STM32F103ZET核心板)

● 神舟王207系列(STM32F207ZGT核心板)

● 神舟王407系列(STM32F407ZGT/407IGT核心板)

● 神舟王全系列(STM32F103ZET/207ZGT/407ZGT核心板): 全功能底板(支持MP3,以太网,收音机,无线,SRAM,Nor/Nand Flash,鼠标,键盘,红外接收,CAN,示波器,电压表,USB HOST,步进电机,RFID物联网等)

● 神舟51开发板(STC 51单片机+STM32F103C8T6核心板):全功能底板(支持音频播放,无线,鼠标,键盘,红外收发,CAN,温度传感器,直流电机,步进电机,实时时钟,两路485,两路继电器,小喇叭,热敏光敏电阻,RFID物联网等)

目录

第5章 STM32神舟I号快速入门篇 (1)

5.1 理解芯片控制的原理 (3)

5.2 芯片管脚控制LED灯原理图解释 (4)

5.3 STM32相关的芯片手册有哪些?我们如何阅读这些资料 (5)

5.4 STM32芯片各个管脚是怎么控制以及被管理的?(如何阅读芯片手册) (6)

5.5 STM32芯片单个管脚是怎么被控制以及被管理的?(如何阅读芯片寄存器) (9)

5.6 分析一个最简单的例程 (13)

5.6.1 例程硬件原理图说明 (13)

5.6.2 例程main.c源代码(可以直接运行): (13)

5.6.3 例程环境搭建 (16)

5.6.3 实验现象 (22)

5.6.4 例程软件架构和代码分析(只有一个main.c文件) (22)

5.7 例程代码详细说明 (28)

5.7.1 代码的定义和声明如何与芯片内部资源挂钩 (28)

5.7.2 代码如何映射到映射到芯片内部的寄存器 (30)

5.7.3 main函数寄存器级分析(重点) (31)

5.8 库函数与我们这个例程之间的关系 (36)

5.9 其他更多技术资料和技术支持获取渠道 (36)

5.1 理解芯片控制的原理

如果要说做单片机很难吗?其实并不难,用3句话就可以讲明白:

第1句话:芯片管脚不是输入,就是输出。

我们所有的程序,用单片机控制的产品,以及外设,无非就是控制芯片的各个管脚输入或者输出两个状态;例如,芯片发送数据就是输出;芯片驱动一个产品,也是输出;芯片接收数据就是输入;单片机对一个存储芯片写输入,可以理解为单片机与存储芯片连接的管脚输出状态,输出数据到存储芯片的管脚上,而存储芯片此时它的芯片对应管脚被配置成输入,将数据写入到芯片内部。

所以说,芯片管脚不是输入,就是输出,当然,如果你不使用这个管脚,也可以将它配置成某一种中间状态,免得干扰了外界,影响了PCB板上的其他元器件状态。

第2句话:芯片管脚不是高电平,就是低电平。

芯片管脚不是高电平就是低电平两种状态,当然也有第三种,既不高电平也不是低电平的状态,这样的管脚状态表示没有任何内容和数据;无论管脚是输入还是输出,它的目的都是传输数据、传输信息,所以管脚的高电平我们将它表示为“1”,低电平表示“0”,通过0和1这样的数据来传输它想传输的内容,这个就是所谓的二进制。

例如:假如复位芯片管脚是低电平进行复位,我们将该管脚一直拉高为高电平“1”的时候,芯片可以正常工作,如果将管脚拉低至低电平“0”的时候,芯片通过检测这个管脚状态为低电平,芯片内部就会自动进行复位;我们通过控制这个管脚拉高和拉低,从而就可以达到控制芯片的工作;其他的管脚也是同样的道理。

第3句话:传输协议。

什么是传输协议,比如与串口芯片通信,那么就要是串口协议的;如果是I2C 协议的EERPOM,那么就是I2C协议;还有其他一些比如485协议,CAN协议,USB协议,SD卡的SDIO协议…….等等数不胜数。

而这些协议,无非就是按照预先规定的表达方式进行通信,比如举个例子,我约定先连续发4个1,,然后再发4个0,就表示芯片A要开始发数据给芯片B 了,即芯片A通过它的芯片管脚发‘11110000’给到芯片B的时候,那么芯片B 就知道芯片A要给它真正的数据,它就要做好准备工作,准备好之后,芯片B 就会给芯片A一个回应,当芯片A收到芯片B的回应,就正式开始发数据。

这样通信双方之间的协商规定,就构成了协议,经过这么多年,就形成了我们所常见到的串口协议,CAN协议,USB协议(像USB协议又分为USB1.0协议,USB2.0协议,USB3.0协议,版本越高,速度就越快,协议进行优化后,通信效率也变高了)。

不知道大家理解了没有呢?所以总结下来,一个芯片最简单的外设莫过于I/O口的高低电平控制,我们这里将详细讲解一下如何用一个I/O口去控制一个LED灯的亮灭。

5.2 芯片管脚控制LED灯原理图解释

下面有个原理图,这个原理图是用STM32的PB2管脚连LED灯的负极,用正3.3V电源端连LED灯的正极,再串联一个限流电阻限制电流(电阻的作用就是限流、降压;如果线路上电阻很小,那么电压不变的情况下,电流就会变得很大,有可能会烧坏LED灯,所以这里我们串联一个电阻进行降压)降压防止LED 灯被烧掉,这个串联电阻的阻值要计算好,使得在恒定电压的情况下,电流的大小刚好足够驱动LED灯点亮,点亮这个LED灯大概需要10ma~20ma(毫安)的电流。

原理图中STM32的PB2管脚如何控制这个DS3的灯呢?可以看到,PB2输出高电平的时候,LED灯不会亮;只有当PB2输出低电平的时候,LED灯才会点亮。所以我们想用STM32的管脚PB2去驱动DS3这个LED灯亮,只要使得PB2输出低电平就可以,这样就知道如何控制这个LED灯了。

为什么这么接呢?为什么不让PB2管脚接LED的正极,而LED灯的负极去接GND地呢?这样才是最常规的接法不对吗?答案是当然是,但是在这里这样的接法有助于芯片的长久使用,芯片的总体驱动能力是有限的,它可以驱动一个LED灯,但驱动不了100个,1000个。

在这里需要重复上面已经说过的内容,首先我们要知道LED 的发光工作条件,不同的LED 其额定电压和额定电流不同,一般而言,红或绿颜色的LED 的工作电压为1.7V~2.4V,蓝或白颜色的LED 工作电压为2.7~4.2V,直径为3mm LED 的工作电流2mA~10mA,在这里采用绿色的LED;STM32 单片机(如本实验板中所使用的STM32F103RBT芯片)的I/O 口作为输出口时,向外输出电流的能力是25mA左右,勉强是可以点亮一个发光二极管,但是如果我们用

STM32去点亮很多个LED灯的时候,就有可能造成芯片本身输出电流不足(因为芯片能输出的总电流大小是恒定的)。

其次,PB2的这种接法是一种灌电流(要VCC往内输入电流)的方式,这种方式使得STM32的芯片管脚让一个LED灯亮非常轻松,利用灌电流的方式驱动发光二极管是比较常见的一种用法,无论接多少LED,芯片管脚的负荷都非常轻。当然,现今的一些增强型单片机,是采用拉电流输出的,只要单片机的输出电流能力足够强即可,不过接多了也是不可取的,单片机的总体驱动电流是有限的;上图中的电阻用的是1K 阻值主要为了限制电流,让发光二极管的工作电流限定在2mA~10mA。

5.3 STM32相关的芯片手册有哪些?我们如何阅读这些资料

STM32神舟I号开发板的主芯片STM32F103RB芯片相关的资料和例程都可以在ST的官方网站上找到,STM32F103RBT芯片的中文网址为“

https://www.doczj.com/doc/615812028.html,/cn/mcu/product/164487.jsp”。

首先介绍两个最重要的两个文档,芯片手册和参考手册。

1、芯片手册。芯片手册在网页“DATASHEET”那一栏。芯片手册详细介绍了所选择的芯片型号的功能规格,内核型号,运行主频,外设资源以及其性能,芯片封装种类信息以及各种封装的管脚定义,芯片的电气特性,外设的时序要求,订购信息和器件的机械特。这份文档因为芯片型号的不同而不同,比如STM32F103RB和STM32F103ZE和STM32F105以及STM32F107等等,他们的功能外设资源不同,所以芯片手册都不相同。在芯片的选型阶段,这份文档是判断芯片功能和性能是否满足项目需求的关键文档。在原理图阶段这份文档更是尤为重要。后续开发调试阶段这份文档也不可或缺。这份文档将伴随着你从项目开始一直走到项目结束。

2、参考手册。参考手册在网页“REFERENCE MANUALS”那一栏,也称为技术参考手册。这份参考手册是有关如何使用该产品的具体信息,包含各个功能模块的内部结构、所有可能的功能描述、各种工作模式的使用和寄存器配置等详细信息。参考手册不涉及某个具体的芯片,他是将一个系列的芯片。STM32F103RB属于STM32F10x这一大类,所以我们下载的文档名为“RM0008: STM32F101xx, STM32F102xx、STM32F103xx、STM32F105xx 和STM32F107xx,ARM内核32位高性能微控制器”。也就是说无论你在STM32F103RB和STM32F103ZE和STM32F105以及STM32F107等芯片的网页页面下载的参考手册都是相同的。这也注定这份文档介绍的功能资源是STM32F10x这一大类芯片所有功能资源的交集。这份文档包含了USB接口和以太网接口的介绍,但并不表示STM32F103RB包含这些接口。

这两份文档都很重要,相对来说,硬件开发人员更多关注芯片手册,软件开发人员更多关注参考手册。

其次介绍芯片相关的一些文档资料。

1、处理器内核相关文档。STM32F103RB芯片的性能是ARM公司的Cortex-M3。所以如果需要了解内核的资料,可以参考ARM公司的“Cortex?-M3技术参考手册”以及其他Cortex-M3的技术书籍,例如“ARM Cotrex-M3权威指南”等等。

2、ST的应用笔记“APPLICATION NOTES”。充分利用ST网页中的资源,可以加快产品设计调试进度。

3、外设资源相关资料。例如TIM定时器、UART串口以及USB等等。这些接

口的资料可以参考ST网页中的STM32应用文档以及示例程序。由于很多接口都是各自的协议标准,所以可以查阅这些标准协议的相关资料文献,例如I2C、SPI、USB这些都有各自的规范可以查阅。

4、相关外部芯片资料。STM32的接口对外连接了什么器件,就需要查阅相关的文档资料。同样是I2C接口,既可以连接EEPROM也可以连接温度传感器或其他;同样是SPI接口,既可以连接DATA FLASH也可以连接WIFI模块或者触摸屏等等。这些已经不属于STM32的范围了,所以这块资料在STM32的网页一般找不到,或者只能找到对应的参考设计。

5、STM32神舟系列用户手册。

6、https://www.doczj.com/doc/615812028.html,论坛帖子。

7、STM32神舟系列开发板博客:https://www.doczj.com/doc/615812028.html,/u/1989261580

8、STM32神舟系列开发板微博:https://www.doczj.com/doc/615812028.html,/u/1989261580

5.4 STM32芯片各个管脚是怎么控制以及被管理的?(如何阅读芯片手册)

那么我们怎么来访问这些寄存器呢?

如果是通过标准库访问,只要调用相关函数即可。

如果是寄存器操作,首先要得到寄存器的地址,寄存器的地址是芯片厂商一开始就定好了的,固定的不能改变,大家看下图:

寄存器的地址是基址+偏移量的和。基址在芯片数据手册“存储器映像”章节,正如上图那样,比如Port A的基址是’0x4001 0800’;比如Port B的基址是’0x4001 0c00’;比如SPI1的基址是’0x4001 3000’;比如USART3的基址是’0x4000 4800’;以此类推。

从芯片上电后工作正常开始,所有寄存器都会有一个默认数值,保证处理器处于确定的状态。这个初始值正如上图所描述的这样,这个重要内容我们可以在技术参考手册中获得。

现在我们打开参考手册《STM32F10xxx参考手册》,可以看到这是一个524页的参考手册,我们截图看看:

比如我们要访问GPIO管脚PB2,那么首先就要找到端口B的位置,即Port B,我们首先查看文档的目录,找到第7.2节GPIO寄存器描述章节,可以看到从75页开始到77页都是描述GPIO端口的,我们查看7.2.1节查看一下端口配置低寄存器(GPIOx_CRL),这个里的x=A…E表示,GPIOx_CRL可以是GPIOA_CRL、GPIOB_CRL、GPIOC_CRL、GPIOD_CRL、GPIOE_CRL中的任意一个;在这里我只关

心端口B,就可以把它看成GPIOB_CRL:

我们可以找到PortB在内存中的基地址的0x40001 0c00,控制端口B的各个寄存器的偏移地址应该怎么确定呢?可以查看具体的寄存器描述(PortB属于

GPIO端口中的B端口):

可以看到该文档写了’偏移地址:0x00’,这表示GPIOB_CRL这个寄存器的地址等于Port B的位置+偏移地址就可以算出它的地址,即:

GPIOB_CRL寄存器地址:0x40001 0c00(PortB的地址) + 0x00(GPIOx_CRL 的偏移地址) = 0x40001 0c00

我们再看一个地址:

GPIOB_CRL寄存器地址:0x40001 0c00(PortB的地址) + 0x04(GPIOx_CRL 的偏移地址) = 0x40001 0c04

也就是说,当我们访问0x40001 0c04这个地址所指向的内容时,实际上就是在访问GPIOB_CRH这个寄存器了,就这么简单。

5.5 STM32芯片单个管脚是怎么被控制以及被管理的?(如何阅读芯片寄存器)

这里主要是如何去查看CPU芯片单个管脚的寄存器表。

实际上,点亮这个LED灯,只需要使得我们的STM32芯片的PB2管脚输出低电平就可以了,那么如何控制一个PB2管脚的状态呢?

我们来举个例子,实际上STM32的PB2管脚的状态是由STM32芯片内部的一些寄存器来控制的,通过这些寄存器,可以控制将管脚配置成输出或者输入,拉高还是拉低。芯片通过获取寄存器不同的值,对应我们的STM32芯片手册寄存器说明书,就可以知道芯片就相当于获得了不同的命令,获取命令后就开始执行命令,大家可以看下图,还是看这个《STM32F103中文参考手册》524页的文档:

(注意:手册可以从STM32神舟I号开发板的光盘里获得)

可以看到文档的7.2节,注意文档目录红框里的这些寄存器,现在我们就开始仔细来研究一下它们,这是专门描述GPIO寄存器的章节,具体内容大家自己打开文档阅读一下:

我们进入文档,浏览到第75页,我们看其中一个寄存器到底写了些什么:

我们看到如下内容,我们逐个列出来:

1)GPIOx_CRL这个寄存器一共是32个比特,从0-31bit,有32个位

2)GPIOx_CRL寄存器的偏移地址是0x00;表示在GPIO端口的基地址加上这个偏移地址0x00就可以访问到这个寄存器的内容。

3)GPIOx_CRL寄存器的复位值是0x4444 4444总共8个‘4’

4)GPIOx_CRL寄存器其中第0、1位和4、5位和8、9位和12、13位以此类推到28、29每两个位为一个组,叫做MODEy组;主要功能是设置这个管脚是输入模式,还是输出模式(如果是输出模式,还要确认输出速度是10MHz、还是2MHz、还是50MHz)

5)GPIOx_CRL寄存器其中第2、3位和6、7位和10、11位和14、15位以此类推到30、31每两个位为一个组,叫做CNFy组;主要功能是设置具体哪种输入输出的模式;例如如果是管脚输出,那么要确定是通用推挽输出模式,还是开漏输出模式,还是复用功能推挽输出模式,还是复用功能开漏输出模式;如果是管脚输入,是模拟输入模式还是浮空输入模式,还是上拉/下拉输入模式等。

6)其他的寄存器也是这样查看表和状态,我们寄存器复位值是0x4444 4444,十六制的4转换成二进制是0100,即CNF=01,MODE=00,我们

可以查表知道MODE=00表示这个管脚复位后是输入模式,CNF=01表示

是浮空输入模式。

是不是看得有点头晕了,但是没有办法,我们就是通过改变这些寄存器的值来设置芯片管脚的,使得芯片管脚按照寄存器手册里的规定来进行相应的工作;可以是输出或输入,可以是高电平或是低电平(这个是另外一个寄存器来控制,大家可以对应看手册里的寄存器说明),从而达到我们控制一个LED灯亮和灭;

像寄存器GPIOx_CRH、GPIOx_IDR、GPIOx_ODR、GPIOx_BSRR、GPIOx_BRR、GPIOx_LCKR都是同样的分析和阅读方法,我们接下来再来举例子详细说明。

5.6 分析一个最简单的例程

5.6.1 例程硬件原理图说明

现在,知道可以访问处理器所有的寄存器了,我们可以通过改写这些寄存器的值,控制芯片做不同的功能和操作。

下面我们正式写个例程来感受一下.这个例程用C语言来修改这个内存地址的内容,从而控制寄存器,通过寄存器控制STM32芯片的PB2管脚使得一个灯亮和灭的。

原理图如下,上面已经有介绍:

5.6.2 例程main.c源代码(可以直接运行):

以下是main.c的源文件,读者可以直接粘贴编译:

/******************* 此段代码直接拷贝进去可以直接运行开始

****************************/

#define __IO volatile

typedef unsigned int uint32_t;

typedef __IO uint32_t vu32;

typedef unsigned short int uint16_t;

#define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */ #define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */ #define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */ #define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */ #define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */ #define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */ #define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */ #define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */ #define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */ #define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */ #define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */ #define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */ #define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */ #define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */ #define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */ #define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */ #define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */

#define RCC_APB2Periph_AFIO ((uint32_t)0x00000001)

#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004)

#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008)

/************ GPIOB <*************/

typedef struct

{

__IO uint32_t CRL;

__IO uint32_t CRH;

__IO uint32_t IDR;

__IO uint32_t ODR;

__IO uint32_t BSRR;

__IO uint32_t BRR;

__IO uint32_t LCKR;

} GPIO_TypeDef;

typedef struct

{

__IO uint32_t CR;

__IO uint32_t CFGR;

__IO uint32_t CIR; __IO uint32_t APB2RSTR;

__IO uint32_t APB1RSTR;

__IO uint32_t AHBENR;

__IO uint32_t APB2ENR; __IO uint32_t APB1ENR; __IO uint32_t BDCR;

__IO uint32_t CSR;

} RCC_TypeDef;

/********* GPIOB 管脚的内存对应地址 *******/

#define PERIPH_BASE ((uint32_t)0x40000000)

#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)

#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)

#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)

/************ RCC 时钟 <*************/

#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)

#define RCC_BASE (AHBPERIPH_BASE + 0x1000)

#define RCC ((RCC_TypeDef *) RCC_BASE)

/************ https://www.doczj.com/doc/615812028.html, *******/

void Delay(vu32 nCount);

int main(void) //main 是程序入口

{

/* 使能APB2总线的时钟,对GPIO 的端口B 时钟使能 */

RCC->APB2ENR |= RCC_APB2Periph_GPIOB;

/*-- GPIO Mode Configuration 速度,输入或输出 -----------------------*/

/*-- GPIO CRL Configuration 设置IO 端口低8位的模式(输入还是输出)---*/ /*-- GPIO CRH Configuration 设置IO 端口高8位的模式(输入还是输出)---*/ GPIOB->CRL &=

0xFFFFF0FF;

GPIOB->CRL |= 0x00000300;

while (1)

{

GPIOB->BRR = GPIO_Pin_2;

Delay(0x2FFFFF);

GPIOB->BSRR = GPIO_Pin_2;

Delay(0x2FFFFF);

}

}

void Delay(vu32 nCount) //通过不断for循环nCount次,达到延时的目的口

{

for(; nCount != 0; nCount--);

}

/******************* 此段代码直接拷贝进去可以直接运行结束****************************/

5.6.3 例程环境搭建

1.点击桌面UVision4图标,启动软件,如下图。如果是第一次使用的话会打开

一个自带的工程文件,我们可以通过工具栏Project->Close Project选项把它关掉。

2.在工具栏Project->New μVision Project…新建我们的工程文件,我们将新

建的工程文件保存在桌面的“STM32神舟开发板模板工程”(先在电脑桌面上新建一个“STM32神舟开发板模板工程”,在该文件夹里面新建一个Project 文件夹),文件名取为神舟STM32-DEMO(英文DEMO的意思是例子),名字可以随取,点击保存。

3.接下来的窗口是让我们选择公司跟芯片的型号,我们用的是STM32神舟1号

的板子,因为我们的STM32神舟I号用的芯片是ST公司的STM32F103RBT6,有20K SRAM,128K Flash,属于高集成度的芯片。按如下选择即可。

4.接下来的窗口问我们是否需要拷贝STM32的启动代码到工程文件中,这份启动

代码在M3系列中都是适用的,一般情况下我们都点击是,但我们这里用的是ST的库,库文件里面也自带了这一份启动代码,所以为了保持库的完整性,

我们就不需要开发环境为我们自带的启动代码了,稍后我们自己手动添加,这里我们点击否。

5.此时我们的工程新建成功,如下图所示。但我们的工程中还没有任何文件,

接下来我们需要在我们的工程中添加所需文件。

6.可以看到目前工程里只有一个文件:

7.新建一个main.c文件存放在路径STM32神舟I号开发板第1个例程\Project\main.c下,然后按照以下图标操作过程把main.c文件添加到工程里:

这个例程,我们将所有的代码都写到了一个mian.c文件,不涉及到任何库函数,也没有

STM32 开发板的介绍

STM32 开发板的介绍 STM32的开发板硬件资源如下: 1、STM32F103RBT6 TQFP64 FLASH:128K SRAM:20K; 2、MAX232通讯口可用于程序代码下载和调试实验; 3、SD卡接口; 4、RTC后备电池座; 5、两个功能开关; 6、复位连接; 7、两个状态灯; 8、所有I/O输出全部引用; 9、USB接口、可用于USB与MCU通讯实验; 10、标准的TJAG/SWDT仿真下载; 11、BOOT0 BOOT1Q启动模式; 12、电源开关; 13、电源指示灯

STM32开发板硬件详解 1、MCU部分原理图 该开发板采用3.3V工作电压,几个耦合电容使系统更加稳定。系统工作频率8M晶振、时钟频率32.768。 这里STM32的VBAT采用CR1220纽扣电池和VCC3.3混合供电方式,在有外部电源(VCC3.3)的时候,CR1220不给VBAT供电,而在外部电源断开的时候,则由CR1220给VBAT供电。这样,VBAT 总是有电的,以保证RTC的走时以及后备寄存器的内容不丢失。2、启动模式电路图 上图中的BOOT1用于设置STM32的启动方式,其对应启动模式如下表所示

PCB板标志图解如下: 3、TJAG电路 4、LED状态灯原理图 两个LED状态灯,其中LED0接在PA8、LED1接在PD2。 5、SD卡原理图

SD卡我们使用的是SPI1模式通讯,SD卡地SPI接口连接到STM32的SPI1上,SD-CS接在PA3上,MOSI接MCU PA7(MOSI)、SCK 接在MCU PA5(SCK)、MIS0接在MCU PA6(MIS0). 6、按键原理图 KEY1和KEY2用作普通按键输入,分别接在PA13和PA15上,

战舰STM32开发板原理图3(共7份)

Title: Author:Date: Size:Revision:File: Version:ALIENTEK 3.5' TFTLCD Module 2012-10-250 ATOM A43.5TFTLCD.SchDoc V1.2 GND 1VDD 2IOVCC 3CS 4RS 5WR 6RD 7RST 8DB0 9DB110DB211DB312DB413DB514DB615DB716DB817DB918DB1019DB1120DB1221DB1322DB1423DB1524FMARK 25Y-26X-27Y+28X+29LEDK130LEDK231LEDK332LEDK433LEDK534LEDK635LEDA 36GND 37TFTLCD TFT3.5' CS 1RS 2WR 3RD 4RST 5DB06DB17DB28DB39DB410DB511DB612DB713DB814DB915DB1016DB1117DB1218DB1319DB1420DB1521GND 22BL 23VDD3.324VDD3.325GND 26GND 27BL_VDD 28MISO 29MOSI 30T_PEN 31MO 32T_CS 33CLK 34LCD TFT_LCD2 LEDK1LEDK2LEDK3LEDK4T_CLK T_CS T_MISO T_MOSI T_PEN R11100K X+ X-Y+Y- C3 104 C4 104 TVDD TVDD C2 10uF VCC3.3 VCC 1X+2Y+3X-4Y-5GND 6IN37IN48Vref 9VCC 10PEN 11DOUT 12BUSY 13DIN 14CS 15CLK 16 U1 XPT2046 R1/R2:BACKLIGHT VOLTAGE SEL R4 10R Q1 S8050 GND R9 1K BL_CTR R310R LCD_RST LCD_CS LCD_RS LCD_WR LCD_RD LCD_D0LCD_D1LCD_D2LCD_D3LCD_D4LCD_D5LCD_D6LCD_D7LCD_D8LCD_D9 LCD_D10LCD_D11LCD_D12LCD_D13LCD_D14LCD_D15 GND C1104VCC3.3LEDK1LEDK2LEDK3LEDK4LEDK5LEDK6LEDA LEDA R1 0R R20R VCC3.3 BL_VDD BL_VDD R510R R610R R810R R1010R R12 10R LEDK5LEDK6X+X-Y+Y-LCD_RST LCD_CS LCD_RS LCD_WR LCD_RD LCD_D0LCD_D1LCD_D2LCD_D3LCD_D4LCD_D5LCD_D6LCD_D7LCD_D8LCD_D9LCD_D10LCD_D11LCD_D12LCD_D13LCD_D14LCD_D15GND GND VCC3.3BL_CTR GND T_CS T_MISO T_PEN T_MOSI T_CLK VCC3.3T_BUSY T_BUSY R710K A L I E N T E K S T M 3 2 开发板 配套模块开源电子网 https://www.doczj.com/doc/615812028.html,

STM32开发板介绍

STM32最小开发板硬件简介 STM32F103RBT6

STM32开发板简介: STM32开发板硬件资源如下: 1、STM32F103RBT6 TQFP64 FLASH:128K SRAM:20K; 2、MAX232通讯接口可用于程序代码下载和调试实验; 3、SD卡接口; 4、RTC后备电池座; 5、两个功能开关; 6、复位按键; 7、两个状态灯; 8、所有I/O输出全部引出 9、USB接口、可用于USB与MCU通讯实验; 10、标准的TJAG/SWDT仿真下载 11、BOOT0 BOOT1启动模式。 12、电源开关; 13、电源提示灯

STM32开发板硬件详解 本节介绍各部分硬件,让大家对该开发板各部分原理有个理解; STM32F103RBT6作为MCU, STM32F103型号众多,我们选择这款原因看重性比价,作为低端开发板,选择STM32F103RBT6是最佳的选择。128K FLASH 20K SRAM、2个SPI 、3个串口、1个USB 、1个CAN、2个12位ADC、RTC、51个I/O口。 1、MCU 部分原理图 该开发板采用3.3V工作电压,几个耦合电容使系统更加稳定。系统工作频率8M晶振、时钟频率32.768。 这里STM32的VBAT采用CR1220纽扣电池和VCC3.3混合供电的方式,在有外部电源(VCC3.3)的时候,CR1220不给VBAT供电,而在外部电源断开的时候,则由CR1220给VBAT供电。这样,VBAT总是有电的,以保证RTC 的走时以及后备寄存器的内容不丢失。 2、启动模式电路图

上图中中上部的BOOT1用于设置STM32的启动方式,其对应启动模式如下表所示: 我们用串口下载代码,则配置BOOT0为1,BOOT1为0即可,如果想让STM32一按复位键就开始跑代码,则需要配置BOOT0为0,BOOT1随便设置都可以。 P3和P1分别用于PORTA和PORTB的IO口引出,其中P2还有部分用于PORTC 口的引出。PORTA和PORTB都是按顺序排列的,这样设计的目的是为了让大家更方便地与外部设备连接。 PCB板标志图解如下: 3、TJAG电路 这里采用的是标准的JTAG接法,但是STM32还有SWD接口,SWD只需要最少2跟线(SWCLK和SWDIO)就可以下载并调试代码了,这同我们使用串口下载代码差不多,而且速度更快,能调试。所以建议大家在设计产品的时候,可以留出SWD来下载调试代码,而摒弃JTAG。STM32的SWD接口与JTAG是共用的,只要接上JTAG,你就可以使用SWD模式了(其实并不需要JTAG这么多线),JLINKV8和ULINK2都支持SWD

相关主题
文本预览
相关文档 最新文档