1. 嵌入式开发入门

够用的硬件

能用的代码*

实用的教程* 屋脊雀工作室编撰 -201801227

愿景:做一套能用的开源嵌入式驱动(非LINUX)

官网:www.wujique.com

github: https://github.com/wujique/stm32f407

淘宝:https://shop316863092.taobao.com/?spm=2013.1.1000126.2.3a8f4e6eb3rBdf

技术支持邮箱:code@wujique.com、github@wujique.com

资料下载:https://pan.baidu.com/s/12o0Vh4Tv4z_O8qh49JwLjg

QQ群:767214262


大家好,从今天开始,屋脊雀和大家一起学习《基于STM32F407的嵌入式软件开发实践》。 在正式学习之前,我先跟大家解释一下问题: 1 我们学什么? 2 我们怎么学?

1.1. 我们学什么

教程名字叫《基于STM32F407嵌入式软件开发实践》,这个标题是很有意思的。

  1. 我们学的是软件开发,而且,是嵌入式软件开发。 对应嵌入式的是台式机软件开发,也叫PC软件开发。 在行业中,嵌入式通常分两块:LINUX环境单片机环境。(实际上嵌入式软件开发还有很多分类)。 单片机环境就是我们常说的裸奔或运行RTOS(实时操作系统)。 我们教程学习的是单片机环境的软件开发,而不是LINUX的ARM开发。
  2. 基于F407 学习嵌入式,需要硬件,也就是大家经常买的开发板。 十多年前,通常从51单片机开始学习,然后学习ARM7,再学习在ARM9上的LINUX开发。 在今天,51单片机虽然没有消亡,仍然在大量的家电类产品上使用。 但是经过意法半导体多年经营,”学习单片机”,已经被“学习STM32”替代。 为什么选择F407这一款STM32芯片呢? 首先,407资源丰富,是单片机中的强者。基于407学习之后,使用低端的芯片基本没有问题了,例如F103系列。 第二点,价格便宜,一片二三十块钱。不像F7或H7系列,一片七八十块钱,价格非常昂贵。F7&H7与407相比,多出来的功能,其实并不常用,初学者完全可以暂时不学习。(F7和H7在实际项目上应用不多,太贵,太贵)
  3. 开发实践 这个是我们课程的重点,我们的软件开发,完全从实际项目流程进行,教程包含的都是多年的工作经验,知识点都是干货。 这也是我们的根本目的,不仅仅要学习芯片功能,更多的要学习软件开发的技巧,驱动架构的接口设计,软件如何分层等。

1.2. 我们怎么学

好的学习方法,事半功倍。 目前网络很多教程,都比较基础,内容也只是对资料的理解,缺少实践干货。 学习完那些课程后,只能算入门。缺少更深层次的理解。我们的教程,会传授很多实际经验给大家。毕竟我们都有10多年的开发实践,做出来的东西也更接近工作内容。

我们的教程有以下特点:

  1. 基于屋脊雀的F407开发板 这个开发板,是我们工作室精心设计,设计这个硬件是为了软件开发,是为了引出软件开发中的知识点。 例如:我们底板跟核心板都有一个SPI FLASH,为什么?为了引出多个设备共用SPI时如何处理,是为了引出SPI接口驱动如何写这个知识点。 不像其他教程一样,堆砌硬件,每个硬件做教程,出几百页教程几百个视频,需要大量时间学习,无法迅速抓住软件开发的本质。 ../../_images/pic011.jpg整体
  2. 从0开始,模拟项目开发流程 每一个教程,都是一步一步前进,后续的教程,基于前面的教程。 例如: 为了验证硬件是能用的,首先需要点一个灯,这是最基础的。只有灯亮了,才能去调试其他功能。 第二个调试的外设,肯定是串口,为什么?因为串口是我们输出调试信息的重要手段。 调试LCD功能,肯定是先调试显示一些点,显示英文字母。 只有等SPI FLASH或者SD卡文件系统调试好后,才会做显示汉字图片。 ../../_images/pic021.jpg教程目录
  3. 重实践 我们更注重实际项目开发需要的知识,更注重实际项目开发的流程,对于实际开发中不需要深入了解的,暂时不做过多解释。 例如USB协议,实际开发中,通常是由原厂FAE做技术支持,我们只需要使用,所以,我们并不会对协议栈做太深入的探讨。 还有,我们也不会对STM32F407一些太底层的细节做探讨。所以,我们是基于库学习,不会直接操作寄存器。 在学习STM32的过程中,穿插介绍软件开发过程的其他知识,例如版本管理,编程规范等。

1.3. 学习基础

学习单片机需要基础吗? 我觉得需要,无论你是在学校还是自学,在学习嵌入式开发之前,最好有以下知识储备:

  1. 基本的电路知识 电阻电容你要知道,电压电流你要清楚。
  2. 基本的C语言知识 认真学习过学校的课程就可以了,后面我们会推荐一些自学提高的资料。

还有同学会问: 要不要先学习51?不需要,学过更好,不学也没关系。 要不要汇编?不需要,会,当然很好。

当遇到一些深层次的问题,有汇编帮助,更容易处理问题。 汇编思维会帮助你写出更健壮的程序,在写C代码的时候,你会时刻想着,这样写,会不会溢出啊,会不会有问题啊。(本人毕业后写过3年6052汇编)。

学习需要做什么装备? 需要一台电脑,一套开发板,还有就是定下心


前面我们大概介绍了教程,下面我们介绍一些入门的基本概念

1.4. 单片机

单片机是什么?单片机的完整名称是单芯片微机。 在百度百科定义是这样:

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机

也就是说,单片机就是个微型电脑。 在STM32这么广泛使用之前,比较流行的单片机,是51单片机. 51单片机,并不是一个型号,而是一种单片机的统称,这些单片机使用8031指令集。 具体的有AT的89S52、台湾STC的51单片机等。 除此外,比较流行的单片机还有AVR等。

当年我们学完51后,就会进一步学习“ARM”。 那ARM又是什么? ARM其实不是芯片,也不是单片机。 ARM是一个内核设计公司,最早,他们设计了ARM7内核,ARM9内核。 习惯上我们把用这两种内核的芯片我们都称之为ARM芯片。 ARM公司并不生产芯片,他只是卖内核给IC公司,芯片是IC公司设计生产的。 当年流行的芯片,ARM7有NXP的LPC2132等,ARM9有三星的2410等。

一般来说,ARM7内核的芯片,不跑LINUX;ARM9可以跑LINUX。 ARM7芯片类似现在的STM32,或者说是CONTEX内核的芯片。

STM32,我们都知道是ST生产的芯片,这些芯片用的内核,也是ARM公司设计的,也就是contex内核。 因为STM32推广的太成功了,所以现在没有说学习contex芯片,都是说学习STM32。

还有一个,其实我们把ARM9内核的芯片,排除在单片机之外。。。。。 所以我们俗称的单片机,都是裸奔或跑RTOS的,不跑LINUX的。

1.5. 单片机的组成

前面说到,单片机就是一个小电脑。 其实更形象的说,单片机类似一个电脑主机,不包含显示器和键盘等外设。 在每个芯片的规格书上,都会有芯片的组成框图。 其中STM32F407的,在文档《STM32F407_数据手册.pdf》第17页: ../../_images/pic031.jpgstm32 block diagram

  • CPU: 在F407芯片的框图上,左上角红框1框住的,就是芯片的内核,也就是ARM设计的contex内核。这一块内核,就相当于CPU。
  • 硬盘 红框2,是407芯片内部的NOR FLASH,相当于硬盘。单片机FLASH与硬盘不同的是,FLASH可以运行程序,硬盘是不能运行程序的,电脑程序都是从硬盘加载到内存中运行。跑LINUX的“单片机”跟电脑一样,程序也是在内存中运行,因此,通常我们不把这些芯片叫做单片机了。
  • 内存 红框3,是单片机内置的SRAM,相当于内存。通常只用SRAM存储程序运行过程需要的变量。 特殊情况下也可以加载程序到RAM运行。

此外:

  1. 从这个框图,我们可以看出一个芯片,有多少功能,有多少外设,串口有几个,SPI有几个等信息。
  2. 有一些单片机其实是没有RAM和flash的,需要外接,例如LPC2220。
  3. 大部分跑LINUX的芯片,是没有内部RAM和FLASH的。例如MT7688。

1.6. 程序开发流程

待补充!

1.7. 嵌入式项目开发流程

待补充!


1.8. end