野火ISO/硬件介绍篇
1. 原理图与硬件图
1.1. 原理图
1.2. 硬件图
野火ISO/基础入门篇
1. 搭建开发环境
1.1. 安装JLINK驱动
1.2. 安装MDK
1.3. 和谐MDK
1.4. 1.4编译程序
1.5. 下载程序
1.5.1. JLINK下载
1.5.2. 串口下载
1.5.3. 串口下载与JLINK下载对比
2. 新建工程
2.1.1. 获取ST库源码
2.1.2. 开始新建工程
2.1.3. 硬件调试配置
3. 初识STM32库
3.1. STM32神器之库开发
3.1.1. 什么是STM32库?
3.1.2. 为什么采用库来开发?
3.2. STM32结构及库层次关系
3.2.1. CMSIS标准
3.2.2. 库目录、文件简介
core_cm3.c文件
system_stm32f10x.c文件
stm32f10x.h文件
启动文件
STM32F10x_StdPeriph_Driver文件夹
stm32f10x_it.c、 stm32f10x_conf.h文件
3.2.3. 库各文件间的关系
3.2.4. 使用库帮助文档
常用官方资料
初识库函数
4. GPIO-流水灯的前后今生
4.1. STM32的GPIO
4.2. STM32的地址映射
温故而知新——stm32f10x.h文件
外设基地址
总线基地址
寄存器组基地址
4.3. STM32库对寄存器的封装
4.4. STM32的时钟系统
4.4.1. 时钟树&时钟源
4.4.2. 高速外部时钟(HSE)
4.4.3. HCLK、FCLK、PCLK1、PCLK2
4.5. LED具体代码分析
4.5.1. 实验描述及工程文件清单
4.5.2. 配置工程环境
4.5.3. 编写用户文件
4.5.4. 初始化结构体——GPIO_InitTypeDef类型
4.5.5. 初始化库函数——GPIO_Init()
4.5.6. 开启外设时钟
启动文件及SystemInit()函数分析
开启外设时钟
4.5.7. 控制I/O输出高、低电平
4.5.8. led.h文件
4.5.9. main文件
4.5.10. 实验现象
4.6. GPIO_Init()函数的实现
4.6.1. 规范的位操作方法
4.6.2. GPIO_Init()实现代码分析
4.6.3. 再论开发方式
5. POLLING-按键
5.1. GPIO的8种工作模式
5.1.1. 四种输入模式
5.1.2. 四种输出模式
5.2. 按键实验分析
5.3按键代码分析
5.2.1. 实验描述及工程文件清单
5.2.2. 配置工程环境
5.2.3. main文件
5.2.4. GPIO初始化配置
5.2.5. 利用库的数据类型
5.2.6. 实现LED反转
5.2.7. 实验现象
6. 6、EXTI-按键
6.1. STM32的中断和异常
6.2. NVIC中断控制器
6.2.1. NVIC结构体成员
6.2.2. 抢占优先级和响应优先级
6.2.3. NVIC的优先级组
6.3. EXTI外部中断
6.4. 中断检测按键实验分析
6.4.1. 实验描述及工程文件清单
6.4.2. 配置工程环境
6.4.3. main文件
6.4.4. 配置外部中断
6.4.5. AFIO时钟
6.4.6. NVIC初始化配置
6.4.7. EXTI初始化配置
6.4.8. 编写中断服务函数
6.4.9. 实验现象
7. SysTick(系统定时器)
7.1. SysTick——操作系统的心跳
7.2. SysTick timer工作分析
7.3. SysTick精确延时实例精讲
7.3.1. 实验描述及工程文件清单
7.3.2. 配置工程环境
7.3.3. main文件
7.3.4. 配置并启动SysTick timer
检查输入参数
位指示宏及位屏蔽宏
配置中断向量及重置STK_VAL寄存器
配置SysTick timer时钟为AHB
使能、关闭定时器
7.3.5. 定时时间的计算
7.3.6. 编写中断服务函数
7.3.7. 使用SysTick的测量时间的功能
7.3.8. 实验现象
8. 串口通信
8.1. 异步串口通讯协议
8.2. 直通线和交叉线
8.3. 串口工作过程分析
8.3.1. 波特率控制
8.3.2. 收发控制
8.3.3. 数据存储转移部分
8.4. 串口通讯实验分析
8.4.1. 实验描述及工程文件清单
8.4.2. 配置工程环境
8.4.3. main文件
8.4.4. USART初始化配置
GPIO初始化
USART初始化
8.4.5. printf()函数重定向
8.4.6. USART1_printf()函数
8.4.7. 实验现象
9. DMA—为CPU减负
9.1. DMA功能简介
9.2. DMA工作分析
9.3. DMA实例之串口通信
9.3.1. 实验描述及工程文件清单
9.3.2. 配置工程环境
9.3.3. main文件
9.3.4. DMA初始化
9.3.5. 使用DMA中断
9.3.6. 实验现象
10. ADC实验(DMA方式)
10.1. ADC简介
10.2. STM32的ADC主要技术指标
10.3. ADC工作过程分析
10.4. ADC采集数据实例(采用DMA模式)
10.4.1. 实验描述及工程文件清单
10.4.2. 配置工程环境
10.4.3. main文件
10.4.4. ADC初始化
配置GPIO端口
配置DMA
配置ADC模式
ADC转换时间配置
ADC自校准
volatile变量
10.4.5. 计算电压值
10.4.6. 实验现象
10.5. ADC1芯片内部温度检测实验
10.5.1. 实验描述及工程文件清单
10.5.2. 配置工程环境
10.5.3. main文件
10.5.4. ADC初始化
10.5.5. 实验现象
11. FSMC-液晶显示-英文
11.1. LCD控制器简介
11.1.1. ILI9341控制器结构
11.1.2. 像素点的数据格式
11.1.3. ILI9341的通讯时序
11.2. 用STM32驱动LCD
11.2.1. FSMC简介
11.2.2. 用FSMC模拟8080时序
11.3. 实验代码分析
11.3.1. 液晶清屏显示
11.3.2. 液晶显示英文
什么是字模
制作ASCII码字模
11.3.3. 液晶显示变量
12. I2C-EEPROM
12.1. I2C协议简介
12.1.1. 物理层
12.1.2. 协议层
12.2. STM32的I2C特性及架构
12.2.1. I2C接口特性
12.2.2. I2C架构
12.3. I2C接口读写EEPROM实验
12.3.1. 实验描述及工程文件清单
12.3.2. 配置工程环境
12.3.3. main文件
12.3.4. I2C接口初始化
EEPROM的地址
GPIO端口初始化
I2C模式初始化
12.3.5. 对EEPROM的读写操作
EEPROM的页写入时序
I2C事件检测
等待EEPROM内部写入完成
EEPROM读取函数
12.3.6. 使用I2C读写EEPROM流程总结
12.3.7. 实验现象
13. SPI-FLASH
13.1. SPI协议简介
13.1.1. SPI信号线
13.1.2. SPI模式
13.2. STM32的SPI特性及架构
13.2.1. STM32的SPI特性
13.2.2. STM32的SPI架构分析
13.3. SPI接口读取FLASH实例分析
13.3.1. 实验描述及工程文件清单
13.3.2. 配置工程环境
13.3.3. main文件
13.3.4. SPI初始化
GPIO端口初始化
SPI模式初始化
13.3.5. 控制FLASH的命令
13.3.6. 读取厂商ID
13.3.7. 擦除FLASH内容
扇区擦除
写使能
读FLASH状态
13.3.8. 向FLASH写入数据
13.3.9. 从FLASH读取数据
13.3.10. 小结
13.3.11. 实验现象
14. 定时器
14.1. 定时器功能简介
14.2. 定时器工作分析
14.2.1. 基本定时器
14.2.2. 通用定时器
捕获/比较寄存器
PWM输出过程分析
测量PWM输入过程分析
定时器的时钟源
14.2.3. 高级定时器
死区控制
14.3. PWM输出实例分析
14.3.1. 实验描述及工程文件清单
14.3.2. 配置工程环境
14.3.3. main文件
14.3.4. 定时器初始化
GPIO初始化
时基初始化
输出模式配置
14.3.5. 实验现象
15. 呼吸灯
16. RTC实时时钟
16.1. RTC实时时钟简介
16.2. RTC工作过程分析
16.2.1. RTC架构
16.2.2. UNIX时间戳
16.3. 利用RTC提供北京时间实验
16.3.1. 实验描述及工程文件清单
16.3.2. 配置工程环境
16.3.3. main文件
实验代码执行流程
时间管理结构体
16.3.4. 检查RTC
16.3.5. 初始化RTC
16.3.6. 输入当前UNIX时间戳
配置流程
获取时间
计算UNIX时间戳
16.3.7. 输出时间到终端
16.3.8. 实验现象
17. 电源管理
18. CAN通信
18.1. CAN协议简介
18.1.1. 物理层
18.1.2. CAN的报文种类及结构
18.1.3. 报文的种类
18.1.4. 数据帧的结构
仲裁段
控制段
数据段
CRC段
ACK段
帧结束
18.1.5. 同步
位时序分解
同步过程分析
18.2. STM32的CAN特性及架构
18.2.1. CAN特性
18.2.2. CAN架构
18.3. 双CAN通信 实验分析
18.3.1. 实验描述及工程文件清单
18.3.2. 配置工程环境
18.3.3. main文件
主机
从机
18.3.4. 配置CAN接口
GPIO初始化及其重映射功能
NVIC配置
CAN模式配置
CAN过滤器配置
18.3.5. 打包报文
18.3.6. 发送报文
18.3.7. 接收报文、编写中断服务函数
18.3.8. 实验小结
18.3.9. 实验现象
野火ISO/项目提高篇
19. 1、SDIO-SD卡
19.1. 1.1 实验描述及工程文件清单
19.2. 1.2 SDIO简介
19.3. 1.3 SD协议
19.4. 1.4 代码分析
19.5. 1.5实验现象
20. 2、FATFS-文件系统
20.1. 什么是文件系统
20.2. FATFS文件系统简介
20.2.1. FATFS的目录结构
20.2.2. FATFS帮助文档
20.2.3. FATFS源码
20.3. 移植FATFS文件系统实验
20.3.1. 实验描述及工程文件清单
20.3.2. 配置工程环境
20.3.3. 为文件系统添加底层驱动
初始化函数接口
扇区读取函数
扇区写入函数
时间接口函数
20.3.4. 简体中文和长文件支持
20.3.5. main文件
写入文件
读取文件
20.3.6. 实验现象
21. 3、FSMC-液晶显示汉字/图片
21.1. 什么是字模?
21.2. 制作字模
28.1. BMP图片格式
28.1.1. BMP图片分析
0~1字节
3~14字节
14~53字节
28.2. 显示中英文及 BMP图片实验
28.2.1. 实验描述及工程文件清单
28.2.2. 配置工程环境
28.2.3. main文件
28.2.4. 显示汉字
查找字模
28.3. 实现SD卡BMP图像的读取与保存
显示BMP图
LCD截图功能
28.3.2. 实验现象
29. 4、液晶触摸
29.1. LCD控制器简介
29.1.1. ILI9341控制器结构
29.1.2. 像素点的数据格式
29.1.3. ILI9341的通讯时序
29.2. 用STM32驱动LCD
29.2.1. FSMC简介
29.2.2. 用FSMC模拟8080时序
29.3. 触摸屏感应原理
29.4. TSC2046触摸屏控制器
29.5. LCD触摸屏画板实验
29.5.1. 实验描述及工程文件清单
29.5.2. 配置工程环境
29.5.3. main文件
29.5.4. 初始化FSMC模式
初始化液晶屏流程
初始化FSMC模式
29.5.5. FSMC模拟8080读写参数、命令
读写参数、命令
计算地址
给整个屏幕上色
29.5.6. 液晶屏画点函数
29.5.7. 触摸屏校正
29.5.8. 检测触点、画点
29.5.9. 实验现象
30. 5、摄像头-OV7725
30.1. 摄像头的分类
30.1.1. 数字摄像头跟模拟摄像头区别
30.1.2. CCD与CMOS的区别
30.2. OV7670介绍
30.2.1. OV7670功能框架
30.2.2. OV7670管脚封装
30.3. SCCB总线
30.3.1. SCCB接口定义
30.3.2. SCCB时序描述
30.4. 摄像头模块
30.4.1. 摄像头模块硬件介绍。
30.4.2. OV7670输出时序
30.4.3. FIFO时序
30.4.4. 摄像头的驱动原理
30.5. 摄像头驱动实验
30.5.1. 实验描述及工程文件清单
30.5.2. 配置工程环境
30.5.3. main文件
30.5.4. SCCB总线的软件实现
30.5.5. 初始化OV7670
30.5.6. 采集并显示图像
30.5.7. 实验现象
31. 6、I2S-MP3
32. 7、Usb-device
32.1. USB协议分析
32.1.1. 协议版本
32.1.2. USB电气特性
USB接口
USB线缆
NRZI编码
32.1.3. USB通讯模型
USB系统架构
USB主机与设备
USB端点
USB传输类型
32.1.4. USB枚举
32.2. STM32的USB控制器
32.3. USB读取SD卡——模拟U盘实验
32.3.1. 实验描述及工程文件清单
32.3.2. 配置工程环境
32.3.3. USB固件库说明
32.3.4. main文件
32.3.5. 基本配置
SDIO初始化
USB时钟
中断
32.3.6. USB初始化
32.3.7. 中断服务函数
32.3.8. BOT和SCSI协议
BOT
SCSI
传输状态机
代码实现
32.3.9. 实验现象
33. FM收音机
34. 2.4g无线传输
34.1. 9.1 实验描述及工程文件清单
34.2. 9.2 NRF24L01模块简介
34.3. 9.3 代码分析
34.4. 9.4 实验想象
35. 重力感应/三轴加速(MMA7455)
35.1. 10.1 实验描述及工程文件清单
35.2. 10.2 MMA7455简介
35.3. 10.3代码分析
35.4. 10.4实验现象
36. 以太网-Lwip
36.1. 互联网模型
36.2. 以太网
36.2.1. PHY层
传输介质
编码
CSMA/CD冲突检测
36.2.2. MAC子层
MAC的功能
MAC数据包
36.2.3. 以太网控制器
集成MAC控制器的MCU接入方案
外接以太网控制器方案
36.3. MAC之上的网络层
36.3.1. 为什么在MAC之上还有分层?
36.3.2. 各网络层的功能
36.3.3. LwIP协议栈
LwIP协议栈简介
获取LwIP协议栈
36.4. ENC28J60+LwIP 以太网实验
36.4.1. 实验描述及工程文件清单
36.4.2. 配置工程环境
36.4.3. main文件
36.4.4. LwIP对底层数据结构的封装
pbuf结构体
netif结构体
36.4.5. 初始化协议栈
netif_add()函数
36.4.6. LwIP对底层操作的封装
ethernetif_init指针
底层输出函数
底层初始化函数
ethernet_input指针
底层输入函数
36.4.7. 轮询和计时
36.4.8. opt.h文件和debug
裁剪和配置LwIP
LwIP的debug功能
36.4.9. LwIP应用
网络应用软件架构
TCP网络应用
LwIP的应用函数
36.4.10. 网页服务器
36.4.11. 实验现象
37. SRM
38. NANDFLASH
39. NORFLASH
40. 485通信
41. DHT11温湿度传感器
42. DS1302时钟实验
43. PS2接口
野火ISO系统进阶篇
44. UCOS
45. 前言
46. 1、官方源代码介绍
47. 2、重要文件代码详解
47.1. 2.1 os_cpu.h
47.1.1. 全局变量
47.1.2. 数据类型
47.1.3. 临界段
47.1.4. 栈生长方向
47.1.5. 任务切换宏
47.1.6. 函数原型
开中断和关中断
任务管理函数
47.2. 2.2 os_cpu_c.c
47.2.1. 钩子函数
47.2.2. 任务堆栈结构初始化函数
47.2.3. SysTick时钟初始化
47.3. 2.3 os_cpu_a.asm
47.3.1. 声明外部定义
47.3.2. 声明全局变量
47.3.3. 段
47.3.4. 向量中断控制器NVIC
47.3.5. 中断
47.3.6. 启动最高优先级任务
47.3.7. 任务切换
47.3.8. 中断退出处理
47.3.9. PendSV 中断服务
48. 3、uC/OS-II移植到STM32处理器的步骤
48.1. 3.1 打开LED工程模版
48.2. 3.2 搭建uC/OS-II工程文件结构
48.3. 3.3 配置uC/OS-II
48.3.1. os_cfg.h
os_cfg.h配置表格
48.4. 3.4 修改os_cpu.h
48.5. 3.5 修改os_cpu_c.c
48.6. 3.6 修改 os_cpu_a.asm
48.7. 3.7 修改os_dbg.c
48.8. 3.8 修改startup_stm32f10x_hd.s
48.9. 3.9 编写includes.h
48.10. 3.10 编写BSP
48.10.1. BSP.C文件代码
48.10.2. BSP.h头文件
48.11. 3.11 编写stm32f10x_it.c
48.12. 3.12 创建任务
48.12.1. 编写app_cfg.h
48.12.2. 编写app.c
48.12.3. 编写app.h头文件
48.13. 3.13 main函数
49. 4、运行多任务
49.1. 4.1 修改app.c
49.2. 4.2 编写app.h
49.3. 4.3 编写app_cfg.h
49.4. 4.4 编写main.c
50. 5、升级到最新版本V2.90
50.1. 5.1 不得不说的那些话儿
50.2. 5.2 从V2.86升级到V2.90说明
50.2.1. V2.87更新日志
50.2.2. V2.88 更新日志
50.2.3. V2.89 更新日志
50.2.4. V2.90更新日志
50.3. 5.3 更新步骤
50.4. 5.4 更新其他工程
50.4.1. 更新 STM32+UCOS+LED多任务 的例子
51. 6、移植计算器
51.1. 6.1 处理外部中断
51.2. 6.2 移植步骤
51.2.1. 具体步骤
51.3. 6.3 增加通信功能——队列