一种基于STM32的最小系统及串口通信的实现
扫描二维码
随时随地手机看文章
STM32是意法半导体(ST)推出的32位RISC(精简指令集计算机)微控制器系列产品,采用高性能的ARMCortex-M3内核,工作频率为72MHz,内置高速存储器(128K字节的闪存和20K字节的SRAM)。本文介绍STM32F103增强型微处理器的最小系统,实现其串口通信的设计调试。
1、STM32的最小系统
STM32微处理器不能独立工作,必须提供外围相关电路,构成STM32最小系统。包括3.3V电源、8MHz晶振时钟、复位电路、数字和模拟间的去耦电路、调试接口、串行通信接口等电路。最小系统原理图如图1所示。
图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所示。
图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所示。
图3 模拟电源与数字电源隔离去耦电路
1.2、复位电路
复位电路为低电平复位、上电复位。
1.3、启动模式
在STM32F103C8T6中,提供了BOOT0和BOOT1两个管脚用于三种启动模式选择。本系统采用从用户闪存启动。三种启动模式对应的存储介质均是芯片内置的,它们是:
1)用户闪存:即芯片内置的Flash;
2)SRAM:芯片内置的RAM区,即内存;
3)系统存储器:芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后不能够修改或擦除,它是一个ROM区。
BOOT0和BOOT1两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始启动,启动模式配置如表1所示。
表1 启动模式配置
通过设置BOOT0和BOOT1两个管脚,不同启动模式对应的存储器物理地址被映像到第0块(启动区)。即使模块存储区映像为启动区,仍然可以在其原先的存储空间地址内访问相关的存储单元。
2、串口通信设计与调试
2.1、串口通信的设计
串口通信是系统与PC机交互的重要部分。STM32F103C8T6内置3个USART,完全支持RS232协议,且有很高的传输速率。本系统的电平转换芯片选用兼容3.3V供电的MAX3232ESE,可同时完成发送和接收转换双重功能。串口通信电路如图5所示。
图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所示。
图6 仿真串口调试结果
2.2.2、硬件平台目标调试
用J-Link仿真器将PC机与STM32电路板连接起来,将程序下载到STM32中,连接USB转串口线,用来实现STM32电路板与PC机的串口通信,通过串口调试小工具来显示实验效果,STM32电路板首先接收“STM32F103C8T6串口通信实验”的内容,然后经串口再发送到PC机上,即实现串口的发送和接收。硬件平台目标调试结果如图7所示。
图7 硬件平台目标调试结果
3、结束语
STM32系列处理器是新型的嵌入式微处理器,各方面的性能都优于51系列单片机,开发却与51系列单片机同样简便,应用越来越广泛。STM32微处理器有较高的处理速度,包含丰富的功能模块,系统无需外扩,简化了硬件设计难度,实现了STM32最小系统与MAX3232ESE构成的串口通信,保证了数据传输的稳定性和可靠性。