当前位置: 首页 > news >正文

STM32day2

1.思维导图

个人暂时的学后感,不一定对,没什么东西,为做项目奔波中。。。
1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。

while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */adc_val = HAL_ADC_GetValue(&hadc);if(adc_val<3300&&flag==0){	flag=1;for(i=500;i>0;i--){TIM3->CCR3 = i;HAL_Delay(1);}}if(adc_val>3800&&flag==1){	flag=0;for(i=0;i<=500;i++){TIM3->CCR3 = i;HAL_Delay(1);}}HAL_Delay(1000);}/* USER CODE END 3 */

2.总结DMA+空闲中断接收数据的使用方法
原理是原本有cpu处理的数据交由DMA处理,
DMA接收时,一包数据接收完毕,会有一段空闲时间,例如传输一个字节所需的时间,就能把这包数据处理完,例如,通过串口发回电脑端。
DMA跟定时器有些相似,定时器是超时时间超时时,执行任务;
DMA是事件到了,比如一包数据输出完后,存在一个字节没有接收数据的时间,在这段时间内执行事件。
都有回调函数,执行原因不同,
DMA与CPU发送数据的区别,DMA的事件触发是接收完毕数据包后执行,CPU的事件触发是接收到单个字符时执行。
处理的数据长度不同。

1.DMA的作用(DMA+空闲中断接收数据)
DMA代替cpu检测并接收数据,接收完数据后会产生空闲中断,利用空闲中断对接收到的数据进行处理。
2.串口重定向(如何实现串口重定向)
在usart.c文件中在最底行重新定义串口fputc函数
例如:
int fputc(int ch,FILE* f)
{
    HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,1000);
    return 0;
}
3.串口的数据接收
串口数据接收有两种方法,完成中断回调函数,完成空闲中断回调函数。
前者用于处理已知长度的数据包
后者用于处理数据量大或长度不确定的情况

4.ADC采样(分辨率,采样时间)
ADC全称是模拟数字转换器,分辨率是采样的精度,采样时间就是字面意思,采一次样本需要的时长,在STM32里面最长采样时间是239.5Cycles,根据需求选择采样时间。
5.PWM(占空比,ARR,CNT和CCRX的关系)(如何去调整占空比)
PWM是调波,占空比是高电平占整个周期的时间/总-电平时间
PWM是脉宽调制的缩写,是一种通过控制信号的脉冲宽度来产生模拟效果的技术,PWM信号是一系列周期性的脉冲组成,每个脉冲的宽度可以调整,从而改变其平均功率或能量。
ARR是重装载值,CNT是计数值(预分频系数),CCRX是设置的阈值,也就是比较寄存器,高于CCRX端为高电平,低于为低电平,因为lED灯是低电平点亮,所以这里CCRX数值越大LED越亮,低电平在这个周期内占比多,达到调节电压的效果,就行稀释一样,需要低浓度还是高浓度,看比例调整,在微观角度调整,在宏观角度实现相同的效果。
 

相关文章:

  • 【AI视野·今日Sound 声学论文速览 第五十四期】Thu, 7 Mar 2024
  • 安装zabbix
  • C++ 特殊的类设计
  • 小米汽车上市进入倒计时,已开启内部试驾
  • 1.3 vue ui框架-element-ui框架
  • nicegui学习使用
  • 大语言模型系列-GPT-2
  • 解读电影级视频生成模型 MovieFactory
  • VUE——v-once指令
  • 一些硬件知识(六)
  • 24/03/07总结
  • 清除Mac OS上Xcode占用的空间
  • 第一次捡垃圾
  • 自然语言处理 | 语言模型(LM) 浅析
  • RPC——远程过程调用
  • CSS相对定位
  • JavaScript标准库系列——Math对象和Date对象(二)
  • java中的hashCode
  • Python学习之路16-使用API
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 安装python包到指定虚拟环境
  • 安卓应用性能调试和优化经验分享
  • 编写高质量JavaScript代码之并发
  • 分布式任务队列Celery
  • 基于HAProxy的高性能缓存服务器nuster
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 微信开放平台全网发布【失败】的几点排查方法
  • 为什么要用IPython/Jupyter?
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • raise 与 raise ... from 的区别
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #define用法
  • (8)STL算法之替换
  • (层次遍历)104. 二叉树的最大深度
  • (生成器)yield与(迭代器)generator
  • (新)网络工程师考点串讲与真题详解
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • .bat批处理出现中文乱码的情况
  • .NET文档生成工具ADB使用图文教程
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @GetMapping和@RequestMapping的区别
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [ 数据结构 - C++] AVL树原理及实现
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Android]竖直滑动选择器WheelView的实现
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [C++]二叉搜索树
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [java基础揉碎]方法的重写/覆盖
  • [LeetCode][138]【学习日记】深拷贝带有随机指针的链表
  • [LeetCode]—Add Binary 两个字符串二进制相加