【stm32】12月26日学习笔记
需要:正点原子stm32mini开发板
Usb-b型下载线
Mini-usb下载线
J-link下载器
母对母杜邦线10根
正点原子光盘资料
Cortex-M3 采用目前主流 ARM V7-M 架构,相比曾风靡一时的 ARMV4T 架构拥有更加强
劲的性能,更高的代码密度,更高的性价比
STM32 寄存器开发和固件库开发的区别。寄存器开发跟传统的 51, AVR
单片机开发类似,直接操作底层寄存器。开发人员需要掌握相关寄存器的作用,这对于直接从51,AVR 单片机转型而来的开发人员来说,他们更加熟悉底层原理,所以偏向寄存器开发,因为
这样他们的代码更加高速有效,内存利用率更高。但是 STM32 寄存器纷繁复杂,不便于快速
开发项目,所以 ST 推出了一整套固件库,将底层寄存器开发全部封装成库函数,这样使得开
发人员摆脱直接操作寄存器的烦恼,直接操作库函数开发自己的程序,项目开发更加快速,但
是内存利用率稍低。
一般的应用 2 个 LED 足够了,在调试代码的时候,使用LED 来指示程序状态,是非常不错的一个辅助调试方法 。ALIENTEK 开发板几乎每个实例都使 用了 LED 来指示程序的运行状态。
编号 | 实验名字 | 编号 | 实验名字 |
1 | 跑马灯实验 | 20 | SPI 实验 |
2 | 按键输入实验 | 21 | 触摸屏实验(支持电容/电阻屏) |
3 | 串口实验 | 22 | 红外遥控实验 |
4 | 外部中断实验 | 23 | DS18B20 数字温度传感器实验 |
5 | 独立看门狗实验 | 24 | 无线通信实验 |
6 | 窗口看门狗实验 | 25 | PS2 鼠标实验 |
7 | 定时器中断实验 | 26 | FLASH 模拟 EEPROM 实验 |
8 | PWM 输出实验 | 27 | 内存管理实验 |
9 | 输入捕获实验 | 28 | SD 卡实验 |
10 | OLED 实验 | 29 | FATFS 实验 |
11 | TFTLCD 实验 | 30 | 汉字显示实验(支持 12/16/24 字体大小) |
12 | USMART 调试组件实验 | 31 | 图片显示实验 |
13 | RTC 实验 | 32 | 串口 IAP 实验 |
14 | 待机唤醒实验 | 33 | 触控 USB 鼠标实验 |
15 | ADC 实验 | 34 | USB 读卡器实验 |
16 | 内部温度传感器实验 | 35 | UCOSII 实验 1-任务调度 |
17 | DAC 实验 | 36 | UCOSII 实验 2-信号量和邮箱 |
18 | DMA 实验 | 37 | UCOSII 实验 3-消息队列、信号量集和软件定时器 |
19 | IIC 实验 | 38 | 综合实验 |
1,一款实用的开发板
2. 两本参考资料, 即《STM32 参考手册》和《Cortex-M3 权威指南》
3,掌握方法,勤学慎思。
STM32 的学习和普通单片机一样,基本方法就是:
a) 掌握时钟树图(见《STM32 中文参考手册_V10 版》图 8)。
任何单片机,必定是靠时钟驱动的,时钟就是单片机的动力, STM32 也不例外,通过时钟树,我们可以知道,各种外设的时钟是怎么来的?有什么限制?从而理清思路,方便理解。
b)所谓熟能生巧,先要熟,才能巧。如何熟悉?这就要靠大家自己动手,多多练习了,光看/
说,是没什么太多用的,很多人问我, STM32 这么多寄存器,如何记得啊?回答是:不需要全
部记住。我至今也就只记得 STM32 的 IO 口控制这几个寄存器,因为有规律可循,好记。其他
的一概不记得。 学习 STM32,不是应试教育,不需要考试,不需要你倒背如流。你只需要知道
这些寄存器,在哪个地方,用到的时候,可以迅速查找到,就可以了。完全是可以翻书,可以
查资料的, 可以抄袭的, 不需要死记硬背。掌握学习的方法,远比掌握学习的内容重要的多。
如果遇到问题,可
以在我们的技术论坛:开源电子网: www.openedv.com 提问
任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固件库不是万能的,您如果想要把 STM32 学透,光读 STM32 固件库是远远不够的。你还是要了解一下 STM32 的原理,而这些原理了解了,你在进行固件库开发过程中才可能得心应手游刃有余 .
经常有人问到 STM32 和 ARM 以及 ARM7
是什么关系这样的问题,其实 ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设
计,而 TI, ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的
芯片内核标准设计自己的芯片。
Libraries 文件夹下面有 CMSIS 和 STM32F10x_StdPeriph_Driver 两个目录,这两个目录包
含 固 件 库 核 心 的 所 有 子 文 件 夹 和 文 件 。 其 中 CMSIS 目 录 下 面 是 启 动 文 件 ,
STM32F10x_StdPeriph_Driver 放的是 STM32 固件库源码文件。
system_stm32f10x.c 和对应的头文件 system_stm32f10x.h 文件的功能是设置系统以及总线时
钟,这个里面有一个非常重要的 SystemInit()函数,这个函数在我们系统启动的时候都会调用,
用来设置系统的整个时钟系统。
stm32f10x.h 这个文件就相当重要了,只要你做 STM32 开发, 你几乎时刻都要查看这个文
件相关的定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。 这个文件里面主要
是系统寄存器定义申明以及包装内存操作,
我们 ALIENTEK miniSTM32 开发板采用的 103RCT6 是属于大容量产品,所以我们的启动文件
选择 startup_stm32f10x_hd.s。 启动文件到底什么作用,其实我们可以打开启动文件进去看看。
启动文件主要是进行堆栈之类的初始化, 中断向量表以及中断函数定义。启动文件要引导进入
main 函数。
对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不
用添加没有用到的外设的库文件。例如我只用 GPIO,我可以只用添加 stm32f10x_gpio.c 而
其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样
的坏处是工程太大,编译起来速度慢,用户可以自行选择。
C 语言知识博大精深,也不是我们三言两语能
讲解清楚,同时我们相信学 STM32 这种级别 MCU 的用户, C 语言基础应该都是没问题的。我们
这里主要是简单的复习一下几个 C 语言基础知识点,引导那些 C 语言基础知识不是很扎实的用
户能够快速开发 STM32 程序。同时希望这些用户能够多去复习一下 C 语言基础知识, C 语言毕
竟是单片机开发中的必备基础知识。对于 C 语言基础比较扎实的用户,这部分知识可以忽略不
看