基于stm32的智能小车设计
2.软硬件设计
智能小车控制系统具备了障碍物检测、自主避障、自主循迹等功能。相应的控制系统主要由以下四个模块组成:避障模块、循迹模块、电机驱动模块、中央处理模块四个模块组成,系统总体框架如图2.1所示:
图2.1 系统框架图
我们本节主要任务是了解各个模块的功能,掌握各个模块所使用的器件的使用方法,并能够编写相应的程序代码。掌握各个模块的功能。
2.1中央处理模块
在人类身体结构中,大脑可以根据各个器官所传输的信息做出相应的行为动作用以保证人体所必须的生理原料,而stm32处理器之于智能小车就相当于大脑之于人类,它可以从各个模块之间获得数据,并对所传输的数据进行实时处理,来驱使电机模块做出相应的行为动作。
由ARM公司设计的基于ARMv7架构的Cortex系列的标准体系结构在2006年推出,此结构是用来满足日渐复杂的不同性能要求的软件设计,根据所面向的领域,Cortex系列可以分为A、R、M三个分工明确的系列。Stm32处理器的出现为微控制系统、工业控制系统、汽车车身系统和无线网络等对功耗和成本敏感的嵌入式应用领域实现高系统性能系统提供了基础,使编程的复杂性,集高性能、低功耗、低成本大大简化,并使它们融为于一体[2]。意法半导体ST公司作为一个半导体制造厂商,是ARM公司Cortex-M3内核开发项目一个主要合作方。2007年6月11日由ST公司率先推出的基于Cortex-M3内核的STM32系列微控处理器研发而出。此中,A系列是面向复杂的尖端应用程序,用于运行开放式的复杂操作系统;R是Real的首字母缩写,是面向实时系统开发的;M是Mirco的首字母缩写,专门面向低成本的微控制领域开发研究。因此,Cortex-M3处理器是由ARM公司
- 5 -
[1]
基于stm32的智能小车设计
设计的首款基于ARMv7-M体系结构的32位标准处理器,它不仅具有低功耗、少门数等优点,而且还具有短中断延迟、低调试成本等众多优点,使它在众多的处理器中脱颖而出。目前为止,STM32系列处理器暂分为2个系列。其中,STM32F101系列是标准型系列,工作频率设定在36MHZ;STM32F103系列是增强型系列,工作频率设定在72MHZ,其带有更多片内RAM和更丰富的外设资源。这两个系列的产品在软件和引脚封装方面具有兼容性,并且拥有相同的片内Flash资源,使软件的开发和升级更加方便。本次试验,我们使用的是stm32f103处理器。 2.1.1 stm32f103内部结构
STM32F103系列微处理器是首款基于ARMv7-M体系结构的32位标准RISC (精简指令集)处理器,具有执行代码效率高,外设资源丰富等众多优点。该系列微处理器工作频率设定在72MHz,高达128K 字节的内置Flash存储器和20K 字节的SRAM,方便程序编写,而且具有丰富的通用I/O 端口。其内部结构图如图2.2所示:
图2.2 内部结构图
Stm32处理器主系统主要由4个被动单元和4个驱动单元构成。4个驱动单元是:通用DMA1,通用DMA2,内核DCode总线和系统总线。4个被动单元由APB桥,APB设备,内部Flash闪存,内部SRAM、FSMC。我们实验所采用的芯片具有64KBSRAM、512KBFLASH、2个基本定时器,4个通用定时器,2个高
- 6 -
基于stm32的智能小车设计
级定时器,3个SPI,2个IIC,5个串口,1个USB,1个CAN,3个12位的ADC,1个12位DAC、1个SDIO接口,1个FSMC接口以及112个通用I/O口。 2.1.2 stm32最小系统电路设计
Stm32的最小系统电路主要由系统时钟电路、实时时钟电路、JTAG调试接口电路,复位电路和启动模式选择电路组成。最小系统电路原理图如图2-1-3所示:
图2.3 最小系统电路原理图
主要电路原理图的设计及功能如下所示: 1.系统时钟电路
系统时钟电路主要作用是提供节拍,就相当于人类的心脏跳动,随着心脏的跳动,血液就会到达全身部位,所以系统时钟的重要性就不言而喻啦。系统时钟的电路设计如图2.4所示:
图2.4 系统时钟电路图
在时钟电路中,我们选用8M的晶振。
- 7 -
基于stm32的智能小车设计
2.复位电路
复位电路的设计如图2.5所示:
图2.5 复位电路图
本次试验所采用的开发板为低电平复位。如图所示,当按键悬空时RST输入为高电平,当按键按下时,RST脚输入为低电平,从而电路复位。 3.JTAG电路
JTAG电路原理图如图2.6所示:
图2.6 JAG电路原理图
JTAG的主要功能是使目标文件烧到核处理器中。 4.启动模式电路
启动模式电路原理图如图2.7所示:
- 8 -
基于stm32的智能小车设计
图2.7 启动模式电路原理图
通过设置BOOT[1:0]引脚可以选择三种不同启动模式,启动模式如表2-1所示:
表2-1 启动模式表
启动模式选择引脚 BOOT1 X 0 1
BOOT0 0 1 1
启动模式
说明
主闪存存储器 主闪存存储器被选为启动区域 系统存储器 内置SRAM
系统存储器被选为启动区域 内置SRAM被选为启动区域
2.1.3 stm32软件设计的基本思路
在对其他模块设计之前,我们必须了解stm32的编程规则。任何处理器,包括stm32处理器,想要处理器完成某项相应的动作,就必须对处理器的寄存器进行操作。比如,我们在单片机C51中,同样,我们在stmM32的开发中过程中,我们同样可以对寄存器直接操作:
GPIOx->BRR=0x0011。 (x可以是A,B,C,D,E?比如GPIOA就是端口A) 但是,对于stm32这种级别的处理器,几百个寄存器记起来谈何容易。所以,ST(意法半导体)提出了固件库的概念,利用固件库进行编程。固件库的本质就是函数的集合,固件库将那些寄存器的底层操作都封装起来,提供一整套API供开发者使用。比如,上面通过控制BRR寄存器来控制电平的变化,官方库封装了一个函数:
Void GPIO_ResetBits(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin) {GPIOx->BRR = GPIO_Pin;} (x可以是A,B,C,D,E?比如GPIO_A就是端口A)
通过使用GPIO_ResetBits()函数就可以直接对寄存器进行操作啦。 2.1.4 stm32中断介绍
本方案中,我们要使用stm32的中断,在程序设计中,我们要开启各个管道的中断,打开各个中断通道,配置中断方式,我们先来讲述下stm32单片机的中断机制。结构图如下所示:
- 9 -