和我一起探索嵌入式

640?wx_fmt=jpeg


1.

本文为微信群管理员小磊投稿作品,作者计划编写一系列文章,该篇为第一篇,如果有做STM32的同学这将是一个非常好的系列教程,欢迎关注。我15年刚建立了一个BLE的QQ群,很有幸认识了小磊同学,一个非常踏实的技术型男,当然还有好几个非常不错的管理员,在QQ群里嗨得飞起,后面因为公司原因不能在公司登录QQ,我就基本很少在QQ群露面,里面的管理都是让这几位哥们打理了。最近小磊说他也很喜欢写技术文章,所以就有了下面这篇开头,一个好的开头是成功的一半,大家拭目以待吧,觉得不错,请帮忙转发支持一下,谢谢。



2.【作者简介】


各位攻城狮朋友,大家好,我是小磊,苏州人,工作也在苏州。不知不觉入行嵌入式已经若干年了,嵌入式这个行业是我始终热爱的事业并且为之不知疲倦地学习和工作。我的工作岗位是苏州某公司的嵌入式部门主管,本身是硬件工程师,但是一直都是软硬件工作都做,甚至软件比硬件做的都多。

嵌入式的书面定义为:“嵌入式系统是以应用为中心、以计算机技术为基础,软、硬件可裁剪,适应于应用系统对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统”。在不断地实践中,我深刻体会到另一句比较抽象的话:“硬件是基础,软件是灵魂”。

明明毕业好多年,但仍似学生,这大概是对嵌入式人的很形象的描述了。从事这个行业,似乎是永远到不了登峰造极这么一种境界,也是这种情况,吸引了无数人不断探索、砥砺前行。

再来说说《和我一起探索嵌入式》,这是我利用闲暇时光,记录和分享有关嵌入式专业技术的系列文章的总称。在其下,我将会不定期写下各篇文章,类型不定,各篇文章之间没有关联性。文章的主要方向包括:软硬件体验、技术探索、经验分享、教程等。所有文章均为本人原著文章,不会有任何抄袭,也不会转载或引用其他人的文章给大家看。由于时间关系,所有文章将以连载的形式出现。

在此声明,欢迎大家转载分享我的文章,但请一定要注明我使用的名字和邮箱。

我使用的名字:小磊

我使用的邮箱:j9tanke@live.com


 

3.【01硬件介绍】


一、前言

STM32系列芯片在嵌入式行业的流行程度堪比肯德基在中国的流行程度。STM32系列芯片是很多嵌入式人入门的必学芯片,甚至有人跳过51直接学STM32。STM32的流行是不无道理的,其有着良好的稳定性、广泛的适用性、友好的开发环境、丰富的开发资源和不错的价格优势。

当然,其流行的同时,和肯德基一样有“富贵病”。怎么理解这个问题呢?简单来说,就是芯片价格比较昂贵,很多型号数量稀少,批量供货不稳,目前国内已经有很多更高性价比的替代方案。

在机缘巧合下,我买到了一块价格不错的全新Discovery开发板,这是我第一次买这种原厂板子,芯片是STM32L496AGI6。写这篇文章的目的在于和大家一起体验一下这块板子,顺便分享我写的一种手环系统框架。开发板使用的这款芯片是没有机会实现在产品上量产的,所以请大家跟我一起来学习体验即可。

本篇文章整体安排如下:

01硬件介绍

02软件介绍

03硬件开箱体验

04软件体验

05项目实战—智能手环01

06项目实战—智能手环02

07项目实战—智能手环03

08项目实战—智能手环04

09项目实战—智能手环05

10项目实战—智能手环06

具体如下:

在【01硬件介绍】篇中,我将详细地为大家介绍芯片、开发板以及板载资源。

在【02软件介绍】篇中,我将详细地为大家介绍软件开发环境和软件开发资源。

在【03硬件开箱体验】篇中,我将和大家一起开箱一块全新的开发板。

在【04软件体验】篇中,我将和大家一起体验出厂自带的软件系统。

在【05项目实战】至【10项目实战】篇中,我将分享一种手环系统框架,并将之开源。


 

二、STM32L496AGI6芯片介绍

STM32L496AGI6这款芯片是意法半导体(ST)推出的一款超低功耗(L系列)微控制器(MCU),其使用了ARM Cortex M4F内核,主频可达到80MHz。其Flash是1MB,SRAM为320kB,且可以外扩RAM。除了MCU常见的外设例如GPIO、TIMER、SPI、USART、IIC、CAN、SDMMC、RTC、ADC、OTG_FS等基本都具备之外,其还具备FSMC、QSPI、DFSDM、ART、DCMI、TSC、SAI等特性,而这些稍微独特的特性中的一部分,导致其特别适合作为可穿戴设备的主控芯片。下面介绍一些关键的特性:

2.1自适应实时内存加速器(ART)

这一功能仅在STM32系列部分M4、M7内核芯片中存在,旨在解决CPU取指快而Flash读取慢这一矛盾。使用这一技术后CPU频率达到80MHz时从Flash取指执行仍能实现0等待。

2.2灵活的静态存储控制器(FSMC)

这一功能在很多引脚较多的STM32系列芯片上都会有,其可以并行访问外部的存储器,包括SRAM、PSRAM、NOR Flash、NAND Flash、LCD等,大幅加快外部设备静态存储器的读写速度。具体地应用在LCD应用场景时,可以减少CPU运算,提高LCD刷新率。

2.3六线SPI(QSPI)

相比于传统的四线SPI(CS、SCK、MISO、MOSI),六线SPI(CS、SCK、IO0、IO1、IO2、IO3)使用并行传输提高了原来四线SPI的读写速度。速度提升比较明显,四线SPI一个时钟周期内只能传输1bit数据,而六线SPI能够传输4bit数据。由于受SPI Flash元器件的影响,这类Flash的写入速度不会提高,但是读取速度会有大幅提高。

2.4低功耗

作为STM32L系列中的一款芯片,STM32L496AGI6同样具有非常优秀的低功耗特性。理论上讲,该芯片在关机模式仅耗电25nA,在等待模式仅108nA,在等待模式同时仅让RTC保持工作仅426nA。当芯片内部电源工作在LDO模式时,具有91uA/MHz的功耗特征,当工作在DCDC模式时,具有37uA/MHz的功耗特征。

虽软这款芯片在性能、功能和低功耗等诸多方面具有不错的特性,但是我们仍然不能将其使用到实际产品中去。我在此提出三点,一是价格,二是供货,三是封装,这三点都是造成不能使用该芯片的原因。前两点很容易理解,第三点具体是这样的,这款芯片是UFBGA169封装,引脚间距0.5mm,除外圈引脚外必须打盘中孔才能扇出,其制板难度已经让很多板厂不能受理,其制板费用已经让很多公司不能接受。


三、开发板介绍

我使用的开发板全称是32L496GDISCOVERY,是意法半导体原厂设计和销售的开发板。其功能十分全面,板级设计还不错(如果像我一样有点强迫症,可能觉得很糟糕),可拓展的功能也较多,更重要的是使用很方便。

如果您英文阅读没有障碍,请您移步ST官网,亲自去下载开发板相关资料阅读,文档编号是UM2160。如果您英文阅读水平有限,请您看我下文简介,应该也能让您足够了解这款开发板了。

请看下图(开发板功能框图):

640?wx_fmt=png

下面依次介绍一下这些功能。

3.1调试器ST-LINK

在这块开发板上集成了一个ST-LINK调试器,使用标准的ARM JTAG-SWD协议。他的功能和JLINK是一样的,适用范围没有JLINK广泛,毕竟是意法半导体为自家芯片打造的调试器,没必要强调普适性。使用的芯片是LQFP48封装的STM32F103CBT6,一款销量火爆的芯片,价格便宜,供货量大。调试器与主芯片STM32L496AGI6的连接中有一个拨码开关隔离,通过拨码开关可以完全阻隔调试器与主芯片的连接,方便测量主芯片的功耗。其次,当拨码开关关断时,调试器能够通过一个引出端口给其他板子调试,这样自己又多了一个ST-LINK可以使用了。另外,调试器还有一个串口功能,与主芯片UART2相连,可以方便的输出调试信息。

3.2存储

开发板存储资源丰富,共有三处,一是PSRAM,二是SPI Flash,三是SD卡。

第一处,PSRAM,使用的是ISSI公司的IS66WV51216EBLL-70BLI,1MB空间,48Ball BGA封装。相对于主芯片的宽电压(1.71-3.6V)特性,该PSRAM电压范围仅在2.5-3.3V之间,使用时需要格外注意。

第二处,SPI Flash,使用的是台湾旺宏电子股份有限公司的MX25R6435FM2IL0,8MB空间,SOP8封装。这款Flash也具有宽电压的特性,1.65-3.6V。同时,其支持QSPI接口,实际上与主芯片的连接方法也被设计为QSPI方式连接,所以读取该芯片内存储的数据能够有较快的速度。

第三处,SD卡,使用的是小卡TF卡。SD卡与主芯片通过SDMMC接口连接,其读写速度远超SPI连接方式。

3.3一些有趣的外部设备

开发板上有一些有趣的外设,包括:Joystick(摇杆),LCD,LED,Audio,Microphone。其中,Audio使用的是CS42L51音频编/解码芯片,与主芯片通过IIC和SAI(数字音频接口)接口连接,外部是一个3.5mm通用耳机接口。Microphone部分使用的是意法半导体自家的数字式的全向音频传感器MP34DT01TR,两个MP34DT01TR作为左右通道,且依托主芯片带有的DFSDM(数字滤波器)功能,实现外部音频采集。LCD部分使用的是一块1.54英寸TFT LCD屏幕,屏幕之上有一块电容触摸传感器。

3.4极其丰富的接口

开发板有很多接口,用于拓展各种各样的模块。主要的接口有三种,Arduino、Pmod、STmod+。

Arduino真的是一款风靡全球的开源硬件了,与其搭配的模块也是各种各样层出不穷,WiFi模块、BLE模块、电机驱动模块、温湿度传感器模块、以太网模块等等。在这块开发板上Arduino接口是标准的Arduino UNO接口。

Pmod是Digilent制定的拓展模块接口规范,在国内几乎无人使用。

STmod+是意法半导体自己提出的一种拓展模块的接口规范,在ST官网上能够找到几种模块可以使用,但是价格昂贵。另在国内某些电商平台上你能找到STmod+接口转Arduino UNO接口的模块在销售。

另外,在开发板上还有一个相机接口和一个USB-OTG接口,相机数据线宽度为8bit。

3.5功耗测量

意法半导体的Discovery开发板都带有简单的功耗测量功能,这块板子也不例外。在这块开发板上,ST使用自家的STM32L152CCT6芯片设计了一个简单的功耗测量仪器,能够测量60nA至50mA范围内的电流。如果超过这个测量范围,需要通过外部电流表来测量。


完,各位共勉~

推荐阅读

我就随便BB一下

谁都能看懂的网络模型知识

没有梦想,你跟咸鱼有什么分别?

华为不做黑寡妇,开源编译器,与友商共建安卓性能

C 语言内存分配


继续推荐下我的知识小密圈

我的知识小密圈

640?wx_fmt=gif   

640?wx_fmt=png


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经纬度坐标系转东北天_大地坐标系(WGS-84)、地心地固坐标系(ECEF)与东北天坐标系(ENU)的相互转换C语言代码分享...

//ECEF ---> WGS84//pcg为WGS-84坐标系结构体指针,pcc为ECEF坐标系结构体指针void ECEFToWGS(PWGS pcg, PECEF pcc){double B0, R, N;double B_, L_;double X pcc->x;double Y pcc->y;double Z pcc->z;R sqrt(X * X Y * Y);B0 atan2(Z, R);while …

2.简易的登录页面(表单验证)(HTML+JavaScript+Jquery)

//HTML部分 <!DOCTYPE html><html> <head> <meta charset"UTF-8"> <title>登录页面</title> <link rel"stylesheet" type"text/css" href"css/login.css"/> <s…

Java NIO_I/O基本概念_Java中的缓冲区(Buffer)_通道(Channel)_网络I/O

I/O基本概念 缓冲区基础 缓冲区是I/O的基础, 进程使用read(), write()将数据读出/写入从缓冲区中; 当缓冲区写满, 内核向磁盘发出指令, 将缓冲区中数据写入磁盘中(这一步不需要CPU), 当磁盘控制器将缓冲区装满, 内核将缓冲区数据拷贝到进程中指定的缓冲区; 操作如下图: 当中…

跟一个大佬前辈交流了一下

&#xff11;.最近&#xff0c;跟我们公司的测试总监聊天&#xff0c;我随便问了下他几个问题&#xff0c;他也给出了答案&#xff0c;在这里随便聊下&#xff0c;希望给大家的职业生涯中有一些借鉴的作用。也能给新入职场的同学一些方向和指引。2.先介绍下这个技术总监&#x…

python获取目录树_Python读取文件目录树——os.walk

os.walk是Python的内置函数用来遍历文件目录树。[python]import osrootDir d:\assafor dirName, subdirList, fileList in os.walk(rootDir):print(Folder: %s % dirName)for fname in fileList:print(t%s % fname)import osrootDir d:\assafor dirName, subdirList, fileLis…

LINQ简记(1):基本语法

关于LINQ&#xff08;语言集成查询&#xff09;是.NET 3.5和Visual Studio 2008以上版本中引入的一种有趣的全新概念&#xff0c;语言版本有VB和C#&#xff0c;由于C#与.NET平台结合最为紧密&#xff0c;也是MS当初首推的语言&#xff0c;因此&#xff0c;本系列文章的示例代码…

我认识的一位前辈~

&#xff11;.我最近认识了一个老前辈&#xff0c;关注了我的公众号加了我的好友认识的&#xff0c;我想介绍一下这位前辈&#xff0c;不是因为他有多成功&#xff0c;也不是因为他给了我很多钱&#xff0c;我觉得他是一个在平常不过的人了&#xff0c;因为太过于平凡的思考方式…

软件测试缺陷等级划分_缺陷等级的各种划分方法 - 测试新客~~小懒~~ - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

《缺陷等级标准》缺陷严重级别定义:o 最高级--导致运行中断(应用程序崩溃),预期的功能没有得到实现,测试工作无法继续进行等.o 紧急---事件非常重要,并且需要马上给予关注.o 高级---事件是重要的,并且应该在紧急的事件处理之后尽快得到解决.o 中级---事件是重要的,但是由于解决…

机器学习_决策树_ID3算法_C4.5算法_CART算法及各个算法Python实现

下面的有些叙述基于我个人理解, 可能与专业书籍描述不同, 但是最终都是表达同一个意思, 如果有不同意见的小伙伴, 请在评论区留言, 我不胜感激. 参考: 周志华-机器学习 https://blog.csdn.net/xiaohukun/article/details/78112917 https://blog.csdn.net/fuqiuai/article/d…

http数据绑定spring mvc详解

转载于:https://www.cnblogs.com/panxuejun/p/6834365.html

ESP32 入门教学,不入门,不教学

&#xff11;.Internet of things &#xff08;iot&#xff09;这个概念非常火&#xff0c;物联网是什么&#xff1f;把所有物品通过射频识别等信息传感设备与互联网连接起来&#xff0c;实现智能化识别和管理。 物联网通过智能感知、识别技术与普适计算、泛在网络的融合应用&a…

opencv检测相交点_OpenCV:曲线的检测与提取-0

//寻找曲线 &#xff1a;void findLines(Mat &binaryImg, vector> &outLines){//八邻域vector neighborPtVec;neighborPtVec.push_back(Point(-1,-1));neighborPtVec.push_back(Point(0,-1));neighborPtVec.push_back(Point(1,-1));neighborPtVec.push_back(Point(1…

一个从华为离职的朋友

1、我在之前的很多文章里面都谈到了我有一个过硬的华为朋友&#xff0c;我很少去炫耀自己有多厉害&#xff0c;认识了谁谁&#xff0c;但是我非常在意那些跟自己有过交情的朋友&#xff0c;这些朋友不是说你离开了就失去了&#xff0c;也不是你落魄了就不能吹水了&#xff0c;今…

(原)PyTorch中使用指定的GPU

转载请注明出处&#xff1a; http://www.cnblogs.com/darkknightzh/p/6836568.html PyTorch默认使用从0开始的GPU&#xff0c;如果GPU0正在运行程序&#xff0c;需要指定其他GPU。 有如下两种方法来指定需要使用的GPU。 1. 类似tensorflow指定GPU的方式&#xff0c;使用CUDA_VI…

机器学习_简单线性回归与多元回归方程原理推导_处理二值数据_最小二乘法解或梯度下降解多元回归方程(详细推导)以及Python代码实现_回归方程度量方式

下面的有些叙述基于我个人理解, 可能与专业书籍描述不同, 但是最终都是表达同一个意思, 如果有不同意见的小伙伴, 请在评论区留言, 我不胜感激. 参考: 周志华-机器学习 最小二乘法求解多元回归方程: https://blog.csdn.net/weixin_39445556/article/details/83543945 梯度下…

python逆序数的程序_计算逆序数(归并法)程序问题 (Python)

计算一个tuple里面的逆序数&#xff0c;用merge sort的办法。我写了以下代码&#xff0c;但是每次统计的时候&#xff0c;count设置为全局变量了&#xff1a;Count inversionInput: a sequence as tuple of integersOutput: The inversion number as an integer#Merge Sort Met…

手写Java线程池_超详细解说_绝对能运行_代码超详细注释

线程池 问题背景 只是单纯使用 new Thread(runnable).start(); 的方式创建线程, 将会导致严重的程序性能问题: 1.线程创建, 销毁需要消耗很大的系统资源; 2.虚拟机创建线程的数量是有限的; 2.线程调度切换也将使程序性能下降; 针对这些问题, 对线程数量进行管理, 有效地重复利…

分享一个非常 nice 的工具

最近有个问题&#xff0c;我需要经常使用远程连接工具&#xff0c;原因很简单&#xff0c;我需要控制另外一台电脑&#xff0c;我刚开始使用的是 teamviewer 这个软件&#xff0c;刚开始用的时间是非常爽的&#xff0c;不过有一天他给我来了个提示&#xff0c;说我的软件被商用…

Java并发性和多线程介绍目录

http://ifeve.com/java-concurrency-thread-directory/转载于:https://www.cnblogs.com/hanfeihanfei/p/6840359.html

js 正则是否包含某些字符串_JS 判断字符串中是否包含某个字符串(方法总结)...

我是想在js中判断字符串是否包含某个中文&#xff0c;将方法记录起来&#xff0c;这些方法也适用于数字、字母。实践是检验真理的唯一标准&#xff0c;还是要多多测试啊。String对象的方法方法一&#xff1a;indexOf()var groupName"小白A组";alert(groupName.indexO…