底层day2作业

思维导图

 作业:

1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度

  1. 连接硬件:将光敏电阻与单片机的ADC引脚连接,将LED灯与单片机的PWM引脚连接。
  2. 初始化:在程序中初始化ADC和PWM模块,并设置相应的引脚。
  3. 采样光敏电阻数值:使用ADC模块对光敏电阻进行采样,获取其数值。
  4. 转换为亮度值:根据采样到的光敏电阻数值,将其转换为对应的亮度值。可以通过一定的映射关系或者查找表来实现。
  5. 调节LED灯亮度:使用PWM模块控制LED灯的亮度,将转换得到的亮度值作为PWM占空比进行设置。

2.总结DMA+空闲中断接收数据的使用方法

  1. 配置ADC模块:首先需要配置ADC模块的参数,包括采样通道、采样精度、采样速率等。可以使用STM32CubeMX工具进行配置,或者手动编写代码进行配置。

  2. 配置DMA:使用DMA(直接内存访问)可以实现数据的高速传输,减少CPU的负载。配置DMA通道,将ADC的转换结果传输到指定的内存地址。

  3. 配置空闲中断:在DMA传输完成后,可以通过空闲中断来触发处理数据的操作。在空闲中断中可以读取DMA传输的数据,并进行相应的处理。

  4. 根据采样数值调节LED灯亮度:根据光敏电阻的采样数值,可以确定环境光的强度。根据需求,可以通过PWM(脉冲宽度调制)控制LED灯的亮度。根据采样数值的大小,调整PWM的占空比,从而改变LED灯的亮度。

总结:

1.DMA的作用(DMA+空闲中断接收数据)

DMA(Direct Memory Access,直接内存访问)
用于实现外部设备和系统内存之间的高效数据传输,从而减轻CPU的负担

空闲中断接收数据

处理长度不确定的数据,不知道外部什么时候会发来数据,可以开启DMA接收,让DMA一直监测是否有数据,当有数据并且接收完一包数据就产生空闲中断处理数据规定的时间一般指的是发送一个字节数据的时间。

串口接收完成中断回调函数是接收到指定数据后被调用(适用于数据量小长度长度确定的情况下)

空闲中断回调函数是一段时间内没有数据接收的时候被调用(适用于数据量大并且数据不确定长度的情况下)

函数

HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

2.串口重定向(如何实现串口重定向)

进行重定向之前,需要配置好串口,使用到串口的轮寻模式

加标准输入输出头文件:stdio.h

重写fputc()函数


int fputc(int ch,FILE *f) 
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,HAL_MAX_DELAY);
return ch;}

重写fgetc()函数

int fgetc(FILE *f)
{ 
uint8_t ch; 
HAL_UART_Receive( &huart1,(uint8_t*)&ch,1, HAL_MAX_DELAY ); 
return ch; 
}

 

3.串口的数据接收

串口是通过数据帧的发送,波特率就是代表每秒可以传输的数据位数(bit/s),波特率越大串口传输的速率越快。串口的数据帧格式:规定串口是如何发送和接收数据的。

1.起始位:代表开始发送一帧数据(1bit)

2.数据位:代表有效的数据(8bit == 1字节)

3.校验位:要来检测数据的正确性(1bit)(可有可无)

4.停止位:表现已经发送完成一次数据可以进行下一次数据的发送(1bit)

4.ADC采样(分辨率,采样时间)

ADC是一种将模拟信号转换为数字信号的一种器件或者是电路

分辨率:采样的精度,分辨率越高就代表了采样精度越高,得到的数值越准确。

12位的ADC:采样得到的数据的范围是在0~2^12-1(4095)

函数:

HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)

采样时间:239.5cycles(最大)

5.PWM(占空比,ARR,CNT和CCRX的关系)(如何去调整占空比)

PWM是脉宽调制(Pulse Width Modulation)常用于控制电机速度、LED亮度调节、音频信号合成

占空比 = 高电平占整个周期的时间 / 总电平时间

(一个定时器有四个PWM输出通道:每一个通道都可以对应一个引脚,通过定时器输出PWM波形可以达到调节电压的效果。)

CNT:计数值  ARR:重装载值  CCRX:比较寄存器

1.当CNT的值到达ARR的时候就会溢出就会变成0,然后重新计数。 CNT从0开始计数。

2.当CNT = CCRX的值就表现高电平。 ARR的值已经确定了,通过调节CCRX可以调节高低电平的占比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据分析技术工程师CCRC-BDATE

大数据分析技术工程师介绍 大数据始于科技之美,归于创造价值。大数据时代,“谁用好数据,谁就能把握先机、赢得主动”。当下数据驱动的电信、社交媒体、生物医疗、电子政务商务等行业都在产生着海量的数据,随着大规模数据关联、交叉…

@ResponseStatus

目录 概述: 用途: 参数: 注意事项: 自定义异常类: 底层原理: 概述: 在 Spring MVC 中,我们有很多方法来设置 HTTP 响应的状态码其中最直接的方法:使用 ResponseSt…

K8S之实现业务的蓝绿部署

如何实现蓝绿部署 什么是蓝绿部署?蓝绿部署的优势和缺点优点缺点 通过k8s实现线上业务的蓝绿部署 什么是蓝绿部署? 部署两套系统:一套是正在提供服务系统,标记为 “绿色” ;另一套是准备发布的系统,标记为…

删除指定的数

删除指定的数 题目描述:解法思路:解法代码:运行结果: 题目描述: 先输入10个整数存放在数组中,再输入⼀个整数n,删除数组中所有等于n的数字,数组中剩余的数组保证数组的最前面&#…

SpringBoot项目如何添加全局接口上下文

1. 定义Spring Boot应用的路由 首先,确保您的Spring Boot应用有一个统一的路由前缀。例如,可以在application.properties或application.yml配置文件中使用server.servlet.context-path属性来定义所有请求的基础路径。 # application.properties server…

vue基础教程(4)——深入理解vue项目各目录

博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 总览2. node_modules3.public4.src5.assets6.components7.router8.stores9.views10.App.vue11.main.js12.index.html 专栏简介 本系列文章由浅入深,从基础知识到实战…

docker部署若依项目

目录 目录 一、搭建局域 二、redis安装 1.创建目录 2. redis.conf修改 三、MySQL安装 1. 安装 2. 设置远程连接 3. 创建数据库 四、若依后端项目搭建 1. 切换到家目录 2. 上传jar包 3. 上传Dockerfile文件 4. 构建镜像 5. 运行容器 6. 查看运行情况 7. 测试(自己…

AD20软件使用指南:拼板操作与Gerber文件生成详解

文章目录 一、前言二、拼板1.创建新的PCB,用于放置拼板文件2.放置拼板阵列3.设置阵列信息4.V割拼板,放置工艺边和定位孔和光点5.完成拼板 三、生成Gerber文件1.输出Gerber文件2.选择单位和格式3.选择输出的图层4.生成Gerber文件5.生成钻孔文件 四、上传嘉…

腾讯云学生服务器多少钱?怎么申请?

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

微信小程序(五十一)页面背景(全屏)

注释很详细,直接上代码 上一篇 新增内容: 1.页面背景的基本写法 2.去除默认上标题实习全屏背景 3. 背景适配细节 源码: index.wxss page{/* 背景链接 */background-image: url(https://pic3.zhimg.com/v2-a76bafdecdacebcc89b5d4f351a53e6a_…

python 截取字符串string.split

目录 作用语法只要第一个值获得第3个值遍历 作用 根据某个符号对数据进行截取 从而获得自己想要的内容 语法 使用’string.split’ 方法 对字符串’123/abc/BPYC’ 以 ‘/’ 进行截取 string "123/abc/BPYC" substring string.split("/") print(subs…

C++:拷贝构造函数

1.概念 在现实生活中,可能存在一个与你一样的自己,我们称之为双胞胎。那在创建对象的时候,可否创建一个与已存在对象一模一样的新对象呢?答案是可以的,这就要通过拷贝构造函数来实现了。 拷贝构造函数:只有…

微服务基础

目录 一、单体架构 二、分布式架构 三、微服务 四、微服务结构 五、SpringCloud 六、服务拆分 七、远程调用 一、单体架构 单体架构就是将业务的所有功能都集中在一个项目中进行开发,并打成一个包进行部署。 他的优点很明显,就是架构简单&#xff…

C++的类和对象(四):拷贝构造函数

目录 拷贝构造函数 特性 自定义类型的传值传参和传引用传参对比 赋值运算符重载 拷贝构造函数 基本概念:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在创建一个已存在对象一模一样的新对象时…

数据结构:AVL树

目录 1、AVL树的概念 2、二叉搜索树的功能与实现 1、AVL树节点定义 2、AVL树的插入 3、AVL树的旋转操作 1、左旋 2、右旋 3、左右旋 4、右左旋 3、AVL树完整代码实现 1、AVL树的概念 在前面的文章中,我们学过了二叉搜索树,二叉搜索树虽可以缩短查…

勾股定理的七种经典证明

据说勾股定理约有500种证明方法,下面介绍几种经典的证明方法。 一、切割重拼法。 顾名思义,就是将图形切割成其他形式的图形,然后通过拼图转换为另一种图形,这个过程中图形的面积是不变的。 “赵爽弦图”是这种方法的经典应用&…

Android视角看鸿蒙第三课(module.json中的各字段含义之nametype)

Android视角看鸿蒙第三课(module.json中的各字段含义) 前言 上篇文章我们试图找到鸿蒙app的程序入口,确定了在鸿蒙工程中,由AppScope下的app.json5负责应用程序的图标及名称,由entry->src->main-module.json5负责桌面图标及名称的展示。 AppScope下的app.js…

使用Kali搭建钓鱼网站教程

一、前言 使用kali工具一分钟制作出和目标网站一模一样的钓鱼网站。目标用户使用钓鱼网站登录自己的账号,账号密码将被自动劫持。 二、钓鱼网站的制作过程 1.在虚拟机VMvare中登录kali linux 2.准备一个目标网址 3.在kail中搜索使用工具 4.在弹出的选项中选择第一…

【JavaEE初阶】 JVM简介

文章目录 🎍前言🍃JVM发展史🚩Sun Classic VM🚩Exact VM🚩HotSpot VM🚩JRockit🚩J9 JVM🚩Taobao JVM(国产研发) 🍀JVM 运行流程⭕总结 &#x1f3…

基于毕奥-萨伐尔定律的交流电机的4极旋转磁场matlab模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于毕奥-萨伐尔定律的交流电机的4极旋转磁场,对比不同定子半径,对比2级旋转磁场。 2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a…