(一)ARM和STM32
1》ARM的含义:
1,是一家公司的名字—-生产内核(IP)—-专利授权盈利
2,是使用ARM内核的芯片的代称
2》ARM内核的分类
ARM7,ARM9,ARM11
1,Cortex-A 针对计算量比较大,有交互性的界面的领域 —-手机,平板,投影,电视
2,Cortex-R 针对实时性比较高的领域 —–汽车刹车,航空航天
3,Cortex-M 针对微控制器领域 —-MCU
3》STM32F103RCT6
是ARM Cortex-M3内核的芯片
ST:意法半导体公司
M: MCU
32:32位,一次性处理数据的多少bit
R: 引脚数
C: flash-256KB 和启动文件的选择有关系
T: 封装,封装为TQFP
6: 温度
4》Cortex-M 系列芯片在STM32中的分类
5》芯片里面有什么?
1,内核—CPU
2,外设—片上外设:外设位于芯片内部,内核外部
片外外设: 外设位于芯片外部
(芯片的控制原理:利用内核,驱动片上外设,控制片外外设)
6》Cortex-M 内核是哈佛架构:指令存储和数据存储是分开的
冯若伊曼架构:指令存储和数据存储是不分开的
=========================================================================
(二)开发方式—-STM32
1》寄存器开发—(寄存器:具有特殊功能的内存单元)
2》标准外设库开发—(目前ST公司不再维护升级)
3》库开发:1,cube开发—-STM32CubeMX
2,LL库
开发方式大比拼:
开发难度 可维护性 代码执行效率
寄存器开发 最难 最难 最高
标准外设库开发 适中 适中 适中
cube开发 最简单 最高 最低
LL库 较难 较难 较高
=========================================================================
(三)开发环境的搭建
keil + Source Insight
MDK(集成开发环境) 代码编辑器
注意事项:
1,右键以管理员身份运行
2,路径不要有中文
3,名字不要有空格
=========================================================================
(四)基于标准外设库新建一个工程
stm32F10x_StdPeriph_lib_V3.5.0 (ST公司发行的stm32F10x标准外设库的最后一个版本)
1>打开文件夹(有以下内容)
_htmresc (logo)(CMSIS软件接口标准)
Libraries 库文件(移植的重点)(以前大家在Ubuntu用c库的函数,现在我们需要用ST公司提供的库文件,所以需要移植到工程目录中)
Project 驱动示例代码(ST公司写的一些例子,一般需要匹配ST公司的开发板,可以作为参考,不能直接移植)
Utilities 开发板例子程序(这个例程完全依赖开发板,也是只能作为参考)
Release_Notes,html 固件库发行说明(类似日志文件,版本更新文件)
Stm32f10_StdPeriph_lib_um.chm 固件库使用说明文档(对固件库中所有函数说明,英文文档,老师提供了一个中文的文档STM32固件库使用手册_v3.5版本)
2>移植的重点(Libraries文件夹)
STM32F10x_StdPeriph_Driver 片上外设程序所在文件夹(加载的重点)在此文件夹下:
Inc 片上外设的头文件 (.h)
Src 片上外设的源文件 (.c)
CMSIS:包含了启动文件,开发所依赖的的配置,时钟等(重要)CMSIS中的文件:
CM3文件夹下
CoreSupport文件夹
Core_cm3.c:包含的是一些内核相关的函数和宏定义
Core_cm3.h: 包含的是一些内核相关的函数和宏定义的头文件
DeviceSupport文件夹
ST文件夹
STM32F10x文件夹
Startup文件夹下
Arm文件夹下
Startup_stm32f10x_hd.s:(引导启动文件,容量决定)
Stm32f10x.h:实现了所有硬件寄存器结果,地址映射,寄存器位操作,基本定义。
System_stm32f10x.c:系统启动初始化,尤其是时钟。
System_stm32f10x.h:系统启动初始化,尤其是时钟的头文件。
常见错误截图:
STM32如果跑裸机的话,它是没有操作系统的,所以main函数不能结束(不能return),如果结束了,程序就终止了,那么就死机了。所以,我们用while(1);放在main程序末尾,用它来代替return。