任务6-2 PC控制数码管显示(中断方式)_第1页
任务6-2 PC控制数码管显示(中断方式)_第2页
任务6-2 PC控制数码管显示(中断方式)_第3页
任务6-2 PC控制数码管显示(中断方式)_第4页
任务6-2 PC控制数码管显示(中断方式)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

USART2通信数码管显示中断控制STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用任务6-2PC控制数码管显示(中断方式)项目六

红外测温蓝牙智控系统设计与实现目录CONTENTS01任务目标明确本任务的学习目标与功能要求,掌握USART2中断通信与数码管显示的核心技能双向通信数码管显示按键计数02知识储备学习UART通信电平标准与I2C总线协议,理解TTL、RS-232、RS-485电平转换原理电平标准I2C协议外设接口03任务实施完成仿真电路设计与程序开发,实现USART2初始化、NVIC中断配置和收发功能电路设计程序开发联调测试04任务总结与提升训练回顾核心知识点,提升技能水平,通过实践操作和创新扩展巩固学习成果知识回顾技能提升拓展练习《STM32嵌入式技术及应用》项目6任务2建议课时:6学时难度等级:中级01任务目标明确本任务的学习目标与功能要求双向通信USART2串口收发数码管显示字符实时显示按键计数中断发送数据01任务目标与功能要求TaskObjectivesandFunctionalRequirements核心任务目标将STM32的USART2接口(RXD和TXD引脚)与PC的串口(利用串口虚拟终端)连接,实现以下功能:通过串口助手向STM32发送0~9及A~F范围内的字符,并在共阳LED数码管上显示这些字符;同时,配置一个按键K1,每按一次,系统计数加1,并通过串口以中断传输方式,将计数值发送到串口助手上显示。硬件连接要求1USART2接口连接PA2(TX)→PC串口RXD,PA3(RX)→PC串口TXD2数码管驱动PC0~PC6驱动共阳数码管段码A~G3按键输入按键K1连接PC7引脚通信参数配置波特率9600b/s数据位8bit停止位1bit传输方式中断方式功能验证Proteus仿真验证代码规范注释完整清晰低碳设计优化功耗管理02知识储备UART通信电平标准与I2C总线协议电平标准TTL/RS-232/RS-485I2C协议总线通信机制外设接口STM32通信模块02UART通信中的电平标准概述OverviewofUARTCommunicationLevelStandards为什么需要不同的电平标准?在STM32嵌入式系统开发中,UART作为一种广泛应用的通信方式,其传输效率和稳定性至关重要。为了提高通信的抗干扰能力和延长传输距离,UART通信常采用不同的电平标准。不同的应用场景对通信距离、抗干扰能力和电路复杂度有不同的要求,因此需要选择合适的电平标准来满足实际需求。TTLTTL电平逻辑电平高电平3.3V,低电平0V应用场景板内短距离传输特点直接输出,无需转换抗干扰能力较弱RS-232RS-232电平逻辑电平(负逻辑)逻辑1:-5V~-15V逻辑0:5V~15V应用场景计算机通信、工业控制特点抗干扰能力强全双工通信RS-485RS-485电平逻辑电平(差分)逻辑0:+2~+6V逻辑1:-6~-2V应用场景工业现场、远距离通信特点差分传输,抗干扰最强半双工/单工关键要点电平标准选择需权衡传输距离、抗干扰能力和电路复杂度短距离→TTL中距离→RS-232远距离→RS-48502TTL电平与RS-232电平TTLLevelandRS-232LevelTTL电平电平定义逻辑1(高电平)3.3V逻辑0(低电平)0V优势直接由微控制器输出,无需额外转换电路简化电路设计,降低成本适用于板内短距离传输局限性抗干扰能力相对较弱通常仅适用于板内短距离传输RS-232电平电平定义(负逻辑)逻辑1-5V~-15V逻辑05V~15V注意:RS-232采用负逻辑优势增强抗干扰能力,延长传输距离连接线少(仅需RX、TX、GND三线)支持全双工通信,波特率可调电平转换芯片使用MAX232芯片实现TTL与RS-232电平转换特点:支持两组UART电平转换,外围104电容用于正负电压转换TTL↔RS-232电平转换示意TTL电平3.3V/0VSTM32MAX232电平转换转换芯片RS-232电平±5V~±15VPC串口02RS-485/RS-422电平标准RS-485/RS-422LevelStandard差分传输原理为什么采用差分传输?RS-232电平标准在提高电压的方式上仍不足以完全对抗复杂的电磁干扰。因此,RS-485采用了差分传输方式,通过两根信号线的电压差来表示逻辑状态,有效抑制共模干扰。电平定义逻辑0+2V~+6V逻辑1-6V~-2V核心优势接口信号电平比RS-232更低,不易损坏芯片电平与TTL兼容,方便与TTL电路连接差分信号抑制共模干扰,抗干扰能力最强通信方式特点通信方式半双工通信发送和接收不能同时进行,需要切换单工通信只能单向传输数据由于差分信号需要两根线传输,无法同时收发状态切换控制发送和接收状态需要通过RE、DE等引脚进行切换RE引脚接收使能DE引脚发送使能典型转换芯片UART接口通过连接RS-485电平转换芯片(如MAX487、SP3485等)把TTL电平转接为RS-485差分信号工业应用RS-485在工业现场得到广泛应用,适用于远距离、强干扰环境下的可靠通信工业控制楼宇自动化仪器仪表02STM32外设接口概述STM32PeripheralInterfacesOverview丰富的外设接口资源STM32微控制器配备了丰富的外设接口模块,以灵活应对各种嵌入式应用场景的需求。除USART接口外,还涵盖了SPI(串行外设接口)、I2C(两线制串行总线)、CAN(控制器局域网)以及USB(通用串行总线)等多种通信接口。这些接口为嵌入式系统提供了强大的通信能力和扩展性。USART通用同步异步收发器全双工通信波特率可调支持中断/DMASPI串行外设接口高速全双工主从模式4线接口I2C两线制串行总线仅需2根线多设备总线应答机制CAN控制器局域网差分传输多主结构错误检测学习重点本任务主要涉及USART接口的应用,后续将详细介绍I2C总线协议。掌握这些通信接口的原理和编程方法,是嵌入式开发的核心技能。02I2C总线接口引脚定义I2CBusInterfacePinDefinitionI2C协议简介协议特点I2C(Inter-IntegratedCircuit)协议是一种主从结构的串行通信协议,广泛用于微控制器与外部设备间的数据传输。信号线SDA双向串行数据线SerialDataLineSCL时钟信号线SerialClockLine多设备总线I2C是一种多设备总线,允许在一根总线上挂载多个设备,通过唯一的设备地址进行识别和通信。I2C接口引脚定义STM32F103R6I2C资源芯片有2路I2C总线,提供多主机功能,可实现所有I2C总线的时序、协议、仲裁和定时功能,支持标准和快速传输两种模式,同时与SMBus2.0兼容。引脚定义表端口功能默认引脚重映射I2C1SMBAPB5-SCLPB6PB8SDAPB7PB9I2C2SCLPB10-SDAPB11-SMBAPB12-典型应用场景STM32F103开发板上的I2C总线通信系统连接了多个I2C器件,包括EEPROM器件AT24C02和加速度计/陀螺仪传感器芯片MPU6050,实现数据的存储和传感器数据采集。02I2C工作方式与总线特征I2CWorkingModeandBusCharacteristics四种工作模式1从发送器模式SlaveTransmitter-从设备向主设备发送数据2从接收器模式SlaveReceiver-从设备接收主设备发送的数据3主发送器模式MasterTransmitter-主设备向从设备发送数据4主接收器模式MasterReceiver-主设备接收从设备发送的数据主从模式切换默认工作模式I2C接口默认工作于从模式,等待主设备的通信请求。切换到主模式在生成起始条件后自动切换到主模式,主动发起通信。切换回从模式当仲裁丢失或接收到停止信号时,接口将切换回从模式。这种设计允许多个主机在同一总线上进行通信,提高了系统的灵活性。起始位SCL高电平时SDA下跳沿停止位SCL高电平时SDA上跳沿数据位SCL时钟周期传输一位数据包每包8位(1字节)应答信号ACK/NACK第9个时钟02I2C标准外设库函数I2CStandardPeripheralLibraryFunctions标准外设库提供了一套标准的接口函数,用于通过I2C总线与外部设备进行通信,包括设备的配置、数据的发送和接收,以及事件和中断的处理。配置与控制函数voidI2C_Cmd(I2C_TypeDef*I2Cx,FunctionalStateNewState);//使能或禁能I2C接口voidI2C_GenerateSTART(I2C_TypeDef*I2Cx,FunctionalStateNewState);//产生I2C通信的START条件voidI2C_GenerateSTOP(I2C_TypeDef*I2Cx,FunctionalStateNewState);//产生I2C通信的STOP条件voidI2C_AcknowledgeConfig(I2C_TypeDef*I2Cx,FunctionalStateNewState);//使能或禁能I2C应答数据传输函数voidI2C_Send7bitAddress(I2C_TypeDef*I2Cx,u8Address,u8I2C_Direction);//发送7位I2C设备地址和读写方向voidI2C_SendData(I2C_TypeDef*I2Cx,u8Data);//发送一个字节的数据u8I2C_ReceiveData(I2C_TypeDef*I2Cx);//接收一个字节的数据事件与标志位函数ErrorStatusI2C_CheckEvent(I2C_TypeDef*I2Cx,u32I2C_EVENT);//检查是否发生指定事件u32I2C_GetLastEvent(I2C_TypeDef*I2Cx);//获取最后一次发生的事件FlagStatusI2C_GetFlagStatus(I2C_TypeDef*I2Cx,u32I2C_FLAG);//获取标志位状态voidI2C_ClearFlag(I2C_TypeDef*I2Cx,u32I2C_FLAG);//清除标志位中断相关函数ITStatusI2C_GetITStatus(I2C_TypeDef*I2Cx,u32I2C_IT);//获取中断的状态voidI2C_ClearITPendingBit(I2C_TypeDef*I2Cx,u32I2C_IT);//清除中断挂起位这些函数覆盖了I2C通信的完整流程,从初始化配置到数据传输,再到事件处理和中断管理。02I2C通信实现流程I2CCommunicationImplementationProcessI2C通信的完整实现包括GPIO配置、I2C初始化、中断配置(可选)和数据传输等多个步骤,需要按照正确的顺序执行才能确保通信正常。1GPIO时钟使能RCC_APB2PeriphClockCmd();使能GPIO端口时钟2GPIO模式设置GPIO_Init();SCL、SDA设置为GPIO_Mode_AF_OD3I2C时钟使能RCC_APB1PeriphClockCmd();使能I2C接口时钟4I2C复位I2C_DeInit();复位I2C接口(可选)5I2C参数初始化I2C_Init();配置I2C工作参数6NVIC中断配置NVIC_Init();I2C_ITConfig();初始化NVIC并开启中断(可选)7使能I2CI2C_Cmd();使能I2C接口工作8中断处理函数I2Cx_EV_IRQHandler();编写中断服务程序(若开启中断)9数据传输操作START->Address->Data->ACK->STOP执行完整的数据传输流程10状态获取I2C_CheckEvent();I2C_GetLastEvent();获取传输事件及状态注意事项GPIO模式必须设置为复用开漏模式(GPIO_Mode_AF_OD),这是I2C总线的硬件要求。中断配置步骤为可选,根据实际应用需求决定是否使用中断方式。03任务实施仿真电路设计与程序开发电路设计Proteus仿真电路搭建程序开发USART2中断通信程序联调测试软硬件联合调试验证03任务实现要求TaskImplementationRequirements虚拟串口配置软件工具使用VirtualSerialPortDriver软件生成虚拟串口设备生成连接生成连接的COM1和COM2虚拟串口对作用说明COM1用于Proteus仿真连接,COM2用于串口调试助手连接硬件实现串口连接连接STM32的USART2接口与PC的串口,利用串口虚拟终端进行通信数码管显示电路PC0~PC6引脚驱动共阳LED数码管的笔段A~G引脚按键输入按键K1连接到PC7引脚程序设计初始化GPIO端口初始化USART2串口通信配置NVIC中断控制器编写串口接收和发送函数编写按键扫描程序功能验证仿真验证在Proteus仿真环境中验证数码管显示和按键计数功能是否正常通信测试调整串口参数以确保通信稳定无误,验证9600b/s波特率下的数据传输验证内容包括:字符显示正确性、按键计数准确性、串口收发稳定性03仿真电路设计SimulationCircuitDesignUSART2连接STM32引脚PA2/USART2_TX→发送PA3/USART2_RX→接收COMPIM串口模型RXD←PA2(接收)TXD→PA3(发送)数码管驱动驱动引脚PC0~PC6引脚驱动共阳LED数码管段码连接PC0→A段PC1→B段PC2→C段PC3→D段PC4→E段PC5→F段PC6→G段按键输入按键连接按键K1连接到PC7引脚功能说明每按一次K1,系统计数加1,并通过串口发送计数值按键采用低电平有效方式串口模型配置P1器件特点通过使用串口模型P1器件已集成了MAX232电平转换芯片,在Proteus环境中实现STM32芯片与PC的串行通信。接口配置P1器件属性中配置接口为COM1通信参数设置波特率9600b/s数据位8bit停止位1bit03GPIO初始化函数GPIOInitializationFunctionMyGPIOC_Init函数定义PC0到PC6用于驱动数码管显示,配置为输出模式;PC7用作按键输入,配置PC7为浮空输入模式。数码管驱动引脚引脚范围PC0~PC6共7个引脚配置模式配置为输出模式(推挽输出)功能说明驱动共阳LED数码管的段码A~G按键输入引脚引脚PC7引脚配置模式配置为浮空输入模式功能说明检测按键K1的按下状态代码实现要点时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);输出配置GPIO_Mode_Out_PPGPIO_Speed_50MHz输入配置GPIO_Mode_IN_FLOATING限于篇幅,完整实现代码参考其他任务。GPIO初始化是嵌入式开发的基础,需要正确配置引脚模式和时钟使能。03USART2初始化函数(一)USART2InitializationFunction(Part1)MyUSART2_Init函数用于初始化USART2串口通信,本部分讲解GPIO配置:使能时钟、配置PA2为复用推挽输出(发送)、配置PA3为浮空输入(接收)。时钟使能AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);使能复用功能时钟GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);使能GPIOA端口时钟PA2发送引脚配置引脚设置MyGPIO.GPIO_Pin=GPIO_Pin_2;输出速度MyGPIO.GPIO_Speed=GPIO_Speed_50MHz;模式配置MyGPIO.GPIO_Mode=GPIO_Mode_AF_PP;复用功能推挽输出初始化GPIO_Init(GPIOA,&MyGPIO);PA3接收引脚配置引脚设置MyGPIO.GPIO_Pin=GPIO_Pin_3;模式配置MyGPIO.GPIO_Mode=GPIO_Mode_IN_FLOATING;浮空输入模式初始化GPIO_Init(GPIOA,&MyGPIO);PA2配置为复用推挽输出用于发送数据,PA3配置为浮空输入用于接收数据。这是USART通信的标准GPIO配置方式。03USART2初始化函数(二)USART2InitializationFunction(Part2)本部分讲解USART配置:使能USART2时钟、配置通信参数、设置波特率、使能中断和USART工作。USART时钟与参数使能USART2时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);USART2在APB1总线上通信参数配置波特率9600数据位8b停止位1校验位无硬件流控无模式收发波特率设置标准初始化USART_Init(USART2,&MyUSART);配置基本通信参数重新设置波特率USART2->BRR=0x1D4C/9/2;由于仿真时钟为8M,PCLK1=4M,需要重新计算波特率寄存器值仿真环境与实际硬件时钟不同,需要根据实际情况调整波特率中断使能与USART工作使能接收中断USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);接收数据寄存器非空中断使能发送完成中断USART_ITConfig(USART2,USART_IT_TC,ENABLE);传输完成中断使能USART2USART_Cmd(USART2,ENABLE);启动USART2工作03NVIC中断控制器配置NVICInterruptControllerConfigurationMyNVIC_Init函数配置NVIC中断控制器,设置USART2中断的优先级和使能。正确配置NVIC是确保中断正常响应的关键。优先级分组设置优先级分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);设置2位抢占优先级,2位响应优先级优先级说明抢占优先级:决定中断嵌套响应优先级:决定同优先级中断响应顺序中断通道配置设置向量通道MyNVIC.NVIC_IRQChannel=USART2_IRQn;抢占优先级MyNVIC.NVIC_IRQChannelPreemptionPriority=2;响应优先级MyNVIC.NVIC_IRQChannelSubPriority=2;使能中断MyNVIC.NVIC_IRQChannelCmd=ENABLE;完整代码实现voidMyNVIC_Init(void){NVIC_InitTypeDefMyNVIC;//定义初始化NVIC结构体变量NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置优先级分组MyNVIC.NVIC_IRQChannel=USART2_IRQn;//设置向量通道MyNVIC.NVIC_IRQChannelPreemptionPriority=2;//设置抢占优先级MyNVIC.NVIC_IRQChannelSubPriority=2;//设置响应优先级MyNVIC.NVIC_IRQChannelCmd=ENABLE;//使能设置的向量通道中断NVIC_Init(&MyNVIC);//调用NVIC初始化函数完成配置}NVIC优先级配置对系统实时性有重要影响,需要根据应用需求合理设置抢占优先级和响应优先级。03串口发送函数与中断处理USARTSendFunctionandInterruptHandlerMyUSART2_Send函数通过USART2中断发送字符串数据。在USART2接收完成中断中处理接收到的数据,并实时显示在数码管上。发送函数voidMyUSART2_Send(char*str){strcpy(SendBuffer,str);//复制字符串到发送缓冲区SendIndex=0;//初始化发送索引SendFlag=SET;//设置发送标志USART_SendData(USART2,SendBuffer[0]);//发送第一个字符while(SendFlag);//忙等待直到发送完成}strcpy:复制待发送字符串到缓冲区SendIndex:记录当前发送位置SendFlag:发送完成标志中断处理函数VoidUSART2_IRQHandler(void){chartemp;if(USART_GetITStatus(USART2,USART_IT_TC)){//发送完成中断处理USART_ClearITPendingBit(USART2,USART_IT_TC);if(SendFlag){temp=SendBuffer[++SendIndex];if(temp)USART_SendData(USART2,temp);elseSendFlag=0;}}if(USART_GetITStatus(USART2,USART_IT_RXNE)){//接收完成中断处理USART_ClearITPendingBit(USART2,USART_IT_RXNE);temp=USART_ReceiveData(USART2);...//数码管显示处理}}TC中断:发送完成,发送下一个字符RXNE中断:接收完成,读取数据中断处理流程发送时采用中断方式逐字符发送,接收时在中断服务函数中实时处理接收到的数据,实现高效的串口通信。03数码管显示逻辑LEDDisplayLogic在USART2_IRQHandler中处理接收数据,根据接收到的字符更新数码管显示。支持显示0-9数字和A-F十六进制字符。接收处理代码if(USART_GetITStatus(USART2,USART_IT_RXNE)){USART_ClearITPendingBit(USART2,USART_IT_RXNE);temp=USART_ReceiveData(USART2);//根据接收字符更新数码管显示if(temp>='0'&&temp<='9')GPIO_Write(GPIOC,LEDSEG[temp-'0']);elseif(temp>='A'&&temp<='F')GPIO_Write(GPIOC,LEDSEG[temp-'A'+10]);elseif(temp>='a'&&temp<='f')GPIO_Write(GPIOC,LEDSEG[temp-'a'+10]);}清除中断标志:必须清除,否则中断会持续触发读取数据:从接收数据寄存器读取字符字符映射关系数字字符'0'-'9'LEDSEG[temp-'0']索引0-9,对应数字0-9的段码大写字母'A'-'F'LEDSEG[temp-'A'+10]索引10-15,对应字母A-F的段码小写字母'a'-'f'LEDSEG[temp-'a'+10]索引10-15,不区分大小写共阳数码管说明共阳数码管的段码表设计:输出低电平点亮对应段,输出高电平熄灭。LEDSEG数组存储各字符对应的段码值。03主函数与按键处理MainFunctionandKeyProcessing主函数完成初始化后进入主循环,检测按键K1状态,实现计数功能并通过串口发送计数值。主函数流程intmain(void){MyGPIOC_Init();//GPIO初始化MyUSART2_Init();//USART2初始化MyNVIC_Init();//NVIC初始化MyUSART2_Send(TestStr);//发送测试字符串while(1){//按键处理代码}}初始化顺序:GPIO→USART2→NVIC测试发送:初始化完成后发送测试字符串按键处理逻辑staticintK1_Cnt;//去抖延时变量#defineK1GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)staticintKeyCnt;//按键计数变量if((RESET==K1)&&(999999!=K1_Cnt)&&(++K1_Cnt>10000)){if(RESET==K1)//确认按键已按下{K1_Cnt=999999;//置已按下标志if(++KeyCnt>9999)KeyCnt=0;//计数加1//转换为字符串并发送MyUSART2_Send(KeyStr);}}elseif(RESET!=K1)K1_Cnt=0;软件消抖:延时计数超过10000确认按键计数范围:0-9999循环计数计数值转字符串KeyStr[11]=(KeyCnt/1000)%10+'0';千位KeyStr[12]=(KeyCnt/100)%10+'0';百位KeyStr[13]=(KeyCnt/10)%10+'0';十位KeyStr[14]=(KeyCnt/1)%10+'0';个位03工程创建、编译与调试ProjectCreation,CompilationandDebugging工程创建编译工程使用KeilμVision5编译生成hex目标代码文件加载程序将hex文件加载到STM32F103芯片中启动程序点击运行按钮启动程序验证功能串口调试打开串口助手运行串口调试助手软件配置参数配置接口为COM2,设置波特率9600验证通信打开串口验证通信功能是否正常功能验证数码管显示发送字符0-9、A-F,观察数码管显示按键计数按下K1,观察串口助手接收计数值通信稳定性连续测试验证通信稳定无误调试与问题排查记录异常记录任何异常现象、错误提示或不符合预期的行为问题分析对发现的问题进行分析和定位代码修复修改代码进行修复重复调试重复调试步骤直到所有功能正常调试完成后保存调试结果和修改后的代码,为后续项目积累经验。04任务总结与提升训练知识回顾、技能提升与拓展练习知识回顾核心知识点总结技能提升进阶技能培养拓展练习实践操作训练04核心知识点回顾KeyKnowledgeReviewUSART中断接

温馨提示

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

评论

0/150

提交评论