版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章
串行通信接口USART作者:黄克亚2025年5月本章概要CONTENTS数据通信基本概念MCU串口通信软件设计PC串口通信软件设计USART工作原理USART相关库函数PC与MCU串口通信调试10.1数据通信基本概念在嵌入式系统中,微控制器经常需要与外围设备(如触控屏、传感器等)或其他微控制器交换数据,一般采用并行或串行的方式实现数据交换。10.1数据通信基本概念10.1.1并行通信与串行通信并行通信是指使用多条数据线传输数据优点:传输速度快缺点:占用更多IO口,传输距离短,易受外界干扰串行通信:使用一条数据线传输数据优点:通信线少,传输距离长缺点:数据传输速度慢。并行通信和串行通信连接示意图10.1数据通信基本概念10.1.2异步通信与同步通信异步通信数据传送按帧传输,帧之间可有空闲位。优点:硬件要求低,实现时简单灵活缺点:工作速度低同步通信是由1~2个同步字符和多字节数据位组成,多字节数据间无空隙优点:传输速度快缺点:硬件要求高,适用数据批量传送异步通信原理示意图同步通信原理示意图10.1数据通信基本概念10.1.3串行通信的制式发送端接收端数据线地线单工制式(Simplex)是指甲乙双方通信时只能单向传送数据。系统组成以后,发送方和接收方固定。发送/接收端接收/发送端数据线地线半双工制式(HalfDuplex)是指通信双方都具有发送器和接收器,既可发送也可接收,但不能同时接收和发送。发送/接收端接收/发送端数据线地线全双工制式(FullDuplex)是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现同时发送和接收数据。10.1数据通信基本概念10.1.4串行通信的校验奇偶校验奇校验:每帧数据中,包括数据位和奇偶校验位的全部位中1的个数为奇数偶校验:每帧数据中,包括数据位和奇偶校验位的全部位中1的个数为偶数累加和校验:校验以下数据是否一致发送方数据块求和接收方数据块求和循环冗余码校验以特定数去除作二进制数的数据块,将余数作校验码附在数据块后一起发送。10.1.5串行通信的波特率波特率(bitpersecond)的定义是每秒传输数据的位数,即:1波特=1位/秒10.2STM32F103的
USART工作原理STM32F103微控制器的小容量产品有2个USART,中等容量产品有3个USART,大容量产品有3个USART+2个UART10.2STM32F103的USART工作原理10.2.1USART介绍提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。通用同步异步收发器(UniversalSynchronous/AsynchronousReceiver/TransmitterUSART)10.2STM32F103的USART工作原理10.2.2USART主要特性双工的,异步通信NRZ标准格式分数波特率发生器系─发送和接收共用的可编程波特率,最高达4.5Mbits/s可编程数据字长度(8位或9位)可配置的停止位-支持1或2个停止位LIN主发送同步断开符的能力以及LIN从检测断开符的能力─当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符发送方为同步传输提供时钟IRDASIR编码器解码器─在正常模式下支持3/16位的持续时间智能卡模拟功能─智能卡接口支持ISO7816-3标准里定义的异步智能卡协议─智能卡用到的0.5和1.5个停止位单线半双工通信10.2STM32F103的USART工作原理10.2.2USART主要特性可配置的使用DMA的多缓冲器通信─在SRAM里利用集中式DMA缓冲接收/发送字节单独的发送器和接收器使能位检测标志─接收缓冲器满─发送缓冲器空─传输结束标志校验控制─发送校验位─对接收数据进行校验四个错误检测标志─溢出错误─噪音错误─帧错误─校验错误10.2STM32F103的USART工作原理10.2.2USART主要特性10个带标志的中断源─CTS改变─LIN断开符检测─发送数据寄存器空─发送完成─接收数据寄存器满─检测到总线为空闲─溢出错误─帧错误─噪音错误─校验错误多处理器通信--如果地址不匹配,则进入静默模式从静默模式中唤醒(通过空闲总线检测或地址标志检测)两种唤醒接收器的方式:地址位(MSB,第9位),总线空闲10.2STM32F103的USART工作原理10.2.3USART功能概述功能引脚RX:接收数据输入引脚TX:发送数据输出引脚SW_RX:数据接收引脚nRTS:请求以发送(RequestToSend)nCTS:清除以发送(ClearToSend)SCLK:发送器时钟输出引脚(仅用于同步模式)10.2STM32F103的USART工作原理10.2.3USART功能概述功能引脚同步模式需要引脚:●CK:发送器时钟输出IrDA模式需要引脚:●IrDA_RDI:IrDA模式下的数据输入●IrDA_TDO:IrDA模式下的数据输出硬件流控制模式需要引脚:●nCTS::清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。●nRTS:发送请求,若是低电平,表明USART准备好接收数据10.2STM32F103的USART工作原理10.2.4USART通信时序UART的数据格式由起始位、数据位、校验位、停止位和空闲位等构成,数据传输以帧为单位,起始位、数据位、校验位和停止位构成了一个数据帧10.2STM32F103的USART工作原理10.2.5USART中断微控制器的USART中断事件:发送期间的中断事件:包括发送完成(TC)、清除发送(CTS)、发送数据寄存器空(TXE);接收期间:空闲总线检测(IDLE)、溢出错误(ORE)、接收数据寄存器非空(RXNE)、校验错误(PE)、LIN断开检测(LBD)、噪声错误(NE)和帧错误(FE)表STM32F103系列微控制器USART的中断事件及其使能标志位中断事件事件标志使能位发送数据寄存器空TXETXEIECTS标志CTSCTSIE发送完成TCTCIE接收数据就绪可读RXNERXNEIE检测到数据溢出ORERXNEIE检测到空闲线路IDLEIDLEIE奇偶检验错PEPEIE断开标志LBDLBDIE噪声标志、溢出错误和帧错误NE或ORT或FEEIESTM32F103系列微控制器USART以上各种不同的中断事件都被连接到同一个中断向量。10.2STM32F103的USART工作原理10.2.6USART相关寄存器STM32F103的USART相关寄存器名称介绍如下:状态寄存器(USART_SR)数据寄存器(USART_DR)波特比率寄存器(USART_BRR)控制寄存器1(USART_CR1)控制寄存器2(USART_CR2)控制寄存器3(USART_CR3)保护时间和预分频寄存器(USART_GTPR)10.3USART相关库函数头文件stm32f10x_usart.h用来存放USART相关结构体和宏定义以及USART库函数的声明,源代码文件stm32f10x_usart.c用来存放USART库函数定义。10.3USART相关库函数10.3.1函数USART_DeInit例:/*ResetstheUSART1registerstotheirdefaultresetvalue*/USART_DeInit(USART1);函数名USART_DeInit函数原形voidUSART_DeInit(USART_TypeDef*USARTx)功能描述将外设USARTx寄存器重设为缺省值输入参数USARTx:x可以是1,2或者3,来选择USART外设输出参数无返回值无先决条件无被调用函数RCC_APB2PeriphResetCmd()RCC_APB1PeriphResetCmd()10.3USART相关库函数10.3.2函数USART_InitUSART_InitTypeDef定义typedefstruct{uint32_tUSART_BaudRate;uint16_tUSART_WordLength;uint16_tUSART_StopBits;uint16_tUSART_Parity;uint16_tUSART_Mode;uint16_tUSART_HardwareFlowControl;}USART_InitTypeDef函数名USART_Init函数原形voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct)功能描述根据USART_InitStruct中指定的参数初始化外设USARTx寄存器输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2USART_InitStruct:指向结构USART_InitTypeDef的指针,包含了外设USART的配置信息。输出参数无返回值无先决条件无被调用函数无10.3USART相关库函数10.3.2函数USART_InitUSART_BaudRate:设置了USART传输的波特率。波特率可以由以下公式计算:IntegerDivider=((APBClock)/(16*(USART_InitStruct->USART_BaudRate)))FractionalDivider=((IntegerDivider-((u32)IntegerDivider))*16)+0.5USART_WordLength:示了在一个帧中传输或者接收到的数据位数,该参数可取的值见下表。USART_StopBits:定义了发送的停止位数目。该参数取值见下表。USART_WordLength描述USART_WordLength_8b8位数据USART_WordLength_9b9位数据USART_StopBits描述USART_StopBits_1在帧结尾传输1个停止位USART_StopBits_0_5在帧结尾传输0.5个停止位USART_StopBits_2在帧结尾传输2个停止位USART_StopBits_1_5在帧结尾传输1.5个停止位10.3USART相关库函数10.3.2函数USART_InitUSART_Parity:定义了奇偶模式,该参数可取的值见下表。USART_Mode:指定了使能或者失能发送和接收模式。该参数取值见下表。USART_Parity描述USART_Parity_No奇偶失能USART_Parity_Even偶模式USART_Parity_Odd奇模式注意:奇偶校验一旦使能,在发送数据的MSB位插入经计算的奇偶位(字长9位时的第9位,字长8位时的第8位)。USART_Mode描述USART_Mode_Tx发送使能USART_Mode_Rx接收使能USART_HardwareFlowControl:指定了硬件流控制模式使能还是失能。该参数取值见下表。USART_HardwareFlowControl描述USART_HardwareFlowControl_None硬件流控制失能USART_HardwareFlowControl_RTS发送请求RTS使能USART_HardwareFlowControl_CTS清除发送CTS使能USART_HardwareFlowControl_RTS_CTSRTS和CTS使能10.3USART相关库函数10.3.2函数USART_Init例/*ThefollowingexampleillustrateshowtoconfiguretheUSART1*/USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=9600;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_Odd;USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_RTS_CTS;USART_Init(USART1,&USART_InitStructure);函数名USART_Init函数原形voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct)功能描述根据USART_InitStruct中指定的参数初始化外设USARTx寄存器10.3USART相关库函数10.3.3函数USART_Cmd函数名USART_Cmd函数原形voidUSART_Cmd(USART_TypeDef*USARTx,FunctionalStateNewState)功能描述使能或者失能USART外设输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2NewState:外设USARTx的新状态这个参数可以取:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无例:/*EnabletheUSART1*/USART_Cmd(USART1,ENABLE);10.3USART相关库函数10.3.4函数USART_SendData函数名USART_SendData函数原形voidUSART_SendData(USART_TypeDef*USARTx,uint16_tData);功能描述通过外设USARTx发送单个数据输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2Data:待发送的数据输出参数无返回值无先决条件无被调用函数无例:/*SendoneHalfWordonUSART3*/USART_SendData(USART3,0x26);10.3USART相关库函数10.3.5函数USART_ReceiveData函数名USART_ReceiveData函数原形u16USART_ReceiveData(USART_TypeDef*USARTx)功能描述返回USARTx最近接收到的数据输入参数USARTx:x可以是1,2或者3,来选择USART外设输出参数无返回值接收到的字先决条件无被调用函数无例:/*ReceiveonehalfwordonUSART2*/u16RxData;RxData=USART_ReceiveData(USART2);10.3USART相关库函数10.3.6函数USART_GetFlagStatus函数名USART_GetFlagStatus函数原形FlagStatusUSART_GetFlagStatus(USART_TypeDef*USARTx,uint16_tUSART_FLAG)功能描述检查指定的USART标志位设置与否输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2USART_FLAG:待检查的USART标志位,参阅Section:USART_FLAG输出参数无返回值USART_FLAG的新状态(SET或者RESET)先决条件无被调用函数无USART_FLAG:下表给出了所有可以被函数USART_GetFlagStatus检查的标志位列表USART_FLAG描述USART_FLAG_CTSCTS标志位USART_FLAG_LBDLIN中断检测标志位USART_FLAG_TXE发送数据寄存器空标志位USART_FLAG_TC发送完成标志位USART_FLAG_RXNE接收数据寄存器非空标志位USART_FLAG_IDLE空闲总线标志位USART_FLAG_ORE溢出错误标志位USART_FLAG_NE噪声错误标志位USART_FLAG_FE帧错误标志位USART_FLAG_PE奇偶错误标志位例:/*Checkifthetransmitdataregisterisfullornot*/FlagStatusStatus;Status=USART_GetFlagStatus(USART1,USART_FLAG_TXE);10.3USART相关库函数10.3.7函数USART_ClearFlag函数名USART_ClearFlag函数原形voidUSART_ClearFlag(USART_TypeDef*USARTx,uint16_tUSART_FLAG)功能描述清除USARTx的待处理标志位输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2USART_FLAG:待清除的USART标志位输出参数无返回值无先决条件无被调用函数无例:/*ClearOverrunerrorflag*/USART_ClearFlag(USART1,USART_FLAG_OR);10.3USART相关库函数10.3.8函数USART_ITConfig函数名USART_ITConfig函数原形voidUSART_ITConfig(USART_TypeDef*USARTx,uint16_tUSART_IT,FunctionalStateNewState)功能描述使能或者失能指定的USART中断输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2USART_IT:待使能或者失能的USART中断源参阅Section:USART_IT查阅更多该参数允许取值范围输入参数3NewState:USARTx中断的新状态这个参数可以取:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无USART_IT:输入参数USART_IT使能或者失能USART的中断。USART_IT描述USART_IT_PE奇偶错误中断USART_IT_TXE发送中断USART_IT_TC传输完成中断USART_IT_RXNE接收中断USART_IT_IDLE空闲总线中断USART_IT_LBDLIN中断检测中断USART_IT_CTSCTS中断USART_IT_ERR错误中断例:/*EnablestheUSART1transmitinterrupt*/USART_ITConfig(USART1,USART_IT_TransmitENABLE);10.3USART相关库函数10.3.9函数USART_GetITStatusUSART_IT:下表给出了所有可以被函数USART_GetITStatus检查的中断标志位列表函数名USART_GetITStatus函数原形ITStatusUSART_GetITStatus(USART_TypeDef*USARTx,uint16_tUSART_IT)功能描述检查指定的USART中断发生与否输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2USART_IT:待检查的USART中断源输出参数无返回值USART_IT的新状态先决条件无被调用函数无USART_IT描述USART_IT_PE奇偶错误中断USART_IT_TXE发送中断USART_IT_TC发送完成中断USART_IT_RXNE接收中断USART_IT_IDLE空闲总线中断USART_IT_LBDLIN中断探测中断USART_IT_CTSCTS中断USART_IT_ORE溢出错误中断USART_IT_NE噪音错误中断USART_IT_FE帧错误中断例:/*GettheUSART1OverrunErrorinterruptstatus*/ITStatusErrorITStatus;ErrorITStatus=USART_GetITStatus(USART1,USART_IT_ORE);10.3USART相关库函数10.3.10函数USART_ClearITPendingBit函数名USART_ClearITPendingBit函数原形USART_ClearITPendingBit(USART_TypeDef*USARTx,uint16_tUSART_IT)功能描述清除USARTx的中断待处理位输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2USART_IT:待检查的USART中断源参阅Section:USART_IT查阅更多该参数允许取值范围输出参数无返回值无先决条件无被调用函数无例:/*CleartheOverrunErrorinterruptpendingbit*/USART_ClearITPendingBit(USART1,USART_IT_OverrunError);10.3USART相关库函数10.3.11函数USART_DMACmd函数名USART_DMACmd函数原形voidUSART_DMACmd(USART_TypeDef*USARTx,uint16_tUSART_DMAReq,FunctionalStateNewState)功能描述使能或者失能指定USART的DMA请求输入参数1USARTx:x可以是1,2或者3,来选择USART外设输入参数2USART_DMAreq:指定DMA请求参阅Section:USART_DMAreq查阅更多该参数允许取值范围输入参数3NewState:USARTxDMA请求源的新状态这个参数可以取:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无USART_DMAreq:选择待使能或者失能的DMA请求。USART_DMAreq描述USART_DMAReq_Tx发送DMA请求USART_DMAReq_Rx接收DMA请求例:/*EnabletheDMAtransferonRxandTxactionforUSART2*/USART_DMACmd(USART2,USART_DMAReq_Rx|USART_DMAReq_Tx,ENABLE);10.4项目实例STM32微控制器通过串口和上位机建立通信连接,上位机获取本机时间,并通过串口发送给STM32微控制器,微控制器在收到上位机发送过来的一组数据后,提取出小时、分钟和秒钟的数值,显示于数码管上,并将收到数据个数发送至上位机。10.4项目实例10.4.1项目分析——串口时间同步项目串口的操作步骤打开GPIO的时钟使能和USART的时钟使能设置串口的I/O口模式(一般输入是浮空输入,
输出是复用推挽输出)初始化USART。(包括设置波特率、数据长度、停止位、校验位等)如果使用中断接收的话,那么还要设置NVIC并打开中断使能。01020304串口的操作步骤10.4项目实例10.4.1项目分析串口的具体配置方法打开时钟GPIO口的时钟和USART的时钟01初始化GPIO口要使用STM32F103的USART1必需要将其TX(PA9)初始化为复用推挽输出,将其RX(PA10)初始化为浮空输入02初始化串口第一个参数是用来设置要选择的串口,我们要使用的是USART1。第二个参数是传递一个结构体的指针,这里我们采用的“96N81”,无硬件流控制格式。03串口使能第一个参数是用来设置要设置的USART第二个参数是用来选择设置的状态,所以我们设置为:ENABLE0410.4项目实例10.4.1项目分析串口的具体配置方法设置中断优先级和开中断设置中断优先级和开中断NVIC_Init(&NVIC_InitStructure)函数用来设置中断的优先级和打开中断。05串口发送数据USART_SendData()函数是用来发送数据的06检测串口状态检测串口状态USART_GetFlagStatus()函数用是用来检测状态的函数07串口中断配置函数USART_ITConfig()是用来打开USART中断的函数08检测串口状态USART的中断函数09获取中断标志状态USART_GetITStatus()函数是获取中断标志状态函数10检测串口状态读取串口数据USART_ReceiveData()函数用来读取USART接收到的数据11USART1_IRQHandler()函数是USART1的中断服务程序10.4项目实例10.4.2项目实施1.微控器程序设计第一步:复制上一章创建工程模板文件夹到桌面,并将文件夹改名为“9USART”,将原工程模板编译一下,直到没有错误和警告为止。第二步:为工程模板的“ST_Driver”项目组添加串口通信USART需要用的源文件“stm32f10x_usart.c”,该文件位于“..\Libraries\STM32F10x_StdPeriph_Driver\src”目录下8PWM9USART10.4项目实例第三步:点击“File/New”新建两个文件,将其改名为USART.C和USART.H并保存到工程模板下的APP文件夹中。并将USART.C文件添加到APP项目组下。第四步:在USART.H文件中输入如下源程序,其中条件编译格式不变,只要更改一下预定义变量名称即可,需要将我们定义函数的声明加到头文件当中。参考代码如下:#ifndef_USART_H#define_USART_H#include"stm32f10x.h"voidUsart1_Init(void);#endif1.微控器程序设计10.4项目实例第五步:在USART.C文件中输入如下源程序,在程序中首先包含USART.H头文件,然后创建Usart1_Init()串口初始化程序,其中包括打开端口时钟,GPIO初始化,USART初始化,中断初始化等内容#include"USART.H“voidUsart1_Init(){ GPIO_InitTypeDefGPIO_InitStructure; USART_InitTypeDefUSART_InitStructure; NVIC_InitTypeDefNVIC_InitStructure;//中断结构体定义
/*打开端口时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); /*配置GPIO的模式和IO口*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //TX//串口输出PA9 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure); /*初始化串口输入IO*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //RX//串口输入PA10 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //模拟输入
GPIO_Init(GPIOA,&GPIO_InitStructure); /*初始化GPIO*/
参考程序代码1.微控器程序设计10.4项目实例/*USART串口初始化*/ USART_InitStructure.USART_BaudRate=9600; //波特率设置为9600
USART_InitStructure.USART_WordLength=USART_WordLength_8b; //数据长8位
USART_InitStructure.USART_StopBits=USART_StopBits_1; //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); /*初始化USART1*/ USART_Cmd(USART1,ENABLE); /*使能USART1*/ USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //使能或者失能指定的USART中断接收中断
USART_ClearFlag(USART1,USART_FLAG_TC); //清除USARTx的待处理标志位
/*设置NVIC参数*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn; //打开USART1的全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //响应优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能
NVIC_Init(&NVIC_InitStructure); }
参考程序代码1.微控器程序设计10.4项目实例第六步:在main.h文件的中间部分添加“#include"USART.H"”语句,即包含USART.H头文件。第七步:在main.c文件中输入如下源程序,首先对时间变量赋初值,然后分别对数码管、外部中断、定时器和串口进行初始化,最后应用无限循环结构显示时间,并等待中断发生。第六步参考代码如下:#ifndef_MAIN_H#define_MAIN_H#include"stm32f10x.h"#include"LED.h"#include"beepkey.h"#include"dsgshow.h"#include"EXTI.H“#include"timer.h“#include"USART.H"#endif第七步参考代码如下:#include"main.h"u8hour,minute,second;intmain(){ hour=9;minute=30;second=25; DsgShowInit(); //数码管管脚初始化
EXTIInti(); //外部中断初始化
TIM6Init(); //定时器初始化
Usart1_Init(); //串口初始化
while(1) {DsgShowTime(); //动态扫描显示时间
} }1.微控器程序设计10.4项目实例第八步:在Keil-MDK软件操作界面中打开“User”项目组下面的“stm32f10x_it.c”文件。并在“stm32f10x_it.c”文件的最下面编写USART接收数据中断服务程序。根据上位机数据发送格式,在中断服务程序中,收到的第一数据确认为小时数值,第二个数据确认为分钟数值,第三个数据确认为秒数值,并将收到的数据个数发送到上位机。1.微控器程序设计#include"stm32f10x_it.h"#include"systick.h"externu8hour,minute,second;voidTIM6_IRQHandler(void){TIM_ClearFlag(TIM6,TIM_IT_Update);if(++second==60){second=0;if(++minute==60){minute=0;if(++hour==24)hour=0;}}}voidUSART1_IRQHandler(void)//串口1中断函数{staticunsignedchark=0;USART_ClearFlag(USART1,USART_FLAG_TC);k++;if(k%3==1)hour=USART_ReceiveData(USART1);elseif(k%3==2)minute=USART_ReceiveData(USART1);elsesecond=USART_ReceiveData(USART1);USART_SendData(USART1,k);//通过外设USARTx发送单个数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);}10.4项目实例第九步:编译工程,如没有错误,则会在MDK文件夹中Objects文件夹生成“Template.hex”文件,如有错误则修改源程序直至没有错误为止。第十步:将生成的目标文件通过ISP软件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026临床用血管理委员会职责与工作制度试题及答案
- 能源站地源热泵土方开挖专项施工方案
- 2026年护士条例试题及答案2026
- 火车站项目加固工程安全专项施工方案-施工技术方案
- 中级注册安全工程师之安全实务化工安全真题附答案
- 2026年医院感染管理制度试题及答案,医院感染管理办法考试题及答案
- 制冷企业电工运行操作安全操作规程
- 建筑节能检测专项施工方案
- Python程序设计-从基础开发到数据分析(第2版)-微课版 教学大纲 夏敏捷
- 第一单元综合预习检测-2026-2027学年语文二年级上册统编版
- 中国交建集团2026届春季校园招聘备考题库附答案详解(典型题)
- 2025年5月上海市普通高中学业水平等级性考试政治试卷(含答案)
- T-CCIAA 48-2025 混合苯标准规范
- 广东粤财投资控股有限公司招聘笔试题库2026
- 2025-2030药用植物资源循环利用优化方案设计及国际化产业运营模式探讨
- 园林病虫害认知培训课件
- 2025海南省生态环境监测中心招聘事业编制人员(十三)(公共基础知识)测试题带答案解析
- 便道施工验收方案
- 幼儿园保健知识培训课件
- 中医疫病学课件
- 销售部降本增效方案
评论
0/150
提交评论