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

哪里网站海报做的比较好seo怎么优化简述

哪里网站海报做的比较好,seo怎么优化简述,苏州网站制作哪家靠谱,外包公司网站开发STM32外设AD-轮询法读取模板 一,什么是轮询?1,轮询法的直观理解2,轮询法缺点 二,CubeMX配置三,模板移植1,adc_app.c文件2,变量声明1,adc_app.c中2,mydefine.h…

STM32外设AD-轮询法读取模板

  • 一,什么是轮询?
    • 1,轮询法的直观理解
    • 2,轮询法缺点
  • 二,CubeMX配置
  • 三,模板移植
    • 1,adc_app.c文件
    • 2,变量声明
        • 1,adc_app.c中
        • 2,mydefine.h中
    • 3,轮询法局限性

ADC 配置完成后(通常通过 STM32CubeMX 生成初始化代码),我们如何获取转换结果呢?最简单直接的方法就是轮询法 (Polling)。

一,什么是轮询?

1,轮询法的直观理解

想象一下你要去楼下信箱取信:
你走到信箱旁 (HAL_ADC_Start(&hadc1); - 启动一次转换)。
你站在那里一直等,直到邮递员把信投进去 (HAL_ADC_PollForConversion(&hadc1, timeout); - 循环检查转换完成标志位,直到超时)。
邮递员投完信后,你打开信箱,取出信件 (adc_val = HAL_ADC_GetValue(&hadc1); - 读取转换结果)。

2,轮询法缺点

这种方式简单粗暴,但在等待期间 CPU 基本被"卡住"了,不能干别的事。如果转换时间很长,或者需要频繁读取,效率会很低。但在某些简单场景下,不失为一种快速验证功能的方法。

二,CubeMX配置

根据原理图选择ADC的输入引脚
在这里插入图片描述
将精度设置为12位
在这里插入图片描述
使能多通道
在这里插入图片描述
设置通道顺序和采样时间
在这里插入图片描述

三,模板移植

1,adc_app.c文件

#include "adc_app.h"__IO uint32_t adc_val;
__IO float voltage;void adc_task(void) 
{// 1. 启动 ADC 转换HAL_ADC_Start(&hadc1); // hadc1 是你的 ADC 句柄// 2. 等待转换完成 (阻塞式)//    参数 1000 表示超时时间 (毫秒)if (HAL_ADC_PollForConversion(&hadc1, 1000) == HAL_OK) {// 3. 转换成功,读取数字结果 (0-4095 for 12-bit)adc_val = HAL_ADC_GetValue(&hadc1);// 4. (可选) 将数字值转换为实际电压值//    假设 Vref = 3.3V, 分辨率 12 位 (4096)voltage = (float)adc_val * 3.3f / 4096.0f; // (这里可以加入你对 voltage 或 adc_val 的处理逻辑)my_printf(&huart1, "ADC Value: %lu, Voltage: %.2fV\n", adc_val, voltage);} else {// 转换超时或出错处理my_printf(&huart1, "ADC Poll Timeout!\n");}// 5. (重要)如果 ADC 配置为单次转换模式,通常不需要手动停止。//    如果是连续转换模式,可能需要 HAL_ADC_Stop(&hadc1);// HAL_ADC_Stop(&hadc1); // 根据你的 CubeMX 配置决定是否需要
}

逻辑分解:

  1. HAL_ADC_Start(&hadc1);: “开始转换!” 通知 ADC 硬件启动一次模数转换过程。

  2. HAL_ADC_PollForConversion(&hadc1, 1000);: “等等看结果出来没?” 这个函数会不断检查 ADC 状态寄存器中的转换完成标志位 (EOC - End Of Conversion)。如果标志位被硬件置位,表示转换完成,函数返回 HAL_OK。如果超过了设定的超时时间 (1000ms) 标志位还没置位,就返回 HAL_TIMEOUT。注意:这是一个阻塞函数,在等待期间,CPU 会卡在这里,执行一个循环检查。

  3. adc_val = HAL_ADC_GetValue(&hadc1);: “结果拿来!” 如果上一步返回 HAL_OK,就调用此函数从 ADC 数据寄存器中读取转换后的数字值。对于 12 位 ADC,这个值通常在 0 到 4095 之间。

adc_val在定义时前面加了__IO,这个修饰使得adc_val可以在Debug时进行修改

  1. 电压计算: 将读取到的数字值根据参考电压和分辨率,按比例计算出对应的模拟电压值。这是可选步骤,取决于你的应用需求。

  2. HAL_ADC_Stop(&hadc1); (可能需要): 如果你在 CubeMX 中将 ADC 配置为连续转换模式 (Continuous Conversion Mode),调用 HAL_ADC_Start 后 ADC 会不停地转换。在这种情况下,读取完一次后如果想停止,就需要调用 HAL_ADC_Stop。如果是单次转换模式 (Single Conversion Mode),ADC 完成一次转换后会自动停止,通常不需要调用 Stop。请检查你的 CubeMX 配置。

2,变量声明

1,adc_app.c中

__IO uint32_t adc_val;
“数字读数”: 用于存储从 HAL_ADC_GetValue 读取到的原始数字结果。__IO (volatile) 提示编译器这个值可能在预期流程之外被改变(虽然在纯轮询模式下意义不大,但在中断/DMA 模式下很重要)。

__IO float voltage;
“模拟电压”: 用于存储根据 adc_val 计算得到的实际电压值。使用 float 类型以获得更精确的小数值。

2,mydefine.h中

extern ADC_HandleTypeDef hadc1;
“ADC控制器”: HAL 库中代表 ADC1 硬件外设的结构体句柄。所有 ADC 操作都需要通过它进行。

3,轮询法局限性

轮询方式非常消耗 CPU 资源,因为它在等待期间反复检查状态,无法执行其他任务。只适用于对实时性要求不高、ADC 转换速度远快于处理需求的简单场景。对于需要同时处理多个任务或要求高效的应用,应优先考虑中断或 DMA 方式。

http://www.dtcms.com/wzjs/288362.html

相关文章:

  • 交互设计主要做什么搜索引擎优化方法案例
  • 最低价网站建设最常用的几个关键词
  • 厦门网站建设阿里seo关键词优化的技巧
  • 国家企业信息公示(全国)北京外贸网站优化
  • 做地区招聘网站搜索引擎优化要考虑哪些方面?
  • 深圳网站设计+建设首选快推广app下载
  • 学javaweb可以做网站嘛网站网络推广运营
  • 网站建设的相关技术百度网盘app下载安装电脑版
  • 网站实名认证需要什么雅思培训班价格一般多少
  • 免费网站空间phpseo免费课程
  • 青岛公司做网站美国搜索引擎
  • 旅游网页设计说明200字系统优化的意义
  • 做户外运动的网站黄页网推广服务
  • 读网站建设一定要买电脑实践吗上海最新疫情
  • 校园图书馆网站建设品牌营销策划ppt
  • 站长工具亚洲中文精品app拉新推广平台渠道
  • 企业网站建设的一般要素网络服务器地址怎么查
  • 做网站颜色类型是啥在线识别图片百度识图
  • 天津武清做网站tjniu重庆网络seo公司
  • 大连微网站百度关键词竞价价格
  • 做网站开发的流程搜索关键词的软件
  • 做app找哪个网站seo网址优化靠谱
  • 58网站 做现浇混凝土百度推广怎么登陆
  • 最有效的网站推广方案百度榜单
  • 找别人做网站注意什么网站点击排名优化
  • 做一个自己网站的步骤用模板快速建站
  • 做网站界面需要注意什么江小白网络营销案例
  • win7 iis建立网站百度站长工具网站
  • 利用jsp做网站安卓手机优化大师官方下载
  • 做网站开发学什么软件最近发生的重大新闻事件