logo资料库

零死角玩转stm32-中级篇.pdf

第1页 / 共127页
第2页 / 共127页
第3页 / 共127页
第4页 / 共127页
第5页 / 共127页
第6页 / 共127页
第7页 / 共127页
第8页 / 共127页
资料共127页,剩余部分请下载后查看
0、友情提示
1、调试必备-串口(USART1)
1.1 异步串口通讯协议
1.2 直通线和交叉线
1.3 串口工作过程分析
1.3.1波特率控制
1.3.2收发控制
1.3.3数据存储转移部分
1.4 串口通讯实验分析
1.4.1实验描述及工程文件清单
1.4.2 配置工程环境
1.4.3 main文件
1.4.4 USART初始化配置
1.4.4.1 GPIO初始化
1.4.4.2 USART初始化
1.4.5 printf()函数重定向
1.4.6 USART1_printf()函数
1.4.7 实验现象
2、ADC(DMA模式)
2.1 ADC简介
2.2 STM32的ADC主要技术指标
2.3 ADC工作过程分析
2.4 ADC采集实例分析
2.4.1实验描述及工程文件清单
2.4.2 配置工程环境
2.4.3 main文件
2.4.4 ADC初始化
2.4.4.1 配置GPIO端口
2.4.4.2 配置DMA
2.4.4.3 配置ADC模式
2.4.4.4 ADC转换时间配置
2.4.4.4.5 ADC自校准
2.4.4.4.6 volatile变量
2.4.5 计算电压值
2.4.6实验现象
3、Temperature(芯片温度)
3.1 实验描述及工程文件清单
3.2 ADC及内部温度传感器简介
3.3 代码分析
3.4 实验想象
4、RTC(万年历)
4.1 实验描述及工程文件清单
4.2 RTC(实时时钟)简介
4.3 代码分析
5、IIC(EEPROM)
5.1 实验描述及工程文件清单
5.2 I2C简介
5.3代码分析
5.4实验现象
6、SPI(2M-Flash)
6.1 实验描述及工程文件清单
6.2 SPI简介
6.3代码分析
6.4实验现象
7、PWM(软件仿真)
7.1 实验描述及工程文件清单
7.2 STM32通用定时器简介
7.3 代码分析
7.4 软件仿真
8、CAN(Looback)
8.1 实验描述及工程文件清单
8.2 CAN简介
8.3 代码分析
8.4 实验现象
9、2.4G无线(NRF24L01+)
9.1 实验描述及工程文件清单
9.2 NRF24L01模块简介
9.3 代码分析
9.4 实验想象
10、重力感应/三轴加速(MMA7455)
10.1 实验描述及工程文件清单
10.2 MMA7455简介
10.3代码分析
10.4实验现象
第九单片机论坛 www.9mcu.com
0、友情提示 《零死角玩转 STM32》系列教程由初级篇、中级篇、高级篇、系统篇、 四个部分组成,根据野火 STM32 开发板旧版教程升级而来,且经过重新深入编 写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让 您零死角玩转 STM32。M3 的世界,于野火同行,乐意惬无边。 另外,野火团队历时一年精心打造的《STM32 库开发实战指南》将于今 年 10 月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利 于查阅资料。内容上会给你带来更多的惊喜。是一本学习 STM32 必备的工具 书。敬请期待! 野火淘宝店:http://firestm32.taobao.com (点我) -第 2 页- 第九单片机论坛 www.9mcu.com
1、调试必备-串口(USART1) 当我们在学习一款 CPU 的时候,最经典的实验莫过于流水灯了,会了流水 灯的话就基本等于学会会操作 I/O 口了。那么在学会操作 I/O 之后,面对那么 多的片上外设我们又应该先学什么呢?有些朋友会说用到什么就学什么,听起 来这也不无道理呀。 但对于野火来说会把学习串口的操作放在第二位。在程序运行的时候我们 可以通过点亮一个 LED 来显示代码的执行的状态,但有时候我们还想把某些中 间量或者其他程序状态信息打印出来显示在电脑上,那么这时串口的作用就可 想而知了。 1.1 异步串口通讯协议 阅读过《STM32 中文参考手册》的读者会发现,STM32 的串口非常强大, 它不仅支持最基本的通用串口同步、异步通讯,还具有 LIN 总线功能(局域互联 网)、IRDA 功能(红外通讯)、SmartCard 功能。 为实现最迫切的需求,利用串口来帮助我们调试程序,本章介绍的为串口 最基本、最常用的方法,全双工、异步通讯方式。图 1-1 为串口异步通讯协 议。 重温串口的通讯协议,我们知道要配置串口通讯,至少要设置以下几个参 图 1-1 异步串口通讯协议 数:字长(一次传送的数据长度)、波特率(每秒传输的数据位数)、奇偶校验位、 还有停止位。对 ST 库函数的使用已经上手的读者应该能猜到,在初始化串口 的时候,必然有一个串口初始化结构体,这个结构体的几个成员肯定就是有来 存储这些控制参数的。 野火淘宝店:http://firestm32.taobao.com (点我) -第 3 页- 第九单片机论坛 www.9mcu.com
1.2 直通线和交叉线 野火 STM32 开发板串口硬件原理图 见图 1-2,这是野火 STM32 开发板的接线图,使用的为 MAX3232 芯片, 图 1-2 野火开发板串口硬件图 把 STM32 的 PA10引脚(复用功能为USART1的Rx)接到了 DB9 接口的第2针 脚,把 PA9引脚(复用功能为USART的Tx)连接到了 DB9 接口的第3针脚。 Tx(发送端)接第3针脚,Rx(接收端)接第2针脚。这种接法是跟 PC 的串口接法一样的,如果要实现 PC 跟野火板子通讯,就要使用两头都是母的 交叉线。 串口线主要分两种,直通线(平行线)和交叉线。它们的区别见图 1-3。 假如 PC 与板子之间要实现全双工串口通讯,必然是 PC 的 Tx 针脚要连接到板 子的 Rx 针脚,而 PC 的 Rx 针脚则要连接至板子的 Tx 针脚了。由于板子和 pc 的串口接法是相同的,就要使用交叉线来连接了。如果有的开发板是 Tx 连接至 DB9 的第 2 针脚,而 Rx 连接至第 3 针脚,这与 PC 接法是相反的,这样的板子 与 PC 通讯就需要使用直通线了。 为什么野火板子要使用 PC 的接法? 假如使用非 PC 接法,由于板子与 PC 的接法相反,通讯就要使用直通线; 但两个板子之间想要进行串口通讯时,由于接法相同,就要使用交叉线。如果 使用 PC 接法,板子与 PC 之间接法相同,通讯使用交叉线;两个相同板子之间 接法也相同,通讯也是使用交叉线。 野火淘宝店:http://firestm32.taobao.com (点我) -第 4 页- 第九单片机论坛 www.9mcu.com
所以野火建议大家设计板子时,尽量采用与 PC 相同的标准串口接法。 介绍直通线与交叉线的区别,一来是野火发现某些读者因为线的问题而花 图 1-3 交叉线与直通线的区别 费了大量宝贵的时间。二来是介绍串口线的 DIY 方法。要实现基本的全双工异 步通讯,只要 3 条线,分别为 Rx、Tx、和GND。如果读者正在为直通线、交 叉线、公头、母头不匹配而烦恼,可以根据自己的需要,参照图 1-3,用三根 杜邦线连接即可。 野火淘宝店:http://firestm32.taobao.com (点我) -第 5 页- 第九单片机论坛 www.9mcu.com
1.3 串口工作过程分析 串口外设的架构图看起来十分复杂,实际上对于软件开发人员来说,我们 图 1-4 串口架构图 只需要大概了解串口发送的过程即可。 从下至上,我们看到串口外设主要由三个部分组成,分别是波特率的控制 部分、收发控制部分及数据存储转移部分。 野火淘宝店:http://firestm32.taobao.com (点我) -第 6 页- 第九单片机论坛 www.9mcu.com
1.3.1 波特率控制 波特率,即每秒传输的二进制位数,用 b/s (bps)表示,通过对时钟的控 制可以改变波特率。在配置波特率时,我们向波特比率寄存器USART_BRR写 入参数,修改了串口时钟的分频值USARTDIV。USART_BRR寄存器包括两部 分,分别是 DIV_Mantissa(USARTDIV 的整数部分)和 DIVFraction(USARTDIV 的小数)部分,最终,计算公式为 USARTDIV=DIV_Mantissa+(DIVFraction/16)。 USARTDIV是对串口外设的时钟源进行分频的,对于 USART1,由于它是 挂载在 APB2总线上的,所以它的时钟源为 fPCLK2;而 USART2、3挂载在 APB1上,时钟源则为 fPCLK1,串口的时钟源经过 USARTDIV分频后分别输出 作为发送器时钟及接收器时钟,控制发送和接收的时序。 1.3.2 收发控制 围绕着发送器和接收器控制部分,有好多个寄存器:CR1、CR2、CR3、 SR,即 USART 的三个控制寄存器(Control Register)及一个状态寄存器(Status Register)。通过向寄存器写入各种控制参数,来控制发送和接收,如奇偶校验 位,停止位等,还包括对 USART 中断的控制;串口的状态在任何时候都可以从 状态寄存器中查询得到。具体的控制和状态检查,我们都是使用库函数来实现 的,在此就不具体分析这些寄存器位了。 1.3.3 数据存储转移部分 收发控制器根据我们的寄存器配置,对数据存储转移部分的移位寄存器进行控 制。 当我们需要发送数据时,内核或 DMA 外设(一种数据传输方式,在下一 章介绍)把数据从内存(变量)写入到发送数据寄存器TDR后,发送控制器将适时 地自动把数据从 TDR加载到发送移位寄存器,然后通过串口线Tx,把数据一 位一位地发送出去,在数据从 TDR转移到移位寄存器时,会产生发送寄存器 野火淘宝店:http://firestm32.taobao.com (点我) -第 7 页- 第九单片机论坛 www.9mcu.com
TDR已空事件TXE,当数据从移位寄存器全部发送出去时,会产生数据发送完 成事件TC,这些事件可以在状态寄存器中查询到。 而接收数据则是一个逆过程,数据从串口线Rx一位一位地输入到接收移 位寄存器,然后自动地转移到接收数据寄存器RDR,最后用内核指令或 DMA 读取到内存(变量)中。 1.4 串口通讯实验分析 1.4.1 实验描述及工程文件清单 实验描述 重新实现 C 库中的 printf() 函数到串口 1,这样我们就可以 像用 C 库中的 printf() 函数一样将信息通过串口打印到电 脑,非常方便我们程序的调试。 硬件连接 PA9 - USART1(Tx) PA10 - USART1(Rx) 用到的库文件 startup/start_stm32f10x_hd.c CMSIS/core_cm3.c CMSIS/system_stm32f10x.c FWlib/stm32f10x_gpio.c FWlib/stm32f10x_rcc.c FWlib/stm32f10x_usart.c 用户编写的文件 USER/main.c USER/stm32f10x_it.c USER/usart1.c 1.4.2 配置工程环境 串口实验中我们用到了 GPIO、RCC、USART这三个外设的库文件 stm32f10x_gpio.c、stm32f10x_rcc.c、stm32f10x_usart.c,所以我们先要把这 野火淘宝店:http://firestm32.taobao.com (点我) -第 8 页- 第九单片机论坛 www.9mcu.com
分享到:
收藏