詳解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/zh-tw/n/149732.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZPYD的頭像ZPYD
上一篇 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

發表回復

登錄後才能評論