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

原创文章,作者:ZPYD,如若转载,请注明出处:https://www.506064.com/n/149732.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZPYDZPYD
上一篇 2024-11-05 16:53
下一篇 2024-11-05 16:53

相关推荐

  • Java和Python哪个功能更好

    对于Java和Python这两种编程语言,究竟哪一种更好?这个问题并没有一个简单的答案。下面我将从多个方面来对Java和Python进行比较,帮助读者了解它们的优势和劣势,以便选择…

    编程 2025-04-29
  • Python每次运行变量加一:实现计数器功能

    Python编程语言中,每次执行程序都需要定义变量,而在实际开发中常常需要对变量进行计数或者累加操作,这时就需要了解如何在Python中实现计数器功能。本文将从以下几个方面详细讲解…

    编程 2025-04-28
  • Python strip()函数的功能和用法用法介绍

    Python的strip()函数用于删除字符串开头和结尾的空格,包括\n、\t等字符。本篇文章将从用法、功能以及与其他函数的比较等多个方面对strip()函数进行详细讲解。 一、基…

    编程 2025-04-28
  • 全能的wpitl实现各种功能的代码示例

    wpitl是一款强大、灵活、易于使用的编程工具,可以实现各种功能。下面将从多个方面对wpitl进行详细的阐述,每个方面都会列举2~3个代码示例。 一、文件操作 1、读取文件 fil…

    编程 2025-04-27
  • SOXER: 提供全面的音频处理功能的命令行工具

    SOXER是一个命令行工具,提供了强大、灵活、全面的音频处理功能。同时,SOXER也是一个跨平台的工具,支持在多个操作系统下使用。在本文中,我们将深入了解SOXER这个工具,并探讨…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论