一种基于STM32的最小系统及串口通信的实现

发布者:sedsedq最新更新时间:2023-09-01 来源: elecfans关键字:STM32  最小系统  串口通信 手机看文章 扫描二维码
随时随地手机看文章

STM32是意法半导体(ST)推出的32位RISC(精简指令集计算机)微控制器系列产品,采用高性能的ARMCortex-M3内核,工作频率为72MHz,内置高速存储器(128K字节的闪存和20K字节的SRAM)。本文介绍STM32F103增强型微处理器的最小系统,实现其串口通信的设计调试。


1、STM32的最小系统

STM32微处理器不能独立工作,必须提供外围相关电路,构成STM32最小系统。包括3.3V电源、8MHz晶振时钟、复位电路、数字和模拟间的去耦电路、调试接口、串行通信接口等电路。最小系统原理图如图1所示。

一种基于STM32的最小系统及串口通信的实现

图1  S TM32最小系统原理图

1.1、电源模块与外部晶振

STM32F103C8T6内嵌8MHz高速晶体振荡器,也可外部时钟供给,本系统采用8MHz外部晶振供给。

STM32F103C8T6的供电电压范围为2.0~3.6V。电源模块是电路关键的一部分,是整个系统工作的基础。因此,电源设计过程中需要考虑以下因素:①输入电压、电流;②输出的电压、电流和功率;③电磁兼容和电磁干扰等。

1.1.1、电源供电设计

最小系统供电电源为12V直流电源供电,通过LM2576S-5.0单元电路,将电压稳定到+5V。LM2576系列芯片是单片集成电路,能提供降压开关稳压器的各种功能,能驱动3A的负载,有优异的线性和负载调整能力,在指定输入电压和输出负载条件下保证输出电压的±4%误差。LM2576的效率比流行的三段线性稳压器要高的多,是理想的替代。用DL4003串接到电源正端,为系统提供电源反接保护。+5V电压通过三端稳压芯片ASM1117-3.3将电压转换成+3.3V,D3作为电源指示灯,为主控芯片STM32F103C8T6、串口通信电路和其他外围芯片供电。电源供电原理如图2所示。

一种基于STM32的最小系统及串口通信的实现

图2  电源供电原理

1.1.2、电源抗干扰设计

电源电压转换过程中需要进行滤波处理,+12V转+5V的电路中,需要在+12V输入端加入47μF/50V的电解电容,+5V输出端加入1000μF/25V的电解电容,IN5822起到续流作用;+5V转3.3V电路中,在+5V输入端和+3.3V输出端需要各加入100μF/10V的钽电容。


电路中存在模拟和数字电源,需要加入电感和电容组成去耦电路。STM32中有3组VDD/VSS管脚,有1组VDDA/VSSA管脚。尽管所有的VDD和所有VSS在内部相连,在芯片外部仍然需要连接所有的VDD和VSS。由于导线较细,内部连接负载能力较差,抗干扰的能力也较差,如果漏接VDD/VSS,容易造成线路损坏,同时抗干扰能力也会下降。因此每对VDD与VSS都必须在尽可能靠近芯片处分别放置一个100nF的高频瓷介电容,在靠近VDD3和VSS3的地方放置一个4.7μF的瓷介电容。VDDA为所有的模拟电路部分供电,包括ADC模块、复位电路等,即使不使用ADC功能,也需要连接VDDA。建议VDD和VDDA使用同一个电源供电。VDD与VDDA之间的电压差不能超300mV。VDD与VDDA应该同时上电或调电。模拟电源与数字电源隔离去耦电路如图3所示。

一种基于STM32的最小系统及串口通信的实现

图3  模拟电源与数字电源隔离去耦电路

1.2、复位电路

复位电路为低电平复位、上电复位。

1.3、启动模式

在STM32F103C8T6中,提供了BOOT0和BOOT1两个管脚用于三种启动模式选择。本系统采用从用户闪存启动。三种启动模式对应的存储介质均是芯片内置的,它们是:

1)用户闪存:即芯片内置的Flash;

2)SRAM:芯片内置的RAM区,即内存;

3)系统存储器:芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后不能够修改或擦除,它是一个ROM区。

BOOT0和BOOT1两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始启动,启动模式配置如表1所示。

表1   启动模式配置

一种基于STM32的最小系统及串口通信的实现

通过设置BOOT0和BOOT1两个管脚,不同启动模式对应的存储器物理地址被映像到第0块(启动区)。即使模块存储区映像为启动区,仍然可以在其原先的存储空间地址内访问相关的存储单元。

2、串口通信设计与调试

2.1、串口通信的设计

串口通信是系统与PC机交互的重要部分。STM32F103C8T6内置3个USART,完全支持RS232协议,且有很高的传输速率。本系统的电平转换芯片选用兼容3.3V供电的MAX3232ESE,可同时完成发送和接收转换双重功能。串口通信电路如图5所示。

一种基于STM32的最小系统及串口通信的实现

图5  串口通信电路


2.2、串口通信软件设计及调试

ST公司为用户应用程序开发提供了丰富的固件库,用户只需对底层微处理器的外设进行简单初始化配置即可使用[4]。初始化配置主要包括时钟、I/O端口、串口、中断等的配置。本系统采用USART复用I/O口PA9作为串口发送引脚,配置为推挽输出,速度为50MHz;USART复用I/O口PA10作为串口接收引脚,配置为浮空输入。串口工作方式和中断配置,波特率为115200Baud、8位数据位、无校验位、1位停止位。初始化串口程序如下:

voidUSARTInit(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

USART_InitTypeDefUSART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);

USART_InitStructure.USART_BaudRate=115200;

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_Tx|USART_Mode_Rx;

USART_Init(USART,&USART_InitStructure);

USART_Cmd(USART,ENABLE);

USART_ITConfig(USART,USART_IT_RXNE,ENABLE);

USART_ITConfig(USART,USART_IT_TXE,ENABLE);

}

2.2.1、Keil仿真调试

KeilμVision4IDE选择仿真,进入调试模式后,打开串口1小窗口,运行程序,可以传输数据,仿真串口调试结果如图6所示。

一种基于STM32的最小系统及串口通信的实现

图6 仿真串口调试结果

2.2.2、硬件平台目标调试

用J-Link仿真器将PC机与STM32电路板连接起来,将程序下载到STM32中,连接USB转串口线,用来实现STM32电路板与PC机的串口通信,通过串口调试小工具来显示实验效果,STM32电路板首先接收“STM32F103C8T6串口通信实验”的内容,然后经串口再发送到PC机上,即实现串口的发送和接收。硬件平台目标调试结果如图7所示。

一种基于STM32的最小系统及串口通信的实现

图7  硬件平台目标调试结果

3、结束语

STM32系列处理器是新型的嵌入式微处理器,各方面的性能都优于51系列单片机,开发却与51系列单片机同样简便,应用越来越广泛。STM32微处理器有较高的处理速度,包含丰富的功能模块,系统无需外扩,简化了硬件设计难度,实现了STM32最小系统与MAX3232ESE构成的串口通信,保证了数据传输的稳定性和可靠性。


关键字:STM32  最小系统  串口通信 引用地址:一种基于STM32的最小系统及串口通信的实现

上一篇:STM32单片机对CAN过滤器的设置方法
下一篇:如何修改STM32系统时钟?操作方法解析

推荐阅读最新更新时间:2024-11-04 20:49

ARM学习《十》—关于STM32的RTC调试
这两天一直在调试STM32的RTC部分,本来打算弄一个万年历的,但是现在看来是暂时实现不了了。为什么这样说,因为RTC对晶振的要求非常高,必须是6p负载电容的32768晶振,这种晶振很难买,而且还很贵。下面是摘自一位网友的话: 今天到电子市场找了一下,几乎都是12.5p负载电容的32768晶振,只有一家有少量,负载电容是6p,20ppm的晶振要价是12.5p晶振的5倍,而且从外观上也看不出来,也没有测试方法能测出负载电容是6p还是12.5p。卖晶振的老板在这行干了10几年,一说到6p的32768晶振就笑了。这个要求以前就有多个公司中过招,特别是DALLAS的片子,让一家公司吃尽了苦头,焊上的许多高精度12.5p晶振被迫全部换掉,订
[单片机]
高手经验!STM32中的位带(bit-band)操作
支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在 CM3 中,有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。 位带操作的概念其实 30 年前就有了,那还是8051 单片机开创的先河,如今,CM3 将此能力进化,这里的位带操作是 8051 位寻址区的威力大幅加强版。 CM3 使用如下术语来表示位带存储的相关地址: 位带区:支持位带操作的地址区
[单片机]
高手经验!<font color='red'>STM32</font>中的位带(bit-band)操作
基于STM32芯片的电源监控器应用方案
电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。因此,STM32 有专门的电源管理外设监控电源并管理设备的运行模式,确保系统正常运行,并尽量降低器件的功耗。 电源监控器 STM32芯片主要通过引脚 VDD 从外部获取电源,在它的内部具有电源监控器用于检测 VDD的电压,以实现复位功能及掉电紧急处理功能,保证系统可靠地运行。
[单片机]
基于<font color='red'>STM32</font>芯片的电源监控器应用方案
stm32用keil+stlink不识别问题
刚到手一块stm32f103c8t6的板子,刚好最近在用stm32cube,直接用cube配置了一个led灯闪烁的工程,用keil+stlink下载进去一切正常,用的SWD模式。 然后问题出现了,keil不识别板子了,options- debug里面stlink 的setting界面也找不到目标,SW device是空的。 最开始一度认为可能是硬件错误,排除了接线、驱动错误后(因为第一次下载是成功的),后来发现在按住reset后进去setting是可以识别的,同样按住reset松手一瞬间是可以download程序的,想到可能是程序的问题。 原因:在stm32cube配置工程中,如图sys下的debug选择Serial
[单片机]
<font color='red'>stm32</font>用keil+stlink不识别问题
如何基于Keil、STM32用C++编写流水灯程序?
通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案肯定是可以的,下面讲讲基于Keil、STM32,用C++编写流水灯程序的一些内容。 1 为什么很少用C++开发单片机 不知道大家对面向过程和面向对象的理解有多少? C语言是面向过程的语言,C++是面向对象的编程语言。结合本文来说,面向过程相比面向对象的编程,生成代码量(bin文件)更小,运行效率更高。 所以,C语言相比C++具有更小代码量(bin文件)、更快的运行速度。 当然,这里是C相对C++而言。其实,汇编相对C而言,具有更小代码量和更快的运行速度。可以参看文章:用 汇编 和 C语言 写流水灯程序有什么不
[单片机]
STM32学习笔记:通用定时器输出PWM
脉冲宽度调制,简称PWM(Pulse Width Modulation)是利用微处理器的数字输出 对模拟电路进行控制的一种非常有效的控制技术,常用于控制Led灯的亮度、电机转速等。 STM32 的定时器除了 TIM6 和 7,其他的定时器都可以用来产生 PWM 输出。其中高级定时器TIM1和TIM8可以同时产生高达7路的PWM输出,通用定时器TIM2~TIM5可以同时产生4路PWM输出。 使用通用定时器输出PWM同样需要4步配置,由于输出PWM信号时,不需要定时器中断,所以不需要配置NVIC,但是需要配置TIM_OCInitStructure。下面已配置TIM2为例: (1)开启系统时钟 RCC_APB1PeriphClockCm
[单片机]
STM32待机模式学习笔记
STM32内置低功耗模式,在系统或电源复位之后,微控制器处于运行状态,当CPU不需要继续运行时,可以利用多种低功耗模式来节省功耗。例如,等待某个外部事件,用户需要更具最低电源功耗,最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。 STM32F10xxx有三种低功耗模式: ●睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时 钟(SysTick)等仍在运行) 。 ●停止模式(所有的时钟都已停止) ●待机模式(1.8V电源关闭) 此外,在运行模式下,可以通过以下方式中的一种降低功耗: ●降低系统时钟 ●关闭APB和AHB总线上未被使用的外设时
[单片机]
<font color='red'>STM32</font>待机模式学习笔记
STM32 UART2程序
USART1程序很多,看看USART2程序。注意红色部分,首先要使能相关端口的时钟。 因为USART2可以映射成不同的端口,所以要端口映射。 结合你自己的开发板,设置正确的映射口.(正点原子的是PA03PA02.) STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。 程序在正点原子开发板SRAM中调试通过,开发环境IAR5.30. void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå NVIC_InitTypeDef N
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved