ImageVerifierCode 换一换
格式:PDF , 页数:21 ,大小:1.19MB ,
资源ID:3216810      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3216810.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(零死角玩转stm32-中级篇1、调试必备-串口(UART).pdf)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

零死角玩转stm32-中级篇1、调试必备-串口(UART).pdf

1、 -第 2 页-0 0、友情提示、友情提示 零死角玩转零死角玩转 STM32系列教程由初级篇初级篇、中级篇中级篇、高级篇高级篇、系统篇、系统篇、四个部分组成,根据野火 STM32 开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转 STM32。M3 的世界,与野火同行,乐意惬无边。另外,野火团队历时一年精心打造的STM32 库开发实战指南库开发实战指南将于今年 10 月份由机械工业出版社机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。内容上会给你带来更多的惊喜。是一本学习 STM32 必备的工具书。敬请

2、期待!-第 3 页-1 1、调试必备调试必备-串口(串口(USART1USART1)当我们在学习一款 CPU 的时候,最经典的实验莫过于流水灯了,会了流水灯的话就基本等于学会会操作 I/O 口了。那么在学会操作 I/O 之后,面对那么多的片上外设我们又应该先学什么呢?有些朋友会说用到什么就学什么,听起来这也不无道理呀。但对于野火来说会把学习串口的操作放在第二位。在程序运行的时候我们可以通过点亮一个 LED 来显示代码的执行的状态,但有时候我们还想把某些中间量或者其他程序状态信息打印出来显示在电脑上,那么这时串口的作用就可想而知了。1.1 异步串口通讯协议异步串口通讯协议 阅读过STM32 中文

3、参考手册的读者会发现,STM32 的串口非常强大,它不仅支持最基本的通用串口同步、异步通讯,还具有 LIN 总线功能(局域互联网)、IRDA 功能(红外通讯)、SmartCard 功能。为实现最迫切的需求,利用串口来帮助我们调试程序,本章介绍的为串口最基本、最常用的方法,全双工、异步通讯方式。图 1-1 为串口异步通讯协议。图 1-1 异步串口通讯协议 重温串口的通讯协议,我们知道要配置串口通讯,至少要设置以下几个参数:字长(一次传送的数据长度)、波特率(每秒传输的数据位数)、奇偶校验位、还有停止位。对 ST 库函数的使用已经上手的读者应该能猜到,在初始化串口的时候,必然有一个串口初始化结构体

4、,这个结构体的几个成员肯定就是有来存储这些控制参数的。-第 4 页-1.2 直通线和交叉线直通线和交叉线 野火野火 STM32 开发板开发板串口硬件原理图串口硬件原理图 图 1-2 野火开发板串口硬件图 见图 1-2,这是野火 STM32 开发板的接线图,使用的为 MAX3232 芯片,把 STM32 的PA10 引脚(复用功能为 USART1 的 Rx)接到了 DB9 接口的第 2 针脚,把PA9 引脚(复用功能为 USART 的 Tx)连接到了 DB9 接口的第 3 针脚。Tx(发送端)接第 3 针脚,Rx(接收端)接第 2 针脚。这种接法是跟 PC的串口接法一样的,如果要实现 PC 跟野

5、火板子通讯,就要使用两头都是母的交叉线。串口线主要分两种,直通线(平行线)和交叉线。它们的区别见图 1-3。假如 PC 与板子之间要实现全双工串口通讯,必然是 PC 的 Tx 针脚要连接到板子的 Rx 针脚,而 PC 的 Rx 针脚则要连接至板子的 Tx 针脚了。由于板子和 pc的串口接法是相同的,就要使用交叉线来连接了。如果有的开发板是 Tx 连接至DB9 的第 2 针脚,而 Rx 连接至第 3 针脚,这与 PC 接法是相反的,这样的板子与 PC 通讯就需要使用直通线了。为什么野火板子要使用 PC 的接法?假如使用非 PC 接法,由于板子与 PC 的接法相反,通讯就要使用直通线;但两个板子之

6、间想要进行串口通讯时,由于接法相同,就要使用交叉线。如果使用 PC 接法,板子与 PC 之间接法相同,通讯使用交叉线;两个相同板子之间接法也相同,通讯也是使用交叉线。-第 5 页-所以野火建议大家设计板子时,尽量采用与 PC 相同的标准串口接法。图 1-3 交叉线与直通线的区别 介绍直通线与交叉线的区别,一来是野火发现某些读者因为线的问题而花费了大量宝贵的时间。二来是介绍串口线的 DIY 方法。要实现基本的全双工异步通讯,只要 3 条线,分别为Rx、Tx、和 GND。如果读者正在为直通线、交叉线、公头、母头不匹配而烦恼,可以根据自己的需要,参照图 1-3,用三根杜邦线连接即可。-第 6 页-1

7、.3 串口工作过程分析串口工作过程分析 图 1-4 串口架构图 串口外设的架构图看起来十分复杂,实际上对于软件开发人员来说,我们只需要大概了解串口发送的过程即可。从下至上,我们看到串口外设主要由三个部分组成,分别是波特率的控制部分、收发控制部分及数据存储转移部分。-第 7 页-1.3.1 波特率控制波特率控制 波特率,即每秒传输的二进制位数,用 b/s(bps)表示,通过对时钟的控制可以改变波特率。在配置波特率时,我们向波特比率寄存器 USART_BRR写入参数,修改了串口时钟的分频值 USARTDIV。USART_BRR 寄存器包括两部分,分别是DIV_Mantissa(USARTDIV 的

8、整数部分)和DIVFraction(USARTDIV的小数)部分,最终,计算公式为USARTDIV=DIV_Mantissa+(DIVFraction/16)。USARTDIV是对串口外设的时钟源进行分频的,对于USART1,由于它是挂载在APB2总线上的,所以它的时钟源为 fPCLK2;而USART2、3挂载在APB1上,时钟源则为 fPCLK1,串口的时钟源经过USARTDIV分频后分别输出作为发送器时钟及接收器时钟,控制发送和接收的时序。1.3.2 收发控制收发控制 围绕着发送器和接收器控制部分,有好多个寄存器:CR1、CR2、CR3、SR,即 USART 的三个控制寄存器(Contro

9、l Register)及一个状态寄存器(Status Register)。通过向寄存器写入各种控制参数,来控制发送和接收,如奇偶校验位,停止位等,还包括对 USART 中断的控制;串口的状态在任何时候都可以从状态寄存器中查询得到。具体的控制和状态检查,我们都是使用库函数来实现的,在此就不具体分析这些寄存器位了。1.3.3 数据存储转移部分数据存储转移部分 收发控制器根据我们的寄存器配置,对数据存储转移部分的移位寄存器进行控制。当我们需要发送数据时,内核或 DMA 外设(一种数据传输方式,在下一章介绍)把数据从内存(变量)写入到发送数据寄存器 TDR后,发送控制器将适时地自动把数据从TDR加载到

10、发送移位寄存器,然后通过串口线 Tx,把数据一位一位地发送出去,在数据从TDR转移到移位寄存器时,会产生发送寄存器 -第 8 页-TDR 已空事件 TXE,当数据从移位寄存器全部发送出去时,会产生数据发送完成事件 TC,这些事件可以在状态寄存器中查询到。而接收数据则是一个逆过程,数据从串口线 Rx一位一位地输入到接收移位寄存器,然后自动地转移到接收数据寄存器 RDR,最后用内核指令或 DMA读取到内存(变量)中。1.4 串口通讯实验分析串口通讯实验分析 1.4.1 实验描述及工程文件清单实验描述及工程文件清单 实验描述实验描述 重新实现 C 库中的 printf()函数到串口 1,这样我们就可

11、以像用 C 库中的 printf()函数一样将信息通过串口打印到电脑,非常方便我们程序的调试。硬件连接硬件连接 PA9 -USART1(Tx)PA10-USART1(Rx)用到的库文件用到的库文件 startup/start_stm32f10 x_hd.c CMSIS/core_cm3.c CMSIS/system_stm32f10 x.c FWlib/stm32f10 x_gpio.c FWlib/stm32f10 x_rcc.c FWlib/stm32f10 x_usart.c 用户编写的文件用户编写的文件 USER/main.c USER/stm32f10 x_it.c USER/usa

12、rt1.c 1.4.2 配置工程环境配置工程环境 串口实验中我们用到了GPIO、RCC、USART这三个外设的库文件stm32f10 x_gpio.c、stm32f10 x_rcc.c、stm32f10 x_usart.c,所以我们先要把这 -第 9 页-个库文件添加进工程,新建用户文件usart1.c。并在 stm32f10 x_conf.h 中把相应的头文件的注释去掉。1./*2.*3.*file Project/STM32F10 x_StdPeriph_Template/stm32f10 x_conf.h 4.*author MCD Application Team 5.*version

13、 V3.5.0 6.*date 08-April-2011 7.*brief Library configuration file.8.*/9.10.#include stm32f10 x_gpio.h 11.#include stm32f10 x_rcc.h 12.#include stm32f10 x_usart.h 1.4.3 main 文件文件 配置好要用的库的环境之后,我们就从 main 函数看起,层层剥离源代码。1./*2.*函数名:main 3.*描述 :主函数 4.*输入 :无 5.*输出 :无 6.*/7.int main(void)8.9./*USART1 config 1

14、15200 8-N-1*/10.USART1_Config();11.12.printf(rn this is a printf demo rn);13.14.printf(rn 欢迎使用野火 M3 实验板:)rn);15.16.USART1_printf(USART1,rn This is a USART1_printf demo rn);17.18.USART1_printf(USART1,rn(_DATE_ -_TIME_)rn);19.20.for(;)21.22.23.24.首先调用函数 USART1_Config(),函数USART1_Config()主要做了如下工作:1.使能了串

15、口 1 的时钟 2.配置好了 usart1 的 I/O -第 10 页-3.配置好了 usart1 的工作模式,具体为波特率为 115200、8 个数据位、1个停止位、无硬件流控制。即 115200 8-N-1。1.4.4 USART 初始化配置初始化配置 具体的USART1_Config()在usart1.c这个用户文件中实现:1./*2.*函数名:USART1_Config 3.*描述 :USART1 GPIO 配置,工作模式配置。115200 8-N-1 4.*输入 :无 5.*输出 :无 6.*调用 :外部调用 7.*/8.void USART1_Config(void)9.10.GP

16、IO_InitTypeDef GPIO_InitStructure;11.USART_InitTypeDef USART_InitStructure;12.13./*config USART1 clock*/14.RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);15.16./*USART1 GPIO config*/17./*Configure USART1 Tx(PA.09)as alternate function push-pull*/18.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;19.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;20.GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;21.GPIO_Init(GPIOA,&GPIO_InitStructure);22./*Configure USART1 Rx(PA.10)as input floatin

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1