嵌入式系统导论(第2版)-教学课件 嵌入式导论07_第1页
嵌入式系统导论(第2版)-教学课件 嵌入式导论07_第2页
嵌入式系统导论(第2版)-教学课件 嵌入式导论07_第3页
嵌入式系统导论(第2版)-教学课件 嵌入式导论07_第4页
嵌入式系统导论(第2版)-教学课件 嵌入式导论07_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统导论主讲教师:第7章

STM32的USART本章内容提要7.1串行异步通信7.2通用同步异步接收发送器(USART)7.3USART应用示例: 实现C语言标准输入输出函数串行通信并行传输7.1串行异步通信串行数据传输将数据分解成二进制位用一条信号线一位一位顺序传输数据通信线路少,远距离通信的成本低适合于远距离数据传送和近距离数据传送可以减小芯片尺寸、提升传输速率需制定通信协议(通信规程),解决传送速率、信息格式、数据同步、数据校验等问题串行异步通信:以字符为单位进行传输串行同步通信:以一个数据块(帧)为传输单位串行串行异步通信字符格式起始位——每个字符开始传送的标志,起始位采用逻辑0电平数据位——数据位紧跟着起始位传送。由5~8个二进制位组成,低位先传送校验位——用于校验是否传送正确;可选择奇检验、偶校验或不传送校验位停止位——表示该字符传送结束。停止位采用逻辑1电平,可选择1、1.5或2位起始位校验位停止位空闲位数据位低位高位字符0/10/10/10/110111…空闲位——传送字符之间的逻辑1电平,表示没有进行传送串行同步通信以一个数据块(帧)为传输单位每个数据块附加1个或2个同步字符最后以校验字符结束同步通信的传输效率和速率较高,硬件电路较复杂串行同步通信主要应用在网络当中最常使用高级数据链路控制协议HDLC~~~~同步字符数据数据数据校验字符数据传输速率(带宽)数据传输速率=比特率(BitRate)每秒传输的二进制位数bps字符中每个二进制位持续的时间长度都一样, 是数据传输速率的倒数进行二进制数码传输,每位时间长度相等: 比特率=波特率(BaudRate)过去,限制在50bps到9600bps之间现在,可以达到115200bps或更高异步串行接口标准美国电子工业协会EIA制定1962年公布,1969年修订1987年1月正式改名为EIA-232D数据终端设备DTE与数据通信设备DCE标准接口25针插口9针插口232C接口的引脚定义TxD:发送数据RxD:接收数据RTS:请求发送CTS:清除发送(允许发送)DTR:数据终端准备好DSR:数据装置准备好GND:信号地

CD:载波检测(DCD)

RI:振铃指示保护地(机壳地)TxC:发送器时钟RxC:接收器时钟232C接口的连接连接调制解调器:通过电话线路远距离通信直接(零调制解调器)连接:进行短距离通信不使用联络信号的3线相连微机TxDRxDGND微机微机DSRDTRTxDRxDRTSCTSGND微机“伪”使用联络信号的3线相连传输制式全双工通信同时双向传输站A站B站A站B站A站B半双工通信分时双向传输单工通信单向传输7.2通用同步/异步接收/发送器实现串行数据传输需要并行到串行和串行到并行的转换并按照传输协议发送和接收每个字符(或数据块)可由软件实现,也可用硬件实现通用同步异步接收发送器USART是用硬件实现 串行通信的接口电路UniversalSynchronousAsynchronousReceiver/Transmitter处理器USARTSTM32的串行通信接口USARTSTM32具有多达5个USART接口USART1连接高速APB2总线、运行速度为72MHz(支持高达4.5Mbps的传输速率)其他位于APB1总线、36MHz(2.25Mbps传输速率)STM32的USART接口具有多种操作模式异步全双工通信、同步单路通信和半双工单线通信支持LIN、智能卡、IrDA、多处理器通信每个USART接口具有两个DMA通道用于接收Rx和发送Tx数据与存储器之间的高速传送UniversalSynchronousAsynchronousReceiver/TransmitterUSART结构图USART的增强功能局部互联网络LIN(LocalInterconnectionnetwork)主要针对车辆中低成本的LIN总线智能卡(SmartCard)内嵌芯片的集成电路(IC)卡兼容ISO7816-3标准的异步智能卡协议红外线接口IrDA(InfraredDataAssociation)短距离、点对点直线数据传输支持SIRENDEC传输编码解码协议USART接口的引脚USART接口通过3个引脚连接外设Tx

发送数据输出(TransmitDataOut)Rx

接收数据输入(ReceiveDataIn)CK

发送时钟输出,用于同步传输模式(CK引脚早期版本被称为SCLK)实现硬件流程控制需要如下引脚nCTS

清除发送(ClearToSend) 若为高电平,在当前传输结束前阻止下个数据发送nRTS

发送请求(RequestToSend) 若为低电平,表明USART准备好接收数据USART寄存器寄存器缩写寄存器中文名称USART_SR状态寄存器USART_DR数据寄存器USART_BRR波特率寄存器USART_CR1控制寄存器1USART_CR2控制寄存器2USART_CR3控制寄存器3USART_GTPR时间保护和预分频寄存器异步串行通信协议嵌入式开发系统可以连接PC机串口用于程序下载、系统调试等嵌入式开发板与PC机的串口连接通常采用简单的交叉3线、不采用联络信号支持全双工通信异步串行通信协议以字符为单位,需设置波特率(传输率)、数据位数奇偶校验、停止位个数7.3USART应用示例:实现标准输入输出函数使用3线交叉线连接USART1端口与PC机串口1编写USART1初始化配置函数将输入输出函数重定向到USART1端口编写字符发送fputc函数编写字符接收fgetc函数不使用半主机模式复用功能USART1_REMAP=0USART1_REMAP=1USART1_TXPA9PB6USART1_RXPA10PB7USART初始化配置启动USART时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE)

GPIO复用引脚初始化USART1_Tx(发送信号)复用PA9引脚USART1_Rx(接收信号)复用PA10引脚USART初始化配置为:115200-8-N-1(波特率-数据位数-校验方式-停止位数)允许USART工作

USART_Cmd(USART1,ENABLE)GPIO复用引脚初始化启动GPIOA端口时钟

RCC_APB2PeriphClockCmd(RCC_APB2Perih_GPIOA,ENABLE)

使用GPIO_Init函数初始化GPIO引脚PA9(USART1_TX)需设置为推挽复用输出PA10(USART1_RX)需配置为浮空输入或上拉输入USART引脚通信配置

GPIO配置USARTx_TX全双工复用推挽输出半双工同步模式复用推挽输出USARTx_RX全双工浮空输入

/上拉输入半双工同步模式未用。可用于通用I/O参考手册USART初始化USART初始化函数

voidUSART_Init(

USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct)

USARTx(要配置的串口):USART1~UART5USART_InitStruct指向USART_InitTypeDef结构变量的指针typedef

struct{uint32_tUSART_BaudRate;/*通信波特率*/uint16_tUSART_WordLength;/*数据位数*/uint16_tUSART_StopBits;/*停止位数*/uint16_tUSART_Parity;/*校验模式*/uint16_tUSART_Mode;/*接收发送模式*/uint16_tUSART_HardwareFlowControl;/*硬件流控制*/}USART_InitTypeDef;帮助文档USART初始化(115200-8-N-1)USART_InitTypeDef

USART_InitStructure;USART_InitStructure.USART_BaudRate=115200;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_InitStructure);

USART_Cmd(USART1,ENABLE);重定向(Retarget)C语言输入输出函数默认设备:键盘和显示器要使用scanf和printf函数,需要重定向将输入的信息重新定向来自外设(USART1端口)将输出的信息重新定向去到外设(USART1端口)用户可以重新编写C语言的库函数当C编译器检查到与C库函数相同名称的函数时优先采用用户编写的函数,实现重定向1.编写fputc函数2.编写fgetc函数3.不使用半主机模式printfHello×USART的数据收发函数接收数据的函数uint16_tUSART_ReceiveData(USART_TypeDef*USARTx)函数调用的返回值就是最新接收的数据发送数据的函数voidUSART_SendData(USART_TypeDef*USARTx,uint16_tData)参数Data就是要发送的数据虽然是一个16位数据,实际上只使用其低8位1.编写fputc函数在C标准库函数中,printf函数实质是一个宏需要调用fputc实现一个字符输出int

fputc(int

ch,FILE*f){USART_SendData(USART1,(uint8_t)ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);returnch;}USART_GetFlagStatus用于检测发送完成USART_GetFlagStatus函数用于检测发送完成

FlagStatus

USART_GetFlagStatus(USART_TypeDef*USARTx,uint16_tUSART_FLAG)要检测的状态是参数USART_FLAG·USART_FLAG_CTS(CTS改变标志,UART4和UART5上不可用)·USART_FLAG_LBD(LIN中止检测标志)·USART_FLAG_TXE(发送数据寄存器空标志)·USART_FLAG_TC(发送完成标志)·USART_FLAG_RXNE(接收数据寄存器非空标志)·USART_FLAG_IDLE(空闲线检测标志)·USART_FLAG_ORE(溢出错误标志)·USART_FLAG_NE(噪声错误标志)·USART_FLAG_FE(帧错误标志)·USART_FLAG_PE(校验错标志)返回值USART_FLAG说明置位(SET)或复位(RESET)帮助文档2.

编写fgetc函数标准输入函数scanf函数通过调用fputc实现int

fgetc(int

ch,FILE*f){intch;while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET);ch=USART_ReceiveData(USART1);/*实现键盘输入的回显功能*/while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);USART_SendData(USART1,(uint8_t)ch);returnch;}3.

不使用半主机模式半主机模式(Semihosting)将ARM应用程序的I/O在主机(PC机)上体现出来printf、scanf等函数使用主机的屏幕和键盘使开发人员可以通过PC机的标准输入设备(键盘)和标准输出设备(显示器)调试ARM处理器代码将printf、scanf等函数重定向到USART端口 就不能再采用半主机模式,方法有两种(1)使用微库(2)添加retarget.c文件使用C标准输入输出函数,需包含stdio.h(1)使用微库(UseMicroLIB)KeilMDK特别为嵌入式应用编写的小型C库仅实现了基本的、简单的函数,例如printf、scanf不能使用高级的fprintf、fopen等微库不使用半主机模式在MDK集成环境的目标选项中,从代码生成栏(CodeGeneration),选择使用微库MicroLib的选择(目标选项)(2)添加retarget.c文件如果仍使用标准C库需要用户重新编写使用半主机模式的函数在MDK安装目录中有一个文件retarget.c为用户编写自己的函数提供的模板用户可以将文件复制到工程目录中,添加到项目中,并进行修改retarget.c主要修改是编辑fputc、fgetc函数的实现代码本例删除(已在其他文件实现了这两个函数)

#include<stdio.h>#pragma

import(__use_no_semihosting_swi)FILE__stdout;FILE__stdin;void_sys_exit(int

return_code){while(1);/*endlessloop*/}【例7-1】信息交互应用程序实现在PC机终端程序中进行信息交互intmain(void){ charmsg[100]; inttemp; USART1_Config(); //USART1配置

printf("\r\n演示printf和scanf函数\r\n"); printf("输入一个字符串:"); scanf("%s",msg); printf("\r\n输入的字符串是:%s\r\n",msg);

……}调试运行软件模拟查看View→串行窗口SerialWindows→UART#1程序调试运行时,该窗口有printf输出结果激活该窗口也可利用scanf函数输入信息在线硬件仿真使用3线交叉串口电缆连接PC机串口和目标板USART1端口运行PC机的超级终端程序,设置其传输协议是“1152008-N-1”连接好目标板硬件仿真器,打开电源,运行程序在PC机超级终端程序中,与目标板交互【例7-2】接收中断驱动LED灯点亮USART接口的中断应用、实现功能从PC机键盘输入数字1、2或3,从PC机串口发送给嵌入式系统的USART1接口USART1接收数字后,触发中断中断服务程序获取具体的数字, 并相应控制LED1、LED2或LED3灯点亮USART中断连接USART中断相关函数USART中断配置函数voidUSART_ITConfig(USART_TypeDef*USARTx,uint16_tUSART_IT,FunctionalState

NewState)

获取中断状态函数ITStatus

USART_GetITStatus(USART_TypeDef*USARTx,uint16_tUSART_IT)

清除中断标志函数voidUSART_ClearITPendingBit(USART_TypeDef*USARTx,uint16_tUSART_IT)USART中断标志和事件标志中断请求中断标志事

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论