当前位置:首页 > 技术学院 > 技术前线
[导读]STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。除了被我们熟知的STM32,ST公司还有SPC5X系列、STM8系列等,具体参数如下:

内核 Cortex-M3

Flash 64K x 8bit

SRAM 20K x 8bit

GPIO 37个GPIO,分别为PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1

ADC 2个12bit ADC合计12路通道(外部通道:PA0到PA7+PB0到PB1,内部通道:)

Timers

4个16bit定时器/计数器,分别为TIM1、TIM2、TIM3、TIM4

TM1带死区插入,常用于产生PWM控制电机

2个看门狗定时器(独立看门狗IWDG、窗口看门狗WWDG)

1个24bit向下计数的滴答定时器systick

工作电压、温度 2V~3.6V、-40°C ~ 85°C

通信串口

2*IIC,2*SPI,3*USART,1*CAN

系统时钟 内部8MHz时钟HSI最高可倍频到64MHz,外部8MHz时钟HSE最高可倍频到72MHz

ARM公司在ARM11以后改用Cortex命名,并分成A、R和M三类,M系列有M0、M0+、M3、M4、M7。 Cortex-M3是ARM公司推出的基于ARMv7架构的MCU内核,ST公司在此内核的基础上完成了USART、DMA、GPIO等外围电路的设计。在M系列不同内核开发下的STM32,大致可分成低功耗系列、主流系列、高性能系列3个部分,其具体信息如下图所示:

相同系列的内核一般相同,如F1系列都采用Cortex-M3内核开发,但根据Flash大小不同可将STM32分成小容量产品(<64K)、中等容量产品(介于64K-128K)、大容量产品3个部分,各部分容量产品在使用标准库SPL开发时需要使用不同的启动文件并在预编译处做好修改,其具体信息如下图所示:

STM32F103C8T6整个系统结构可以分为由ARM公司设计的Cortex-M3内核和ST公司在此基础上优化的总线矩阵、DMA(Direct Memory Access,直接内存读取)、AHB、APB1以及APB2上挂载的外设等两个部分,详细结构如下图所示:

Cortex-M3摒弃了冯· 诺依曼结构(普林斯顿结构),采用了将指令存储和数据存储分开的 的哈佛结构(Harvard Architecture ),这样一来Cortex-M3同时拥有了独立的32-bit指令总线和32-bit数据总线,数据访问将不再占用指令总线,同时读取指令和数据后提升了MCU运行速度。冯诺依曼和哈弗结构的宏观对比如下图所示:

Cortex-M3是一个 32 位处理器内核,正因如此,STM32才被称作为32-bit微控制器,他拥有32条地址总线,也就是说最大寻址空间为。此外,Cortex-M3的寄存器是32 位的,存储器接口也是 32 位的,其详细结构如下图所示:

二、最小系统板

或许大家有经常听起过最小系统板这个词儿,那么什么是最小系统板呢?其实最小系统板就是一个最精简的电路,精简到只能维持MCU的最基本的正常工作。最小系统一般由外部复位电路、外部时钟电路以及MCU本体构成,除此之外没有其他诸如蓝牙、外置EEPROM、时钟芯片DS1302、SPI接口显示屏等外接设备。(注:STM32支持内部时钟和上电复位,但从传统意义上讲最小系统就是由外部复位电路、外部时钟电路以及MCU本体构成。)我在淘宝上买了一块STM32F103C8T6的最小系统板,板子的设计很精致。喏,它长这个样子:

如果你对最小系统仍一知半解,那你看看下面这个正点原子开发的开发板就能够明白,最小系统是真的精简到不能再精简了。

其实淘宝买来的最小系统板和10块钱包邮的那个蓝色最小系统板区别不大,只是将一些引脚引出好插诸如显示屏类的外设。板子设计的很巧妙,所有引脚都引出来了,同时预留四个接口方便接入显示屏等设备,预留了SWD调试接口,可以使用ST-LINK下载程序与仿真。

跟STC89C52RC单片机不一样的是,STM32F103C8T6的GPIO有8种模式,其中包含上拉、下拉输入模式,所以外接按钮时可不设计上下拉电阻。根据他的原理图显示:按键KEY0一端接到3.3V的VCC,一端接到PA0引脚。发光二极管LED0一端也同样经1KΩ电阻接到3.3V的VCC,另一端则接到PC13上。因此,想要让二极管发光的话需要让PC13输出低电平。STM32最大工作电压3.6V,使用了LDO(低压差线性稳压器)将输入电压VIN降到3.3v给微控制器供电。3.3V和GND之间的4个0.1uf的旁路电容(去除高频交流信号)接到了芯片的4个VDD和4个VSS上(WHAT?芯片为啥整四个VDD和四个VSS?我猜应该是增强供电能力,保证供电的可靠性)。

三、命名规则

我在网上找到了STM32F103中文手册,单片机命名原理如下图所示:

四、引脚排布&引脚复用

根据命名规则可知,STM32F103C8T6中的C代表着这款芯片有48个引脚,其引脚排布如下图所示:

STM32微控制器有着丰富的功能,仅靠48个引脚是不够分配所有功能的,所以有的引脚可以实现好几种功能,这就叫引脚复用。一般而言,大部分引脚的第一功能是GPIO(通用输入输出口)。但值得注意的是:PA13、PA14、P15、PB3、PB4、PC14、PC15、PD0、PD1的默认功能并不是GPIO,使用时需要开启AFIO时钟,注意一下这一点。B站某UP制作了一个直观的图片,如下图所示:

图片来源:公众号"电子开发学习"

官方手册提供的STM32F103系列微控制器引脚的默认功能如下图所示:

五、程序下载

STM32单片机支持3种程序下载方式,根据原理不同可分为ISP串口下载(使用USB-TTL接PA9、PA10)、SWD下载(使用ST-LINK接PA13、PA14)、JTAG下载(使用JLINK接PA13、PA14、PA15、PB3、PB4)。

1.ISP下载

ISP的全程是In-System Programming,在线系统编程的意思。STM32单片机一般可通过UART1引脚进行程序烧录,烧录的时候需要配合BOOT0、BOOT1接地与否来实现。BOOT0、BOOT1可以组合出四种状态,不同位置的含义如下图所示,其中X是无关项。

使用ISP串口下载前,将单片机上电之前需要先用跳线帽把BOOT0短接到1的位置,BOOT1短接到0的位置,即系统存储器模式,然后才能通过串口下载程序。ISP串口下载完成后断电,在单片机上电之前需要先用跳线帽把BOOT0短接到0的位置,即主闪存存储器模式。

由于单片机使用的TTL电平通信协议,与电脑的USB口进行串口通信时需要使用转串口芯片,常见的有CH340系列(如CH340N)、FT232、PL2303等等,下图以CH340T为例。

下载器GND与单片机GND相连(连一个就行),下载器3.3V与单片机3.3V相连(或者下载器5V与单片机VIN相连)、下载器RXD与单片机PA9(U1TX)相连,下载器TXD与单片机PA10(U1RX)相连。

了解接线后,可以尝试编译下载。下载软件有很多,ST官方出了Flash Loader Demonstrator软件用于程序下载,国内也有一款FLYMCU的下载软件。

Flash Loader Demonstrator

2.SWD下载

使用SWD接口下载只需要连接3.3V(如果烧录程序的板子自带供电的话3.3V引脚也不用连)、GND、SWDIO(PA13)、 SWCLK(PA14)、RST(非必要连线),可以从淘宝购买十几块的ST-LINK下载器(这种U盘形状的其实不是ST公司出品的,但是烧录了他们的固件,也是可以用滴)。使用SWD接口除了可以烧录程序外,还可以实现在线仿真(debug),仿真过程可以监视寄存器等数据,非常适合软件开发(找问题)。值得注意的是,ST-LINK/V2只支持给自家的STM32和STM8烧录程序,不支持为其他公司的单片机烧录程序(即使同样搭载Cortex-M3内核)。

ST-LINK/V2

3.JTAG下载

JTAG接口需要使用TMS(模式选择)、TCK(时钟)、TDI(数据输入)、TDO(数据输出)、nTRST(复位,非必要),对应到STM32F103C8T6上就是PA13(TMS)、PA14(TCK)、PA15(TDI)、PB3(TDO)、PB4(nTRST)引脚,这些引脚第一功能就是JTAG接口,这就是上面所说的为什么这些引脚不能简单的当GPIO用。采用JTAG下载时可以使用J-LINK下载器(正版SEGGER的J-LINK价格比较昂贵,国内仿制的建议买V9版本以上),也可以使用ST公司原厂或国内仿制的带JTAG接口的ST-LINK/V2(如正点原子推出的,不过还是好贵,呜呜呜)。不过JTAG能实现的功能SWD一般也能实现,我比较懒,一般不使用这种下载接口。

J-LINK

ST-LINK/V2

如果我们不需要使用JTAG下载,但GPIO资源紧张或PCB设计时已经使用了这些第一功能为JTAG的引脚,那么我们就需要关闭JTAG。比如说我要使用GPIOA15作为GPIO口,那么代码层面需要这样实现:

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能PORTA时钟

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);// 关闭JTAG但使能SWD

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PA15

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO

详细关闭方法:见另一位博主的《STM32 JTAG调试》

六、RTT

RTT的全称是Real Time Transfer,翻译过来就是实时传输。为什么给大家介绍这个呢,上面有讲到J-LINK、ST-LINK等可以下载程序,也可以在线仿真。那么问题来了,他们直接支持串口通信嘛?答案是不可以!!!不过别慌,针对这个问题SEGGER公司推出了共享内存技术,这个功能可以省去外接使用USART进行串口数据测试,灰常方便。不过由于RTT是SEGGER公司推出的,所以这个是需要使用J-LINK V8版本及以上的调试器的,如果不差钱的话,可以优先考虑J-LINK。RTT支持所有搭载ARM Cortex-M0/M0+/M1/M3/M4/M7/M23/M33内核的MCU,不局限于STM32。

SEGGER官网

不过使用RTT功能是需要往工程文件里添加SEGGER提供的源代码的,官网安装包:" data-link-title="<官网下载>"><官网下载>,详细的安装与使用教程见《硬汉哥分享的资料》。

导入源代码后可以在程序中使用以下函数,这些函数根据描述看很容易知道他的作用:

函数名 描述

SEGGER_RTT_Read() Read data from an input buffer.

SEGGER_RTT_Write() Write data to an output buffer.

SEGGER_RTT_WriteString() Write a zero-terminated string to an output buffer.

SEGGER_RTT_printf() Write a formatted string to an output buffer.

SEGGER_RTT_GetKey() Get one character from input buffer 0.

SEGGER_RTT_HasKey() Check if a character is available in input buffer 0.

SEGGER_RTT_WaitKey() Wait for a character to be available in input buffer 0 and get it.

SEGGER_RTT_ConfigUpBuffer() Configure an up (output) buffer.

SEGGER_RTT_ConfigDownBuffer() Configure a down (input) buffer.

SEGGER_RTT_Init() Initialize RTT Control Block structure when using RAM only targets.

SEGGER_RTT_SetTerminal() Set the "virtual" Terminal to use for output on channel 0 via Write and WriteString.

SEGGER_RTT_TerminalOut() Send a zero-terminated string via a "virtual" terminal.

最后,使用RTT需要在电脑上安装J-Link RTT Viewer、J-Link RTT Client、J-Link RTT Logger,这3个终端可以选择自己喜欢的安装使用。

七、RTOS

RTOS(Real-time operating system)是实时操作系统的总称,目前市面上有freeRTOS、RT-Thread、UCOS-III等多种实时操作系统,到了STM32这种复杂而强大的硬件层面,程序员将不再仅仅拿它当传统的MCU来跑裸机程序(裸机是指没有用上RTOS的程序),而是开始考虑程序的协调性和并行多任务(并不是真正意义上的并行,因为单核同一时间只能处理一件事情)。RTOS是一个有趣的东西,如果大家感兴趣我后期会考虑更新一篇有关RTOS的文章,大家目前可以去freeRTOS官网看看或者阅读其他作者的文章。

八、官网原文介绍

The STM32F103xx medium-density performance line family incorporates the high-performance ARM®Cortex®-M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses. All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN.

The devices operate from a 2.0 to 3.6 V power supply. They are available in both the –40 to +85 °C temperature range and the –40 to +105 °C extended temperature range. A comprehensive set of power-saving mode allows the design of low-power applications.

The STM32F103xx medium-density performance line family includes devices in six different package types: from 36 pins to 100 pins. Depending on the device chosen, different sets of peripherals are included, the description below gives an overview of the complete range of peripherals proposed in this family.

These features make the STM32F103xx medium-density performance line microcontroller family suitable for a wide range of applications such as motor drives, application control, medical and handheld equipment, PC and gaming peripherals, GPS platforms, industrial applications, PLCs, inverters, printers, scanners, alarm systems, video intercoms, and HVACs.

主要特性

ARM®32-bit Cortex®-M3 CPU Core

72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access

Single-cycle multiplication and hardware division

Memories

64 or 128 Kbytes of Flash memory

20 Kbytes of SRAM

Clock, reset and supply management

2.0 to 3.6 V application supply and I/Os

POR, PDR, and programmable voltage detector (PVD)

4-to-16 MHz crystal oscillator

Internal 8 MHz factory-trimmed RC

Internal 40 kHz RC

PLL for CPU clock

32 kHz oscillator for RTC with calibration

Low-power

Sleep, Stop and Standby modes

VBAT supply for RTC and backup registers

2 x 12-bit, 1 μs A/D converters (up to 16 channels)

Conversion range: 0 to 3.6 V

Dual-sample and hold capability

Temperature sensor

DMA

7-channel DMA controller

Peripherals supported: timers, ADC, SPIs, I2Cs and USARTs

Up to 80 fast I/O ports

26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant

Debug mode

Serial wire debug (SWD) & JTAG interfaces

7 timers

Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input

16-bit, motor control PWM timer with dead-time generation and emergency stop

2 watchdog timers (Independent and Window)

SysTick timer 24-bit downcounter

Up to 9 communication interfaces

Up to 2 x I2C interfaces (SMBus/PMBus)

Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)

Up to 2 SPIs (18 Mbit/s)

CAN interface (2.0B Active)

USB 2.0 full-speed interface

CRC calculation unit, 96-bit unique ID

Packages are ECOPACK®

九、文章小结

STM32F103C8T6单片机采用LQFP48封装设计,芯片一共引出44只引脚,其中A口有A0-A15共16个引脚,B口有B0-B15共16个引脚,C口有C13-C15共3个引脚,D口有D0-D1共两个引脚。值得注意的是最小核心板C14和C15接了32.768K晶振,D0和D1接了8MHz晶振,一般不要用做IO口。如果实在要用只能去掉外部晶振电路(使用HSI、LSI),通过重映射和配置AFIO_MAPR寄存器实现。

欲知详情,请下载word文档 下载文档
换一批
延伸阅读
周鸿祎评互联网大佬编程能力:我可以排前三!

今天是10月24日,也是“程序员节”,在互联网程序圈出身的大佬们,谁的编程能力最高?对此,360创始人周鸿祎给出了自己的看法。周鸿祎表示:自己认识的程序员中,雷军、求伯君是非常出色的;马化腾、丁磊自己也写程序,但他们是更...

关键字: 互联网 编程
硅谷Altos Labs的新冒险:通过细胞重编程让人类寿命延长50年

在PaloAlto的洛斯阿多斯山(LosAltosHills)有一幢大楼,它属于大富豪尤里·米尔纳(YuriMilner)。去年10月,一群科学家来到大楼。干什么呢?这群科学家参加为期2天的会议,还有许多人通过视频方式参...

关键字: os Lab 编程
深入理解嵌入式中重要的编程模型

大家好,我是ZhengN。今天我们看一看业界一些著名的编程模型。背景模型是对事物共性的抽象,编程模型就是对编程的共性的抽象。什么是编程的共性呢?最重要的共性就是:程序设计时,代码的抽象方式、组织方式或复用方式。编程模型主...

关键字: 模型 编程
C   编程习惯与编程要点

以良好的方式编写Cclass假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。①Header(头文件)中的防卫式声明complex.h:#ifndef__COMPLEX__#define__...

关键字: 编程

51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之...

关键字: Atmel Intel 51单片机 编程

问:人工智能(AI)的分支有什么?答:这里有一个列表,但肯定缺少某些分支,因为目前没有人能确定。其中一些可能会被视为概念或主题,而不是完整的分支。逻辑AI 一个程序对于它必须起作用的具体情况事实世界的大体了

关键字: 人工智能 AI BSP 编程

21ic讯 Portland Group&reg;宣布一项产品开发计划:将其具有OpenACC功能的PGI Accelerator&trade;编译器技术延伸至基于英特尔集成众核(MIC)架构的Inte...

关键字: 英特尔 协处理器 OPENACC 编程

据《每日电讯报》近日报道,英国73岁的比尔&middot;布罗德自两年前中风不能说话,现在得益于谢菲尔德大学研制的“会说话”手套的帮助,可以将其手势解释成文字,与外界进行简单有效的沟通。据...

关键字: 电脑 计算机 RDQUO 编程
影像测量仪使用中需要注意哪些事项?

影像测量仪属于高精度测量仪器,因此要想获得精确的测量结果,就要避免测量过程中的差错。正确使用影像测量仪才能保证数据的精确。影像测量仪使用中需要注意哪些事项?1、需要选择适当的工件固定方法和适当的工件方向

关键字: 照明 测量仪 影像 编程

PGI将OpenACC技术扩展至英特尔Xeon Phi协处理器

关键字: 英特尔 协处理器 OPENACC 编程

编辑精选

技术子站

##########
<big id='WVbho'><i></i></big><marquee id='Xodx'><sup></sup></marquee>
<q id='fmdpO'><thead></thead></q>
      <strike id='akyrjXjK'><ins></ins></strike><basefont id='VoxN'><del></del></basefont>
      <kbd></kbd>
      <nobr></nobr><q id='BhvSfh'><strong></strong></q><strike id='DCqXIX'><samp></samp></strike><strike id='gFTeaT'><legend></legend></strike>
      <acronym id='JqfB'><samp></samp></acronym><optgroup id='AND'><font></font></optgroup>
        <var id='epvevfJ'><kbd></kbd></var>
          <comment id='GbN'><u></u></comment><sup id='BjVWai'><kbd></kbd></sup><samp id='SLVbIbFi'><del></del></samp>