实验(二):USART应用:指令控制RGB 彩灯实验设计

2023-10-09 05:30

本文主要是介绍实验(二):USART应用:指令控制RGB 彩灯实验设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、实验目的与任务

实验目的:

1. 学习对USART的使用;

2. 掌握KEIL5的仿真与调试。

任务:

1.   根据要求编写程序,并写出原理性注释;

2. 将检查程序运行的结果,分析一下是否正确;

3. 完成所建工程的验证调试。

二、实验要求

编写程序让开发板接收USART 数据,然后根据数据内容控制RGB 彩灯的颜色。

三、实验内容及步骤

1. 设计电路图

图1 RGBLED灯与STM32单片机接口电路

2. 软件设计流程图

图2 软件流程图

3. 实验步骤

(1)运行Keil uVision5开发环境,建立一个项目工程。

(2)在工程中添加main.c文件,因需要用到LED灯,所以将上次实验写好的LED文件移植到该工程中,然后在main.c中调用,如图3所示。

图3 main.c程序

(3)在工程中添加main.c文件,因其本实验用到串口通讯,故再建立一个MyUSART.c和MyUSART.h的两个文件,首先编写主函数MyUSART.c的源代码,如图4所示。

图4 MyUSART.c程序

(4)编写MyUSART.h程序,方便以后工程文件以移植,使项目工程工具有移植性,如图5所示。

图5 LED.h程序

运行并调试成功并无错误和警告。

(5)仿真图

图6 仿真图

4. 调试验证及结果

(1)将开发板连接到电脑上,使用STLINK将程序烧录到STM32单片机中,同时将CH340模块与STM32连接,如图7所示:

图7 烧录程序

(2)程序烧录后,观察到串口发送的数据,如图8所示:

图8 串口发送的数据

(3)程序烧录后,观察到LED灯根据电脑通过串口发送的不同数字闪烁不同颜色,如图9所示:

图9 LED灯闪烁抓拍

四、实验代码分析

(1)USART初始化程序:

void MyUSART_Init(void)
{//开启时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//初始化引脚GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//TX引脚,复用推挽输出;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//RX引脚,浮空输入或上拉输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化USARTUSART_InitTypeDef USART_InitStruct;USART_InitStruct.USART_BaudRate = 9600;//设置比特率USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制(不适应)USART_InitStruct.USART_Mode = USART_Mode_Tx| USART_Mode_Rx;//串口模式(发送,接收)USART_InitStruct.USART_Parity = USART_Parity_No;//校验位(不校验)USART_InitStruct.USART_StopBits = USART_StopBits_1;//停止位USART_InitStruct.USART_WordLength = USART_WordLength_8b;//字长USART_Init(USART1,&USART_InitStruct);USART_Cmd(USART1,ENABLE);
}

(2)USART功能函数程序:

//重定向printf
int fputc(int ch, FILE *f)
{USART_SendData(USART1,(uint8_t) ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);return ch;
}/*** @brief  接收数据* @param  * @retval */
uint8_t MyUSART_ReceiveData(void)
{	uint8_t RxData;if (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == SET){RxData = USART_ReceiveData(USART1);}return RxData;
}

(3)main函数程序:

uint8_t Dta = 0;int main(){LCD_Init();MyUSART_Init();printf("Hello World\r\n");while(1){//接收数据Dta = MyUSART_ReceiveData();if(Dta == 1)//LED1闪烁{LED1_Turn();Delay_ms(100);LED1_Turn();Delay_ms(100);}else if(Dta == 2)//LED2闪烁{LED2_Turn();Delay_ms(100);LED2_Turn();Delay_ms(100);}else if(Dta == 3)//LED3闪烁{LED3_Turn();Delay_ms(100);LED3_Turn();Delay_ms(100);}else//LED熄灭{GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);}}
}

五、实验总结

本次实验是一次关于USART的实验,通过编写程序实现STM32F103C8T6接收外部USART发送的数据,并控制RGB彩灯的颜色。本次实验的主要目的是学习USART的使用和掌握KEIL5的仿真与调试。

在实验中,首先需要配置USART的相关参数,包括波特率、数据位、停止位和校验位等,以便正确地接收外部发送的数据。其次,需要编写相应的程序来解析和处理接收到的数据,并根据数据内容控制RGB彩灯的颜色。在编写程序的过程中,需要注意一些细节问题,如数据的解析、控制指令的识别和处理等。

在实验过程中,我遇到了一些问题,例如USART接收到的数据不正确,RGB彩灯颜色控制不准确等。通过调试程序,逐步解决了这些问题,最终成功实现了外部数据的接收和RGB彩灯的颜色控制。

总的来说,本次实验让我更深入地了解了USART的使用和调试方法,并提高了我的程序设计和调试能力。同时,通过实验,我也更加熟悉了KEIL5的使用方法和调试工具的应用,这将对今后的开发工作有所帮助。

总之,本次实验是一次非常有收获的实验,让我更加深入地了解了嵌入式系统的开发和调试方法,也让我更加自信地面对今后的开发工作。我相信这次实验经历会成为我日后工作的宝贵经验和资产。

源码:实验二

这篇关于实验(二):USART应用:指令控制RGB 彩灯实验设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170674

相关文章

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库