您的位置:

详解STM32F103C8T6引脚图及功能

一、引脚图及概述

STM32F103C8T6是意法半导体的一款低功耗、高性能32位ARM Cortex-M3单片微控制器。它的引脚图如下所示:

                          +------------------------+
                          | 1                     48 |  
                    GPIOA | PA0                  PA7 | EXTI0
                          | 2                     47 |  
                    GPIOB | PB0                  PB15| TIM3_CH3
                          | 3                     46 |  
                    GPIOC | PC13                 PC15|  
                          | 4                     45 |  
                    GPIOD | PD2                  PD7 |  
                          | 5                     44 |  
                    GPIOE | PE0                  PE15|  
                    ADC12 | --                   --  |  
                    ADC12 | VREF+              VSS  |  
                    ADC12 | --                   --  |  
                          | 6                     43 |  
                    GPIOF | PF0                  PF1 |  
                          | 7                     42 |  
                     OSCO | --                   --  | OSC32_IN
                    OSCMI | --                   --  | OSC32_OUT
                          | 8                     41 |  
                     BOOT | --                   --  |  
                          | 9                     40 |  
                      NRST | --                   --  |  
                          |10                     39 |  
                     VSS2 | --                   --  |  
                          |11                     38 |  
                      VDD | --                   --  |  
                          |12                     37 |  
                    OSC32 | --                   --  |  
                          |13                     36 |  
                    OSC_IN| --                   --  |  
                          |14                     35 |  
                   OSC_OUT| --                   --  |  
                          |15                     34 |  
                       PA8| TIM1_CH1            TIM1_CH1N|
                          |16                     33 |  
                       PA9| USART1_TX           TIM1_CH2  |
                          |17                     32 |  
                      GND2| --                   --  |  
                          |18                     31 |  
                      VDDA| --                   --  |  
                          |19                     30 |  
                       PA10| USART1_RX           TIM1_CH3  |
                    ADC12 | --                   --  |  
                    ADC12 | --                   --  |  
                    ADC12 | --                   --  |  
                          |20                     29 |  
                     PA11 | TIM1_CH4            USART1_CTS |
                          |21                     28 |  
                     PA12 | TIM1_ETR            USART1_RTS |
                          |22                     27 |  
                      PA15| --                  SPI1_NSS |
                    ADC12 | --                  SPI1_MISO|
                    ADC12 | --                  SPI1_MOSI|
                          |23                     26 |  
                       PC14| --                  SPI1_SCK |
                          |24                     25 |  
                       PC13| --                      -- |
                          +------------------------+

从图中可以看出,STM32F103C8T6共有48个引脚,其中16个GPIO口(GPIOA~GPIOE)可用于输入/输出,同时还包括ADC、定时器、UART、SPI等专用功能引脚。

二、GPIO口

GPIO即通用输入输出口,STM32F103C8T6共有16个GPIO口,每个GPIO口都有自己的控制寄存器,可通过寄存器写入控制字来控制GPIO口的状态。GPIO口主要有以下3个方面的功能:

1.输入模式:悬浮输入(默认状态)、上拉输入和下拉输入。

2.输出模式:推挽输出、开漏输出和复用推挽输出。

3.复合功能GPIO:ADC、定时器以及类比DAC等,需要通过复用功能开启。

下面是一个GPIO口的输入模式的例子:

  //使能GPIOA口时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  //初始化GPIOA2口为上拉输入
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);

三、定时器

STM32F103C8T6内置了三个16位的计数器和一 个基本定时器,所有定时器都能够匹配外部模拟或数字信号

下面是一个TIM3初始化的例子:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInitTypeDef TIM_InitStructure;
TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_InitStructure.TIM_Period = 2000-1; //2000个时钟周期为1ms
TIM_InitStructure.TIM_Prescaler = 7200-1; //7200个时钟周期为10ms
TIM_TimeBaseInit(TIM3, &TIM_InitStructure);
TIM_Cmd(TIM3, ENABLE);

四、ADC

STM32F103C8T6内置了一个12位精度的模拟数字转换器(ADC),同时支持多路模拟输入和单通道转换、多通道转换以及连续转换等模式。

下面是一个开启ADC的例子:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入口
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立ADC模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //禁止连续转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE); //开启ADC模块

五、UART

STM32F103C8T6内置3个同步串行通信口(UART),用于与外部设备进行串行通信。其中USART1是配备有硬件流控制的通信口,也是硬件仿真模式使用的调试口,可用于与计算机进行通信完成信息的调试工作。

下面是一个USART1初始化的例子:

USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);

六、SPI

STM32F103C8T6内置2个SPI通信口,支持主从之间的通信。SPI通信一般需要对时序进行控制,因此主机需要掌握SPI通信的时序。

下面是SPI1初始化的例子:

SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);

七、小结

STM32F103C8T6引脚图及功能丰富多样,可以用于多种应用场景。它的GPIO口、定时器、ADC、UART和SPI等模块都是使用时比较常见的硬件,希望以上的例子可以给需要使用的人提供一些参考。