目 录
前 言
第1章 如何安装KEIL5
1.1 温馨提示
1.2 获取KEIL5安装包
1.3 开始安装KEIL5
1.4 安装STM32芯片包
第2章 如何用DAP仿真器下载程序
2.1 仿真器简介
2.2 硬件连接
2.3 仿真器配置
2.4 选择目标板
2.5 下载程序
第3章 初识STM32
3.1 什么是STM32
3.2 STM32能做什么
3.2.1 智能手环
3.2.2 微型四轴飞行器
3.2.3 淘宝众筹
3.3 STM32选型
3.3.1 STM32分类
3.3.2 STM32命名方法
3.3.3 选择合适的MCU
第4章 寄存器
4.1 寄存器简介
4.2 STM32的外观
4.3 芯片里面有什么
4.4 存储器映射
4.5 寄存器映射
4.5.1 STM32的外设地址映射
4.5.2 C语言对寄存器的封装
第5章 新建工程——寄存器版
5.1 新建本地工程文件夹工程
5.1.1 新建本地工程文件夹
5.1.2 新建工程
5.2 下载程序
第6章 使用寄存器点亮LED
6.1 GPIO简介
6.2 GPIO框图剖析
6.2.1 基本结构分析
6.2.2 GPIO工作模式
6.3 实验:使用寄存器点亮LED
6.3.1 硬件连接
6.3.2 启动文件
6.3.3 stm32f4xx.h文件
6.3.4 main文件
6.3.5 下载验证
第7章 自己写库——构建库函数雏形
7.1 STM32函数库简介
7.2 采用库来开发及学习的原因
7.3 实验:构建库函数雏形
7.3.1 修改寄存器地址封装
7.3.2 定义访问外设的结构体指针
7.3.3 定义初始化结构体
7.3.4 定义引脚模式的枚举类型
7.3.5 定义GPIO初始化函数
7.3.6 使用函数点亮LED
7.3.7 下载验证
7.3.8 总结
第8章 初识STM32标准库
8.1 CMSIS标准及库层次关系
8.1.1 库目录、文件简介
8.1.2 各库文件间的关系
8.2 使用帮助文档
8.2.1 常用官方资料
8.2.2 初识库函数
第9章 新建工程——库函数版
9.1 新建本地工程文件夹
9.2 新建工程
9.3 配置魔术棒选项卡
9.4 下载器配置
9.5 选择Flash大小
第10章 GPIO输出——使用固件库点亮LED
10.1 硬件设计
10.2 软件设计
10.2.1 编程要点
10.2.2 代码分析
10.2.3 下载验证
10.3 STM32标准库补充知识
第11章 GPIO输入——按键检测
11.1 硬件设计
11.2 软件设计
11.2.1 编程要点
11.2.2 代码分析
11.2.3 下载验证
第12章 GPIO——位带操作
12.1 位带简介
12.1.1 外设位带区
12.1.2 SRAM位带区
12.1.3 位带区和位带别名区地址转换
12.2 GPIO位带操作
第13章 启动文件
13.1 启动文件简介
13.2 查找ARM汇编指令
13.3 启动文件代码讲解
第14章 RCC——使用HSE/HSI配置时钟
14.1 RCC主要作用——时钟部分
14.2 RCC框图剖析——时钟树
14.2.1 系统时钟
14.2.2 其他时钟
14.3 配置系统时钟实验
14.3.1 使用HSE
14.3.2 使用HSI
14.3.3 硬件设计
14.3.4 软件设计
14.3.5 下载验证
第15章 STM32中断应用概览
15.1 异常类型
15.2 NVIC简介
15.2.1 NVIC寄存器简介
15.2.2 NVIC中断配置固件库
15.3 优先级的定义
15.3.1 优先级定义
15.3.2 优先级分组
15.4 中断编程
第16章 EXTI——外部中断/事件控制器
16.1 EXTI简介
16.2 EXTI功能框图
16.3 中断/事件线
16.4 EXTI初始化结构体详解
16.5 外部中断控制实验
16.5.1 硬件设计
16.5.2 软件设计
16.5.3 下载验证
第17章 SysTick——系统定时器
17.1 SysTick简介
17.2 SysTick寄存器介绍
17.3 SysTick定时实验
17.3.1 硬件设计
17.3.2 软件设计
第18章 通信的基本概念
18.1 串行通信与并行通信
18.2 全双工、半双工及单工通信
18.3 同步通信与异步通信
18.4 通信速率
第19章 USART——串口通信
19.1 串口通信协议简介
19.1.1 物理层
19.1.2 协议层
19.2 STM32的USART简介
19.3 USART功能框图
19.4 USART初始化结构体详解
19.5 USART1接发通信实验
19.5.1 硬件设计
19.5.2 软件设计
19.5.3 下载验证
19.6 USART1指令控制RGB彩灯实验
19.6.1 硬件设计
19.6.2 软件设计
19.6.3 下载验证
第20章 DMA
20.1 DMA简介
20.2 DMA功能框图
20.3 DMA数据配置
20.4 DMA初始化结构体详解
20.5 DMA存储器到存储器模式实验
20.5.1 硬件设计
20.5.2 软件设计
20.5.3 下载验证
20.6 DMA存储器到外设模式实验
20.6.1 硬件设计
20.6.2 软件设计
20.6.3 下载验证
第21章 常用存储器介绍
21.1 存储器种类
21.2 RAM存储器
21.2.1 DRAM
21.2.2 SRAM
21.2.3 DRAM与SRAM的应用场合
21.3 非易失性存储器
21.3.1 ROM存储器
21.3.2 Flash存储器
第22章 I2C——读写EEPROM
22.1 I2C协议简介
22.1.1 I2C物理层
22.1.2 协议层
22.2 STM32的I2C特性及架构
22.2.1 STM32的I2C外设简介
22.2.2 STM32的I2C架构剖析
22.2.3 通信过程
22.3 I2C初始化结构体详解
22.4 I2C——读写EEPROM实验
22.4.1 硬件设计
22.4.2 软件设计
22.4.3 下载验证
第23章 SPI——读写串行Flash
23.1 SPI协议简介
23.1.1 SPI物理层
23.1.2 协议层
23.2 STM32的SPI特性及架构
23.2.1 STM32的SPI外设简介
23.2.2 STM32的SPI架构剖析
23.2.3 通信过程
23.3 SPI初始化结构体详解
23.4 SPI——读写串行Flash实验
23.4.1 硬件设计
23.4.2 软件设计
23.4.3 下载验证
第24章 串行Flash文件系统FatFs
24.1 文件系统
24.2 FatFs文件系统简介
24.2.1 FatFs的目录结构
24.2.2 FatFs帮助文档
24.2.3 FatFs源码
24.3 FatFs文件系统移植实验
24.3.1 FatFs程序结构图
24.3.2 硬件设计
24.3.3 FatFs移植步骤
24.3.4 FatFs底层设备驱动函数
24.3.5 FatFs功能配置
24.3.6 FatFs功能测试
24.3.7 下载验证
24.4 FatFs功能使用实验
24.4.1 硬件设计
24.4.2 软件设计
24.4.3 下载验证
第25章 FMC——扩展外部SDRAM
25.1 SDRAM控制原理
25.1.1 SDRAM信号线
25.1.2 控制逻辑
25.1.3 地址控制
25.1.4 SDRAM的存储阵列
25.1.5 数据输入输出
25.1.6 SDRAM的命令
25.1.7 SDRAM的初始化流程
25.1.8 SDRAM的读写流程
25.2 FMC简介
25.3 FMC框图剖析
25.4 FMC的地址映射
25.5 SDRAM时序结构体
25.6 SDRAM初始化结构体
25.7 SDRAM命令结构体
25.8 FMC——扩展外部SDRAM实验
25.8.1 硬件设计
25.8.2 软件设计
25.8.3 下载验证
第26章 LTDC/DMA2D——液晶显示
26.1 显示器简介
26.1.1 液晶显示器
26.1.2 LED和OLED显示器
26.1.3 显示器的基本参数
26.2 液晶屏控制原理
26.2.1 液晶面板的控制信号
26.2.2 液晶数据传输时序
26.2.3 显存
26.3 LTDC液晶控制器简介
26.3.1 图像数据混合
26.3.2 LTDC结构框图剖析
26.4 DMA2D图形加速器简介
26.5 LTDC初始化结构体
26.6 LTDC层级初始化结构体
26.7 DMA2D初始化结构体
26.8 LTDC/DMA2D——液晶显示实验
26.8.1 硬件设计
26.8.2 软件设计
26.8.3 下载验证
第27章 LTDC——液晶显示中英文
27.1 字符编码
27.1.1 ASCII编码
27.1.2 中文编码
27.1.3 Unicode字符集和编码
27.1.4 UTF-32
27.1.5 UTF-16
27.1.6 UTF-8
27.1.7 BOM
27.2 字模简介
27.2.1 字模的构成
27.2.2 字模显示原理
27.2.3 如何制作字模
27.2.4 字模寻址公式
27.2.5 存储字模文件
27.3 LTDC——各种模式的液晶显示字符实验
27.3.1 硬件设计
27.3.2 显示ASCII编码的字符
27.3.3 显示GB2312编码的字符
27.3.4 显示任意大小的字符
27.3.5 下载验证
第28章 电容触摸屏——触摸画板
28.1 触摸屏简介
28.1.1 电阻触摸屏检测原理
28.1.2 电容触摸屏检测原理
28.2 电容触摸屏控制芯片
28.2.1 GT9157芯片的引脚
28.2.2 上电时序与I2C设备地址
28.2.3 寄存器配置
28.2.4 读取坐标信息
28.3 电容触摸屏——触摸画板实验
28.3.1 硬件设计
28.3.2 软件设计
28.3.3 下载验证
第29章 ADC——电压采集
29.1 ADC简介
29.2 ADC功能框图剖析
29.2.1 ADC功能
29.2.2 电压转换
29.3 ADC初始化结构体详解
29.4 独立模式单通道采集实验
29.4.1 硬件设计
29.4.2 软件设计
29.4.3 下载验证
29.5 独立模式多通道采集实验
29.5.1 硬件设计
29.5.2 软件设计
29.5.3 下载验证
29.6 三重ADC交替模式采集实验
29.6.1 硬件设计
29.6.2 软件设计
29.6.3 下载验证
第30章 TIM——基本定时器
30.1 TIM简介
30.2 基本定时器
30.3 基本定时器功能框图
30.4 定时器初始化结构体详解
30.5 基本定时器定时实验
30.5.1 硬件设计
30.5.2 软件设计
30.5.3 下载验证
第31章 TIM——高级定时器
31.1 高级控制定时器
31.2 高级控制定时器功能框图
31.3 输入捕获应用
31.3.1 测量脉宽或者频率
31.3.2 PWM输入模式
31.4 输出比较应用
31.5 定时器初始化结构体详解
31.6 PWM互补输出实验
31.6.1 硬件设计
31.6.2 软件设计
31.6.3 下载验证
31.7 PWM输入捕获实验
31.7.1 硬件设计
31.7.2 软件设计
31.7.3 下载验证
第32章 TIM——电容按键检测
32.1 电容按键原理
32.2 电容按键检测实验
32.2.1 硬件设计
32.2.2 软件设计
32.2.3 下载验证
第33章 SDIO——SD卡读写测试
33.1 SDIO简介
33.2 SD卡物理结构
33.3 SDIO总线
33.3.1 总线拓扑
33.3.2 总线协议
33.3.3 命令
33.3.4 响应
33.4 SD卡的操作模式及切换
33.4.1 SD卡的操作模式
33.4.2 卡识别模式
33.4.3 数据传输模式
33.5 STM32的SDIO功能框图
33.6 SDIO初始化结构体
33.7 SDIO命令初始化结构体
33.8 SDIO数据初始化结构体
33.9 SD卡读写测试实验
33.9.1 硬件设计
33.9.2 软件设计
33.9.3 下载验证
第34章 基于SD卡的FatFs文件系统
34.1 FatFs移植步骤
34.2 FatFs接口函数
34.3 FatFs功能测试
第35章 I2S——音频播放与录音输入
35.1 I2S简介
35.1.1 数字音频技术
35.1.2 I2S总线接口
35.1.3 音频数据传输协议标准
35.2 I2S功能框图
35.3 WM8978音频编译码器
35.4 WAV格式文件
35.4.1 RIFF文件规范
35.4.2 WAV文件
35.4.3 WAV文件实例分析
35.5 I2S初始化结构体详解
35.6 录音与回放实验
35.6.1 硬件设计
35.6.2 软件设计
35.6.3 下载验证
35.7 MP3播放器
35.7.1 MP3文件结构
35.7.2 MP3解码库
35.7.3 Helix解码库移植
35.7.4 MP3播放器功能实现
35.7.5 下载验证
第36章 ETH——LwIP以太网通信
36.1 互联网模型
36.2 以太网
36.2.1 PHY层
36.2.2 MAC子层
36.3 TCP/IP协议栈
36.3.1 需要协议栈的原因
36.3.2 各网络层的功能
36.4 以太网外设
36.4.1 SMI接口
36.4.2 MII和RMII接口
36.4.3 MAC数据包发送和接收
36.4.4 MAC过滤
36.5 PHY:LAN8720A
36.6 LwIP:轻型TCP/IP协议栈
36.7 ETH初始化结构体详解
36.8 以太网通信实验:无操作系统LwIP移植
36.8.1 硬件设计
36.8.2 移植步骤
36.8.3 下载验证
36.9 基于μCOS-III移植LwIP实验
第37章 CAN——通信实验
37.1 CAN协议简介
37.1.1 CAN物理层
37.1.2 协议层
37.2 STM32的CAN外设简介
37.3 CAN初始化结构体
37.4 CAN发送及接收结构体
37.5 CAN筛选器结构体
37.6 CAN——双机通信实验
37.6.1 硬件设计
37.6.2 软件设计
37.6.3 下载验证
第38章 RS-485通信实验
38.1 RS-485通信协议简介
38.2 RS-485——双机通信实验
38.2.1 硬件设计
38.2.2 软件设计
38.2.3 下载验证
第39章 电源管理——实现低功耗
39.1 STM32的电源管理简介
39.1.1 电源监控器
39.1.2 STM32的电源系统
39.1.3 STM32的功耗模式
39.2 电源管理相关的库函数及命令
39.2.1 配置PVD监控功能
39.2.2 WFI与WFE命令
39.2.3 进入停止模式
39.2.4 进入待机模式
39.3 PWR——睡眠模式实验
39.3.1 硬件设计
39.3.2 软件设计
39.3.3 下载验证
39.4 PWR——停止模式实验
39.4.1 硬件设计
39.4.2 软件设计
39.4.3 下载验证
39.5 PWR——待机模式实验
39.5.1 硬件设计
39.5.2 软件设计
39.5.3 下载验证
39.6 PWR——PVD电源监控实验
39.6.1 硬件设计
39.6.2 软件设计
39.6.3 下载验证
第40章 RTC——实时时钟
40.1 RTC简介
40.2 RTC功能框图解析
40.3 RTC初始化结构体讲解
40.4 RTC时间结构体讲解
40.5 RTC日期结构体讲解
40.6 RTC闹钟结构体讲解
40.7 RTC—日历实验
40.7.1 硬件设计
40.7.2 软件设计
40.7.3 下载验证
40.8 RTC—闹钟实验
40.8.1 硬件设计
40.8.2 软件设计
40.8.3 下载验证
第41章 DCMI——OV5640摄像头
41.1 摄像头简介
41.1.1 数字摄像头与模拟摄像头的区别
41.1.2 CCD与CMOS的区别
41.2 OV5640摄像头
41.2.1 OV5640传感器简介
41.2.2 OV5640引脚及功能框图
41.2.3 SCCB时序
41.2.4 OV5640的寄存器
41.2.5 像素数据输出时序
41.3 STM32的DCMI接口简介
41.3.1 DCMI整体框图
41.3.2 DCMI接口内部结构
41.3.3 同步方式
41.3.4 捕获模式及捕获率
41.4 DCMI初始化结构体
41.5 DCMI——OV5640摄像头实验
41.5.1 硬件设计
41.5.2 软件设计
41.5.3 下载验证
第42章 MDK的编译过程及文件类型全解
42.1 编译过程
42.1.1 编译过程简介
42.1.2 具体工程中的编译过程
42.2 程序的组成、存储与运行
42.2.1 CODE、RO、RW、ZI Data域及堆栈空间
42.2.2 程序的存储与运行
42.3 编译工具链
42.3.1 设置环境变量
42.3.2 armcc、armasm及armlink
42.3.3 armar、fromelf及用户指令
42.4 MDK工程的文件类型
42.4.1 uvprojx、uvoptx、uvguix及ini工程文件
42.4.2 源文件
42.4.3 Output目录下生成的文件
42.4.4 Listing目录下的文件
42.4.5 sct分散加载文件的格式与应用
42.5 实验:自动分配变量到外部SDRAM空间
42.5.1 硬件设计
42.5.2 软件设计
42.5.3 下载验证
42.6 实验:优先使用内部SRAM并把堆区分配到SDRAM空间
42.6.1 硬件设计
42.6.2 软件设计
42.6.3 下载验证
第43章 在SRAM中调试代码
43.1 在RAM中调试代码
43.2 STM32的启动方式
43.3 内部Flash的启动过程
43.4 实验:在内部SRAM中调试代码
43.4.1 硬件设计
43.4.2 软件设计
43.4.3 下载验证
第44章 读写内部Flash
44.1 STM32的内部Flash简介
44.2 对内部Flash的写入过程
44.3 查看工程的空间分布
44.4 操作内部Flash的库函数
44.5 实验:读写内部Flash
44.5.1 硬件设计
44.5.2 软件设计
44.5.3 下载验证
第45章 设置Flash的读写保护及解除
45.1 选项字节与读写保护
45.1.1 选项字节的内容
45.1.2 RDP读保护级别
45.1.3 PCROP代码读出保护
45.2 修改选项字节的过程
45.3 操作选项字节的库函数
45.4 实验:设置读写保护及解除
45.4.1 硬件设计
45.4.2 软件设计
45.4.3 下载验证
《STM32库开发实战指南:基于STM32F4》----导读
时间: 2024-12-30 11:25:03
《STM32库开发实战指南:基于STM32F4》----导读的相关文章
《深入理解Scala》——第1章,第1.2节当函数式编程遇见面向对象
1.2 当函数式编程遇见面向对象 深入理解Scala 函数式编程和面向对象编程是软件开发的两种不同途径.函数式编程并非什么新概念,在现代开发者的开发工具箱里也绝非是什么天外来客.我们将通过Java生态圈里的例子来展示这一点,主要来看Spring Application framework和Google Collections库.这两个库都在Java的面向对象基础上融合了函数式的概念,而如果我们把它们翻译成Scala,则会优雅得多.在深入之前,我们需要先理解面向对象编程和函数式编程这两个术语的含义
《深入理解Scala》——第1章,第1.4节与JVM的无缝集成
1.4 与JVM的无缝集成 深入理解Scala Scala的吸引力之一在于它与Java和JVM的无缝集成.Scala与Java有很强的兼容性,比如说Java类可以直接映射为Scala类.这种紧密联系使Java到Scala的迁移相当简单,但在使用Scala的一些高级特性时还是需要小心的,Scala有些高级特性是Java里没有的.在Scala语言设计时已经小心地考虑了与Java无缝交互的问题,用Java写的库,大部分可以直接照搬(as-is)到Scala里. 1.4.1 Scala调用Java 从S
《深入理解Scala》——第2章,第2.1节学习使用Scala交互模式(REPL)
第2章 核心规则深入理解Scala 本章包括的内容: • 使用Scala交互模式(Read Eval Print Loop 简称REPL) • 面向表达式编程 • 不变性(Immutability) • Option类 本章内容覆盖了每个新Scala开发者都需要知道的几个主题.本章不会深入到每个主题里,但是会讲到可以让你自己去接着探索的程度.你将学会使用REPL,学会如何利用这个工具做软件的快速原型开发.然后我们会学到面向表达式编程,并从另一个视角来看控制结构是怎么回事.在此基础上,我们来研究不
《深入理解Scala》——第1章,第1.3节静态类型和表达力
1.3 静态类型和表达力 深入理解Scala 开发人员中有一个误解,认为静态类型必然导致冗长的代码.之所以如此是因为很多继承自C的语言强制要求程序员必须在代码中多处明确地指定类型.随着软件开发技术和编译器理论的发展,情况已经改变.Scala利用了其中一些技术进步来减少样板(boilerplate)代码,保持代码简洁. Scala做了以下几个简单的设计决策,以提高代码表达力. • 把类型标注(type annotation)换到变量右边. • 类型推断. • 可扩展的语法. • 用户自定义的隐式转
《深入理解Scala》——第1章,第1.5节总结
1.5 总结 深入理解Scala 本章中,你学到了一些Scala的设计理念.设计Scala的初衷在于把不同语言中的多种概念融合起来.Scala融合了函数式和面向对象编程,尽管显然Java也已经这么做了.Scala精选其语法,极大地减少了语言中的繁冗之处,使一些强大的特性可以优雅地表达,比如类型推断.最后,Scala和Java能够紧密集成,而且运行在Java虚拟机上,这或许是让Scala变成一种实用选择的最重要的一点.几乎不花代价就可以把Scala用于我们的日常工作中. 因为Scala融合了多种概
《深入理解Scala》——第1章,第1.1节Scala一种混合式编程语言
第1章 Scala--一种混合式编程语言 Scala是一种将其他编程语言中的多种技巧融合为一的语言.Scala尝试跨越多种不同类型的语言,给开发者提供面向对象编程.函数式编程.富有表达力的语法.静态强类型和丰富的泛型等特性,而且全部架设于Java虚拟机之上.因此开发者使用Scala时可以继续使用原本熟悉的某种编程特性,但要发挥Scala的强大能力则需要结合使用这些有时候相互抵触的概念和特性,建立一种平衡的和谐.Scala对开发者的真正解放之处在于让开发者可以随意使用最适合手头上的问题的编程范式.
《深入理解Scala》——第2章,第2.2节优先采用面向表达式编程
2.2 优先采用面向表达式编程 深入理解Scala 面向表达式编程是个术语,意思是在代码中使用表达式而不用语句.表达式和语句的区别是什么?语句是可以执行的东西,表达式是可以求值的东西.在实践中这有什么意义呢?表达式返回值,语句执行代码,但是不返回值.本节我们将学习面向表达式编程的全部知识,并理解它对简化程序有什么帮助.我们也会看一下对象的可变性,以及可变性与面向表达式编程的关系. 作者注:语句VS表达式 语句是可以执行的东西,表达式是可以求值的东西. 表达式是运算结果为一个值的代码块.Scala
《深入理解Scala》——第2章,第2.3节优先选择不变性
2.3 优先选择不变性 深入理解Scala 编程中的不变性指对象一旦创建后就不再改变状态.这是函数式编程的基石之一,也是JVM上的面向对象编程的推荐实践之一.Scala也不例外,在设计上优先选择不变性,在很多场景中把不变性作为默认设置.对此,你可能一下子会不适应.本节中,我们将学到不变性对于判等问题和并发编程能提供什么帮助. Scala里首先要明白的是不变对象和不变引用(immutable referene)的区别.Scala里的所有变量都是指向对象的引用.把变量声明为val意味着它是个不变"引
《深入理解Scala》——第2章,第2.4节用None不用null
2.4 用None不用null深入理解Scala Scala在标准库里提供了scala.Option类,鼓励大家在一般编程时尽量不要使用null.Option可以视作一个容器,里面要么有东西,要么什么都没有.Option通过两个子类来实现此含义:Some和None.Some表示容器里有且仅有一个东西,None表示空容器,有点类似List的Nil的含义. 在Java和其他允许null的语言里,null经常作为一个占位符用于返回值,表示非致命的错误,或者表示一个变量未被初始化.Scala里,你可以用
《深入理解Scala》——第2章,第2.5节多态场景下的判等
2.5 多态场景下的判等 深入理解Scala 众所周知,为多态的面向对象系统定义合适的判等和散列方法是个特别难的过程.这是因为子类可能在整个过程中造成一些相当怪异的问题,尤其是当类型层次上有多个实体(concrete)级别的时候.一般来说,对于需要比引用判等更强的判等(译者注:比如需要判断对象内部数据)的类,最好避免多层实体类层次.这是什么意思呢?有些时候类只需要引用判等就够了.也就是说只要两个对象不是同一个实例就判为不等.但是如果我们需要判断两个不同实例是否相等,而且又有多层实体类层次(mul