熟悉Linux环境、Red Hat centos suse ubuntu …、安装操作系统、命令、服务、权限、vim gcc
printf
变量
scanf
运算符
算数 + - * / %
关系 > < == >= <= !=
逻辑 && || !
赋值 = += -= ...
位 << >> & | ~ ^
条件 ? :
下标 []
指针 & *
分量 . ->
强制 (类型)
自增自减 ++ --
逗号 ,
分支结构
if
switch
循环结构
for
while
do...while
跳转结构
break
continue
goto
return
指针
数组
函数
结构体
共用体
枚举
预处理
文件IO(标准IO)
文件的操作
fopen fclose fread fwrite fseek fflush
(1).把一个.c文件编译成一个可执行文件,需要经历哪些阶段 hello.c -> a.out
源文件 被处理过的源文件 汇编文件 目标文件
hello.c------>hello.i----->hello.s---->hello.o----->
预处理 编译 汇编 链接
(2).在预处理阶段会做哪些操作?
文件包含 #include
条件编译
宏定义 #define
(3).文件包含中,"" 和 <> 有啥区别
<> : 从指定的目录中查找头文件(/usr/include),
如果找不到,就报错
"" : 从当前目录中查找头文件
如果找不到,再从指定的目录中查找头文件
线性存储 顺序表 数组 一维数组 多维数组 二维数组 链表 有头/无头 头节点 单向/双向 遍历方向 循环/不循环 环状结构 普通链表->引入链式存储结构 通用性强的链表->通用性强 内核链表 ================================= 1.可以在PC机中写出通用性强的链表 2.大家可以使用内核链表 3.大家可以在纸上写出链表的增删改查 ================================= 栈式存储结构 先进后出 队列存储结构 先进先出 树状存储结构 树 二叉树 完全二叉树 满二叉树 -------------- 平衡二叉树 ========================== 面试题 遍历方法 先序(根) 根左右 中序(根) 左根右 后序(根) 左右根 1->给了一棵树,写三种遍历方法 2->给了中序,任意给一个先序或者后序 然后画出这棵树 ==========================
文件IO(系统调用和标准IO)
信号
signal(int signum, )
进程
线程
进程间通信
网络套接字
TCP/UDP
QT
在硬件上写软件的驱动程序
应用程序 微信 QQ 游戏
应用层 图形库 jpg jpeg
库文件 lib(静态库 动态库)
根文件系统(把硬盘中的二进制数据,识别成)
不同格式的文件
底层 kernel Linux内核 android内核
bootloader(BIOS + GRUB)
GRUB(引导内核)
软件 BIOS(初始化硬件/检测硬件)
================================
硬件 CPU + 内存 + 硬盘 + 外设(键盘 鼠标 屏幕)
华为公司总结的物联网项目框架
应用层 http mqtt coap
平台层 小米 小米IoT
华为 Ocean Connect
阿里 AIoT
百度 百度天工
移动 OneNet
联通 中国联网物联网
-----------------------
很多中小型公司也会有自己公司的物联网云平台
ESLink iot.embsky.com
网络层 WiFi模块
感知层 STM32F103RBT6芯片的单片机开发板
-----------------------------------
例子:
5G技术(第5代)
增强型的移动互联网络 -> 虚拟现实(VR)
VR->AR->MR...
超高可靠性超低时延的业务 -> 车联网
车联网(自动驾驶 无人驾驶)
远程医疗
海量的物联业务 -> 物联网
-----------------------------------
智能终端 : 单片机驱动开发 / 芯片模组开发
边缘计算 : 高端ARM芯片的驱动开发
有些公司除了使用高端的ARM芯片
也是使用高端的单片机芯片
===================================
例子 :
CPU 中央处理器
显卡(GPU) 图像处理单元
显卡 边缘计算
人工智能 -> 英伟达
寒武纪 -> 人工智能加速卡
===================================
中控平板
人机交互
智能音箱
小爱同学
天猫精灵
公司 : 结果
学习 : 过程
通过开发板俯视图,了解开发板上焊接的设备
无论是SOC(高端芯片)还是MCU(单片机芯片),都是可以
自己组成一个微型的计算机系统
STM32F103RBT6 = CPU + 内存 + 硬盘 + 外设
CPU ARM-CORTEX-M3(72MHz)
内存 用来支援运行的程序
硬盘 存储的是烧写的程序
外设 程序员通过外设来操作芯片
S5P6818 = CPU + 内存 + 硬盘 + 外设
CPU ARM-CORTEX-A53
内存 用来执行硬盘中的程序
硬盘 存储的是三星公司出产芯片时写入
的程序
外设 比单片机外设多很多
ARM是一家公司,在英国剑桥成立,在2016年底ARM公司
被日本软银收购了(234亿英镑)
从ARM11之后,重新命名
ARM-CORTEX-A 高精尖的应用产品(手机 安卓电视)
ARM-CORTEX-A57
ARM-CORTEX-R 实时操作系统
军工 高端医疗 航空航天
ARM-CORTEX-M 工业控制(工控领域)
ST公司,意法半导体公司,全球比较大的半导体厂商公司
研发半导体芯片
STM32 32位芯片
STM8 8位芯片
=================================
使用8位的芯片,计算两个16位数据的和
低8位计算一次,高8位计算一次
=================================
打开<STM32RBT6\DataSheet\STM32>目录下
<ST_MCU最新选型手册.pdf> P22
STM32F103RBT6
FLASH SIZE(硬盘) 128Kb
RAM SIZE(内存) 20Kb
Package(封装形式) 64管脚的封装
Timer functions(定时器) 4×16bit普通
2×看门狗
RTC
24bit定时器
ADC(模数转换器) 16×12bit
16个转换通道
12bit量化位
DAC(数码转换器) 无
I/Os(输入输出的接口) 51
Serial interface(串口) 2个SPI
2个I²C
3个USART/UART
1个USB
1个CAN总线
打开<STM32RBT6\DataSheet\STM32>目录下
<STM32F103RB.pdf> P19
CPU是通过三总线来访问外设的
(数据总线 地址总线 控制总线)
-------------------------
想要把十进制整数100存储到0x12345678地址中
01100100 通过 数据总线 进行传输
0x12345678 通过 地址总线 进行传输
控制总线需要产生写的时序
-------------------------
在STM32芯片中AHB AHB1 AHB2都是三总线,叫做高速总线
APB1 APB2也是三总线,叫做外设总线
顾名思义,高速总线上的工作频率基本上和CPU一样
外设总线上连接的都是外设资源
当程序员想要驱动芯片中的外设时
首先需要使能这个外设的时钟
需要查看该外设连接了哪个总线,需要通过总线打开时钟
------------------------------
例如:
想要驱动GPIOA外设,已知GPIOA连接了APB2总线
所以在驱动之前需要通过APB2总线使能GPIOA的时钟
(除非操作的外设有自己的时钟源)
------------------------------
在STM32F103RBT6芯片中所有GPIO外设连接到了APB2总线
但是不一定所有的ST芯片都是一样的
(不同的芯片看不同的手册)
基本上每一组GPIO都会有16个管脚[0 - 15]
GPIOXY
X = A B C D
Y = 0 1 2 3 ... 15
PA10 : GPIOA组的第10个管脚
PC0 : GPIOC组的第0个管脚
在STM32F103RBT6芯片中
PA0 - PA15
PB0 - PB15
PC0 - PC15
PD0 PD1 PD2
一共是51个I/O管脚
芯片的管脚是多功能复用型的管脚
输入功能
上拉输入
下拉输入
浮空输入
输出功能
推挽输出
开漏输出
复用功能
推挽复用
开漏复用
模拟功能
模拟输入