STM32F103最小系统板引脚定义

STM32F103最小系统原理图

本人初学stm32,若有误解之处,还望大佬们指正改进,感谢!

STM32F103各引脚定义

可前往《STM32F103xCDE_数据手册-英文》的第三章 Pinouts and pin descriptions -> Table 5. High-density STM32F103xx pin definitions
其中有对各个引脚的定义复用说明

在这里插入图片描述

1.VBAT(备用电源)

中文参考手册4.1.2
在这里插入图片描述
我看淘宝的最小系统板有的直接悬空有的直连连接VDD。
stm32VBAT外围电路参考:http://t.cn/A64OGZUw

2.PC13/TAMPER-RTC(IO口/RTC的外接接口)

掉电后还继续运行的定时器,为了RTC外设掉电可以继续运行,必须给STM32芯片通过VBAT引脚接上锂电池.当主电源VDD有效时,由VDD给RTC外设供电.当VDD掉电后,由VBAT给RTC外设供电.

当TAMPER引脚上的信号从’bai0’变成’1’或者从’1’变成’0’(取决于备份控制寄存du器BKP_CR的TPAL位),会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。 然而为了避免丢失侵入事件,侵入检测信号是边沿检测的信号与侵入检测允许位的逻辑与,从而在侵入检测引脚被允许前发生的侵入事件也可以被检测到。
● 当TPAL=0时:如果在启动侵入检测TAMPER引脚前(通过设置TPE位)该引脚已经为高电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现上升沿)。
● 当TPAL=1时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现下降沿)。 设置BKP_CSR寄存器的TPIE位为’1’,当检测到侵入事件时就会产生一个中断。 在一个侵入事件被检测到并被清除后,侵入检测引脚TAMPER应该被禁止。然后,在再次写入备份数据寄存器前重新用TPE位启动侵入检测功能。这样,可以阻止软件在侵入检测引脚上仍然有侵入事件时对备份数据寄存器进行写操作。这相当于对侵入引脚TAMPER进行电平检测。 注: 当VDD电源断开时,侵入检测功能仍然有效。为了避免不必要的复位数据备份寄存器,TAMPER引脚应该在片外连接到正确的电平

看其他博客,发现RTC有很多深入之处(挖个坑先,啥RTC配置、时间调节、RTC中断)
参考:https://blog.csdn.net/linzhihan7410/article/details/52195857

3.PC14/OSC32_IN+PC15/OSC32_OUT(IO口/外部低速晶振)

4.PD0/OSC_IN+PD1/OSC_OUT(IO口/外部高速晶振)

在不作晶振输入时,可以做IO口。OSC接外部高速晶振,用来用来产生的高速外部用户时钟,OSC32接外部低速晶振,用来产生的低速外部用户时钟,RTC要跑要接外部低速晶振;两个外部晶振不接芯片都可以跑,因为有内部时钟源
如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:
1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。
2)对于少于100脚的产品,有2种接法:
2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。
2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出’0’。此方法可以减小功耗并(相对2.1)节省2个外部电阻。
32.768KHZ时钟作用:用于精准计时电路如万年历
通常会选择32.768KHz的晶振,原因在于32768=2^15,而嵌入式芯片分频设置寄存器通常是2的次幂的形式,这样经过15次分频后,就很容易的1HZ的频率。实现精准定时。

7.NRST(复位引脚)

有三种复位方式: 上电复位、手动复位、程序自动复位
通常低电平复位:(51单片机高电平复位,电容电阻位置调换)
上电复位:在上电瞬间,电容充电,RESET出现短暂的低电平(STM32中的NRST有施密特功能。大概在输入电压低于1V的时候将芯片复位。),该低电平持续时间由电阻和电容共同决定,计算方式如下:t = 1.1RC(固定计算公式) 1.1 * 10K * 0.1uF=1.1ms 需求的复位信号持续时间约在1ms左右。
手动复位:按键按下时,RESET和地导通,从而产生一个低电平,实现复位。
STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。

8.VSSA+VDDA(模拟电源输入)

可做ADC电源输入,一般和逻辑电源并联在一起

9.PA0-PA2(IO口/复用功能)

GPIO, USART串口, ADC, 定时器

/****************************************************************************
如我们使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯接收引脚,这个时候就可以把该 GPIO 引脚配置成 USART 串口复用功能,使 USART 可以通过该通讯引脚的接收远端数据。
/****************************************************************************

10.PA3-PB1(IO口/复用功能)

GPIO, USART串口, ADC, SPI, 定时器

11.PB2/BOOT1(IO口/启动设置)

启动时会读这个接口,看其状态决定操作.
用户使用通常都设置成Boot0 Boot1均为0即均为低电平
M3核的器件有3种启动方式,M4的有4种。通过BOOT0,BOOT1的电平进行选择。
在这里插入图片描述
一般情况下如果我们想用用串口下载代码,则必须配置BOOT0为1,+BOOT1为0,而如果想让STM32一按复位键就开始跑代码,则需要配置+BOOT0为0,BOOT1随便设。

12.PB10+PB11

GPIO, USART串口, I2C

13.PA13/JTMS/SWDIO+PA14/JTCKSWCLK

JTAG调试接口(PA15/JTDI、PB3/JTDO/、PB4NJTRST), SWD调试接口

14.PA8-PA12+PB12-PB15

GPIO, USART, USB, CAN, SPI, 定时器
PA9(USART1_TX)接CH340的RXD
PA10(USART1_RX)接CH340的TXD
(参考USB转TTL和一键下载电路原理图)

整了下stm32Proteus的简易图,之前我用51做简单仿真时,其实很多外围电路都不需要,直接就能仿真,不知道stm32是不是一样(估摸是一样),然后就整了个stm32Proteus简易图用来简单仿真

在这里插入图片描述

在这里插入图片描述

参考了许多博客,感谢各位大佬!

  • 14
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用PA5引脚ADC采集电压的程序: ```c #include "stm32f10x.h" void ADC_Configuration(void); int main(void) { ADC_Configuration(); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (1) { // 读取ADC1采集的电压值 uint16_t adc_value = ADC_GetConversionValue(ADC1); // 计算电压值 float voltage = adc_value * 3.3 / 4096; // 处理电压值 // ... // 延时 for (int i = 0; i < 1000000; i++); } } void ADC_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; // 使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置PA5为模拟输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // 使能ADC1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // ADC1配置 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 独立ADC模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 单通道模式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 转换由软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1; // 转换通道数 ADC_Init(ADC1, &ADC_InitStructure); // 配置ADC1通道5 ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_239Cycles5); // 启动ADC1 ADC_Cmd(ADC1, ENABLE); // ADC1校准 ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); } ``` 该程序使用PA5引脚作为ADC输入,将采集到的电压值转换为实际电压并进行处理。注意,该程序需要先进行ADC配置才能正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值