本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

《来实战》之智能车开源项目02:我们为什么选择了STM32芯片平台?
发布时间:2020-03-09
分享到:
《来实战》之智能车开源项目02:我们为什么选择了STM32芯片平台?
发布时间:2020-03-09
分享到:

更多项目进度详情分享:智能小车开源项目文章汇总

项目资料:电路城“来实战”多功能智能小车项目设计方案资料(持续更新)

广大的工程师及电子爱好者朋友们,大家好!

在我们“来实战”栏目上线后度过了第一个周末,相信经过这几天,大家更加关注我们进度。别急,我们这是一个比较基础的开源项目,所以我们前期准备了大量的工作,争取让大家都搞懂。无论是没有基础的朋友还是老手,希望看了以后都有所帮助。

今天我们先来讲讲我们的硬件系统,我们初步定下来是使用意法半导体的STM32F103系列。可能有的朋友会问了,就做个小车子还用什么STM32,51单片机就能做好了,或者是向我们推荐更好的主控芯片。我们思考了很久,觉得51单片机还是太基础了,市场上应用的太少了,所以选择比较合适的STM32单片机。

废话少说,进入正题。熟悉一块芯片最快的办法肯定从数据手册入手,STM32系列的单片机使用非常广泛,所以几乎都有中文翻译版,大家也不用盯着英文版皱眉了。由于时间和篇幅限制,我们没办法把整个数据手册都仔细的讲完,所以就从应用实际来跟大家讲解这款芯片。我们把工程需要用到的资源,比较重要的资源讲解清楚,大家搞明白,其实就可以熟练的使用这款芯片制作项目了。

首先根据我们提供或者网上下载的数据手册,第一页可以说是整本手册的精华,所有的资源一目了然,我们也围绕着这一页来讲解。

内核:ARM 32位的Cortex-M3 CPU

可能有些朋友就会问了,有CM3是什么,ST意法半导体的芯片跟ARM有什么关系?这个就要简单的从头说起了,请看下面这张图:

一个基于ARM内核设计的芯片构成大概是这样子的,CM3指的是ARM公司提供的内核名称,ARM Cortex‐M3处理器,采用ARMv7-M架构,作为Cortex系列的处女作,我觉得是像当年8051一样,当时性价比非常高,应用非常广泛的。如果芯片拥有生命,CM3内核就是心脏,在ARM公司授权其它厂商使用它后,其它厂商就能根据自己的需求设计相应芯片,这个我们就简单了解一下。

最高72MHz的工作频率,现在大家可能觉得没感觉,甚至觉得有点少了,因为咱们手机的处理器动不动就2GHz多的频率,最新的高通晓龙865采用ARM的Cortex-A系列——A77架构,大核主频高达2.84GHz。但是回过头在想,当初我们学51单片机的时候有被惊叹到嘛?小小的一块芯片,还是8位的,已经可以完成那么多工作了,现在72MHz的工作频率,用于我们的多功能智能小车绰绰有余。

存储器

64K或128K字节的闪存程序存储器

高达20K字节的SRAM

什么叫做闪存程序存储器?跟一般程序存储器(ROM)区别在哪里?有基础的肯定知道,Flash 存储器又称闪存、快闪。它是EEPROM的一种。它结合了ROM和RAM的长处。不仅具备电子可擦除可编辑(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据。它与EEPROM的最大区别是,FLASH按扇区(block)操作,而EEPROM按照字节操作。FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因此适合用于做程序存储器。下面就是ROM整个的换代发展情况:

ROM  程序存储器

PROM  可编程只读存储器

EPROM  可擦除可编程只读存储器

EEPROM  电可擦除可编程只读存储器

RAM我就简单讲一下,RAM又称随机存取存储器,存储单元的内容可按照需要随机取出或存入,且存取的速度与存储单元的位置无关。这种存储器在断电时,将丢失其存储内容,所以主要用于存储短时间使用的程序。在应用中,常规上ROM是用来存储固化程序的,RAM是用来存放数据的。

有的人可能又会问了,你说的是RAM,上面写的是SRAM啊,别急,那我解释一下。RAM分为动态随机存取存储器(DRAM)和静态随机存取储存器(SRAM),它们有什么区别呢?

DRAM 集成度高、容量大、功耗小,成本比SRAM低,但是速度比较慢,主要用于主存储器。

SRAM 集成度低、功耗大,容量小、成本高。但是速度快呀!这和DRAM 相反。因此它被用于高速缓冲存储器,通常和CPU放在一起。

时钟、复位和电源管理

这一点呢我们讲一下最重要的时钟,复位和电源管理可以在实际工程中学习。时钟系统对芯片来说,就如人对时间来说一样重要,简单说,就是告诉你以什么速度干活,什么时候干活,芯片内部每个地方都需要不一样的时钟,否则就会乱套。要想弄明白时钟,个人而言,觉得最好的办法就是掏出时钟树,请看下图:

时钟树看起来很复杂,但是只要抓住了源头,从源头出发去了解每一条分支走向,简单来说要明确“主干”和最终的“分支”,相信就会会真正掌握时钟树。先来看看这些源头:

HSI  内部高速时钟,H代表高速,L低速,E代表外部,I内部,下同

HSE  外部高速时钟 8MHz,可以接石英或者陶瓷谐振器,或者接上外界的时钟源,下同

LSE  外部低速时钟 33.768KHz

LSI  内部低速时钟

PLL  锁相环

PLL、HSE、LSE用来驱动系统时钟;LSI担当一个低功耗时钟源的角色,为独立看门狗和自动唤醒单元提供时钟。

RTC  RTC作为实时时钟,可以提供一个准确的实时时间

USBCLK  在使用usb时,一定要让PLL作为时钟源,并且使能为48MHz或者72MHz

SYSCLK  系统时钟,系统时钟又给到了ABP1和ABP2,它们上面又连接着各种外设。

建议你跟着时钟树的走向都走一遍,在设计过程中,使能习惯了就记下来了,其实也没必要记,设计的时候查找一下资料就好了,我们的视频里可能讲解的更清楚。

到这里,有的小伙伴可能就要吐槽了,STM32为甚要搞一个这么复杂的时钟树,当年学习它真是费了好多功夫。其实这是低功耗芯片的通病,为什么能实现低功耗呢?就是靠这些设计的功能完善构成复杂的时钟系统,使外设功能的时钟可自配置,从而降低功耗。

低功耗

这个我们了解一下就好了,在以后大家的设计过程中可能会用到,到时候再来查找资料也是可以的。

睡眠,停止和待机三种低功耗模式

VBATRTC和后备寄存器供电,这个VBAT可用电池,这也是为什么很多开发板上会有一块电池的原因,我们平时都是直接接VCC

2个12位模数转换器

这个我们也是知道就好了,多达16个通道,转换电压是0至3.6V,所以使用STM32做ADC采集的时候通道是非常多的,就不用再外接AD转换芯片了。还有内部通道可以用于内部温度测量。

DMA

中文名叫直接存储器存取,从这个名字大概就可以看出个大概,意思就是外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。所以这个是很厉害的,我们后面会用到,到时候给大家详细讲一下。但是,使用DMA也是有缺点的:它势必会影响到CPU访问内存的速度(CPU与DMA时分复用数据总线),影响其他功能的执行速度,总的来说影响不大。

快速I/O口

STM32F103C8T6采用LQFP48方式封装,所有I/O接口可以映像到16个外部中断,几乎所有端口都可以可以容忍5V信号。(模拟端口除外)

调试模式

这次我们准备了ST-link,所以使用SWD下载。SWD(串行调试)只需要4个(两个I/O)引脚,结构简单,这是我们采用的主要原因,节约I/O口。

多达7个定时器

大家肯定也知道,定时器对每一款芯片都是至关重要的,没有定时器基本上无法干任何工作。在这里最主要那3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器的输入。还有一个高级定时器,这些定时器的介绍我们都放后面来解决。

多达9个通信接口

这个也是我们今天讲的重中之重。只要我们学过任意一款单片机,I2C通信和USART通信以及SPI通信应该都有所了解。

I2C总线只有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL,由于其管脚少,硬件实现简单(节约I/O口),可扩展性强等特点,所以被广泛应用。在硬件上,连接到总线上的所有器件的 SCL 都连到一起,所有 SDA 都连到一起。I2C 总线是开漏引脚并联的结构,因此我们外部要添加上拉电阻。对于开漏电路外部加上拉电阻,就组成了线“与”的关系。总线上线“与”的关系就是说,所有接入的器件保持高电平,这条线才是高电平,而任何一个器件输出一个低电平,那这条线就会保持低电平,因此可以做到任何一个器件都可以拉低电平,也就是任何一个器件都可以作为主机。

第二个特点呢每次数据传输都以字节为单位,每次传输的字节数不受限制。具体操作,程序编写的时候再讲。

串口通信,是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通信方式,属于串行通信方式。USART即通用同步异步收发器,它能够灵活地与外部设备进行全双工数据交换UART即通用异步收发器,它是在USART基础上裁剪掉了同步通信功能,同步和异步主要看其时钟是否需要对外提供

串口通信中还需要注意的是,串口数据收发线要交叉连接,计算机的TXD要对应单片机的RXD,计算机的RXD要对应单片机的TXD,并且共GND,如下图:

SPI 通信原理比 I2C要简单,它主要是主从方式通信,这种模式通常只有一个主机和一个或者多个从机,标准的 SPI 是 4 根线,分别是CS(片选)、SCLK(时钟,也写作 SCK)、MOSI(主机输出从机输入Master Output/Slave Input)和 MISO(主机输入从机输出 Master Input/Slave Output)。

CS:从设备片选使能信号。如果从设备是低电平使能的话,当拉低这个引脚后,从设备就会被选中,主机和这个被选中的从机进行通信。
    SCLK:时钟信号,由主机产生,和 I2C通信的 SCL 有点类似。
    MOSI:主机给从机发送指令或者数据的通道。
    MISO:主机读取从机的状态或者数据的通道。
    在某些情况下,我们也可以用 3 根线的 SPI 或者 2 根线的 SPI 进行通信。比如主机只给从机发送命令,从机不需要回复数据的时候,那么 MISO 就可以不要;而在主机只读取从机的数据,不需要给从机发送指令的时候,那 MOSI 就可以不要;当一个主机一个从机的时候,从机的片选有时可以固定为有效电平而一直处于使能状态,那么CS就可以不要;此时如果再加上主机只给从机发送数据,那么CSMISO都可以不要;如果主机只读取从机送来的数据,CSMOSI 都可以不要。

好的,我们的STM32单片机就讲解到这里,给大家介绍一下这丰富的资源,硬件知识为主,这几个通信方式还是得实际操作才能真正掌握。具体程序编写我们后面再讲。

顺便晒一下,下面是我们采购陆续到货的一些模块,工具等,后期马上可以进入设计阶段啦,敬请大家关注。

 

开源项目沟通交流群,马上扫码加入!

想为我们开源项目出谋划策?马上扫码加入开源项目专家智囊团微信群,需要备注“专家智囊团:姓名+擅长领域+所在地区”,我们会尽快审核您的身份:

开源项目贡献者名单荣誉榜

(马上加入我们,开源项目等你来贡献智慧...)

。。。 。。。

加入微信技术交流群

技术交流,职业进阶

关注电路设计技能公众号

了解最新技术方案

加入电路城 QQ 交流群

与技术大牛交朋友

讨论