实验(二):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

相关文章

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 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理