串口接收与转发

发布时间 2023-12-28 11:47:32作者: Sichg

STM32F107的内核是ARM Cortex-M3,主频是72MHz. RAM是20K的SRAM,ROM是64K的FLASH。供电范围是2.0~3.6V,标准是3.3V.

STM32是ST公司基于ARM公司生产的Cortex-M内核这个MCU根据自身需要完善外围电路所开发的32位单片机。

ARM生产的内核有Cortex-A系列,Application,手机领域&苹果基于ARM架构的M1芯片。Cortex-R系列是实时性较高的场景,Cortex-M系列是MCU领域。

应用STM32的过程本质上是:学习STM32的外设,通过程序配置外设,从而完成我们想要的功能。

(外设,Peripheral,片上资源)

位于Cortex-M3内核里面的外设是NVIC和SysTick.(NVIC中断,SysTick系统定时器)

NVIC,管理中断。

SysTick,给操作系统提供定时服务,即提供定时进行任务切换的功能。也可以用来实现delay函数。

 并不是每个型号都拥有所有外设。具体的需要查看对应的数据手册。

 命名规则:引脚数、闪存容量、封装。

芯片的系统结构

 要知道自己需要用的外设挂载在哪个总线上。

DMA:举例外设ADC模数转换,配置为连续模式,1ms转换一次,转换完的数据必须转运出来,否则数据就会被覆盖丢失。如果让CPU处理,就每隔1ms要转运一次数据,效率低。DMA就像小秘书,具备数据搬运的工作权限,DMA通过DMA总线连接到总线矩阵上,拥有和CPU一样的总线控制权,用于访问其余外设。当其余外设需要DMA搬运数据时,外设就会通过请求线发送DMA请求。随后DMA就会获得总线控制权,访问并且转运数据。整个过程不需要CPU的参与,CPU可以专心处理其他工作。

芯片的引脚定义

 STM32F107VCT6(100脚,256Kb的FLASH)

 引脚编号:小黑点左边的是1号引脚,随后逆时针递增。

 

 

控制芯片工作:引脚定义和时序图。

类型:S代表电源,I代表输入,O代表输出,IO代表输入输出。

IO口电平代表IO口能容忍的电压。FT代表可以tolerate 5V.其余只能3.3V。如果对于只能容忍3.3V的引脚,只有5V的电压,就需要加装电平转换电路。

主功能是上电后默认的功能。默认复用功能是IO口上同时连接的外设功能引脚。在IO配置中指定是GPIO还是AFIO。

重定义:如果有两个功能同时复用在一个IO口上,而确实需要用到这两个功能,那么就需要将其中一个复用功能重映射在其他端口上。(重映射的端口必须满足引脚定义表格所提供的重定义功能)

 STM32F107VCT6的引脚简要说明:

 VBAT,备用电池供电引脚,在这个引脚可以接一个3V的电池。当系统电源断电,备用电池可以给内部的RTC时钟和备份寄存器提供电源。

TAMPER,侵入检测,用于保障数据安全。如果产品的安全性比较高,可以在外壳加一些防拆的触点接在电路引脚上,强拆会导致触点接触断开,引起的电平变化会触发STM32的侵入检测,清空数据以保证安全。

RTC,输出RTC校准时钟,RTC闹钟脉冲或者秒脉冲。

IO口,根据程序输出或读取高低电平。

OSC32_IN\OSC_OUT,接32.768KHz的RTC晶振。

OSC_IN\OSC_OUT,系统的主晶振,一般是8MHz。(芯片内部锁相环可以对这个8MH倍频最终产生72MHz作为系统主时钟)

NRST,低电平复位。

VSSA\VDDA,表示内部模拟部分的电源,比如ADC、RC振荡器等。VSS是负极,接GND;VDD是正极,接3.3V。

WKUP,是IO口的默认复用功能,用于唤醒处于待机模式的STM32.

BOOT,是IO口的第二主功能,用于配置启动模式。优先使用主功能只有IO口的引脚,以免不必要的配置。

VSS_1\VDD_1,VSS_2\VDD_2,VSS_3\VDD_3,是系统的主电源口,STM32内部采用了分区供电的方式,供电口比较多,使用时把VDD都接GND,VSS都接上3.3V就行。

另有一些IO口的主功能是调试端口。调试分SWD和JTAG两种调试方式,SWD是两根线,分别是SWDIO和SWCLK,调试方式是STLink;JTAG是五根线,分别是JTMS、JTCK、JTDI、JTDO、NJTRST,调试方式是JLink. 用SWD方式的时候,未被用到的另外三个端口是需要在程序中配置为普通IO口的,不配置的话是不会用作IO口的。

BOOT启动配置

两根引脚:BOOT0和BOOT1。作用是指定程序开始运行的位置。一般程序都是在FLASH程序存储器开始执行,但经BOOT启动配置可以让程序在别的地方开始执行,实现需要的特殊功能。在STM32F10xxx中,可以配置三种不同的启动模式:1. BOOT1为未定态X,BOOT0为低电平0,启动模式就是主闪存存储器,即配置主闪存存储器为启动区域;2. BOOT1为低电平0,BOOT0为高电平1,启动模式为系统存储器;3.BOOT1为高电平1,BOOT0为高电平1,启动模式为内置SRAM. 其中模式1是最常用的。模式2应用于串口下载程序,系统存储器中是一段BootLoader程序,用于接收串口的数据,刷新到主闪存中。串口下载模式的应用场景是,如果引脚中的调试端口全部配置为IO口,不能从引脚下载程序,就需要用串口的方式下载程序。如果没有STLink也没有JLink,就可以用串口下载程序。模式3主要用于程序调试,应用场景相对较少。值得注意的是,每次进行BOOT配置是需要重启的。这是由于BOOT引脚的值在SYSCLK的第四个时钟被锁存,其后无关。(对应到引脚是指:与BOOT有关的引脚只在SYSCLK的第四个时钟之前作为BOOT使用,其余时候都是作为IO口使用)

要想让STM32正常工作,首先就需要把电源和最小系统部分的电路连接好。

STM32的最小系统板

1. STM32及供电部分:3个分区供电的主电源和模拟部分电源都连接供电引脚。3V3和GND之间会接一个滤波电容以确保稳定供电。(遇到供电习惯性加几个滤波电容是好习惯。)对于需要用到TC,Real Time Clock 和备份寄存器的情况,要接备用电池的VBAT,选用一个3V的纽扣电池,正极接VBAT,负极接GND;不需要VBAT可以直接悬空。

2. 晶振:STM32的主晶振一般都是8MHz,经过内部锁相环倍频,得到72MHz的主频。另外还需要接20pF的启震电容,电容的另一端接地。

3. 如果需要RTC功能,就还需要一个32.768KHz的晶振,即OSC320,之所以是32.768KHz,是由于32768是2的15次方。内部RTC经过2的15次方分频生成1s的时间信号。

4. 复位电路:1个10K电阻和0.1uF电容,用来给单片机提供NRST复位信号。复位电路在上电的瞬间,电容是没有电的,电源通过电阻开始向电容充电,此时电容呈现的是短路状态,给出的NRST就是低电平。当电容逐渐充满电,电容就相当于断电,NRST被电拉为高电平。复位电路在上电瞬间的波形就是先低电平、然后再逐渐高电平。复位电路在电容左边并联一个按键,提供手动复位的功能,按下按键电容被放电,手动生成URST的低电平,单片机复位;按键松手后,NRST回归为高电平,单片机工作。

 

 

 

 

——————20231228