一、引脚图及概述
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等模块都是使用时比较常见的硬件,希望以上的例子可以给需要使用的人提供一些参考。