STM32串口控制不同亮度等级的小灯

2024-04-24 14:48

本文主要是介绍STM32串口控制不同亮度等级的小灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用串口的输入控制LED灯的亮度,从而达到PC机与MAU交互通信的功能

此功能由三个部分组成,分别是:串口通信、LED灯亮度等级的设定、以及按键按下LED灯熄灭。

首先串口通信过程中要配置串口重定义:

/* USER CODE BEGIN 4 */#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif 
PUTCHAR_PROTOTYPE
{HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF); return ch;
}
GETCHAR_PROTOTYPE
{uint8_t ch;while (HAL_UART_GetState(&huart2) == RESET);HAL_UART_Receive(&huart2, (uint8_t *)&ch, 1, 0xffff);
//	  while (HAL_UART_GetState(&huart2) == RESET);
//	  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}/* USER CODE END 4 */

LED灯亮度等级设置:采用switch-case多分支选择结构来实现,每个case分别对应不同的亮度等级,用户在PC机上输入亮度等级后,通过串口通信,将此信息传输到MAU上,根据相应的亮度等级点亮LED灯。按键按下后LED灯熄灭,信号发送完毕。

int i,x,a;
void rank(int a);                            //声明函数
void delay(int i);                           //声明函数int main(void)                               //主函数
{while (1){printf("选择0-9亮度等级\r\n"); scanf("%d",&a);switch(a){case 0 : rank(0);break;case 1 : rank(1);break;case 2 : rank(2);break;case 3 : rank(3);break;case 4 : rank(4);break;case 5 : rank(5);break;case 6 : rank(6);break;case 7 : rank(7);break;case 8 : rank(8);break;case 9 : rank(9);break;default:printf("Enter data error!\r\nPlease enter again!"); }}
}
void rank(int i)                                         //定义函数
{  i=a*1000;      while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==1)       {         HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);         delay(i);         HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);         delay(10000-i);       }         if((HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13))==0)      {      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);      }
}void delay(int i)
{     while(i--); 
}


串口中断方式的发动作:HAL_UART_Transmit_IT;

串口中断方式的收动作:HAL_UART_Receive_IT

可以通过定时器、中断等方式控制LED的属性,中断方式可应用于多进程中。



 



这篇关于STM32串口控制不同亮度等级的小灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

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

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

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

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

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

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.