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

嵌入式学习笔记 - HAL_ADC_ConfigChannel函数解析

贴函数原型:

一 首先配置规则通道序列

其实所有的配置函数都是在对寄存器进行操作,要想看懂Hal库底层函数驱动就先把寄存器如何配置看懂,以下是配置规则通道寄存器的介绍,以ADC_SQR3为例,也就是通道序列1到序列6,可以看出每5位代表一个通道号,依次排列,

再看函数是怎么操作的来实现对这些寄存器位进行填充,如下图:

其中MODIFY_REG(REG, CLEARMASK, SETMASK)的作用是先对寄存器REG中CLEARMASK代表的所有位清零,再用SETMASK对SETMASK代表的位置1,如下图所示,这也是对寄存器某几个位赋值的常用方式,先与非掩码清零相应位,再或上实际设定值。

再看 ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank)的作用,如下图

也就是ADC_SQR3_SQ1 左移(ADC_SQR3_SQ2_Pos * ((_RANKNB_) - 1)) 位,也就是左移ADC_SQR3_SQ2_Pos *(sConfig->Rank-1)位

其中ADC_SQR3_SQ1 最终结果为0x0000001F,也就是每个通道所占寄存器的掩码值

其中ADC_SQR3_SQ2_Pos,HAL库定义为 #define ADC_SQR3_SQ2_Pos   =  (5U)     ,也就是每个通道所占寄存器位数5位,所以最终ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank)的作用也就是 ADC_SQR3_SQ1左移ADC_SQR3_SQ2_Pos *(sConfig->Rank-1)位,也就是如果是配置第sConfig->Rank=6个序列就左移5*(6-1)=25位,就是得出相应序列的寄存器位的掩码,例如第6个序列寄存器位的掩码就是0x3E000000。

最后看ADC_SQR3_RK(sConfig->Channel, sConfig->Rank) ),与上面同一个函数同样的的道理就是sConfig->Channel左移ADC_SQR3_SQ2_Pos *(sConfig->Rank-1)位,sConfig->Channel为实际通道值如通道0x01,那么sConfig->Channel=0x01,也就是如果是配置第sConfig->Rank=6个序列就左移5*(6-1)=25位,就是将0x01左移25位,最终就是得出相应序列寄存器位的实际数值,

就是0x02000000。

最终再来看MODIFY_REG(),就是先与非掩码值,将相应序列的寄存器位置清零,再或上通道实际数值,将相应序列的寄存器位赋值为通道数,其实最终结果就是将通道数赋值给相应的序列寄存器位

从中也可以看出ADC的通道是一个通道一个通道进行配置的,如果有多个通道就需要多次配置,如下是一个通道的配置过程。

二 其次配置采样时间给相应的通道

函数如下,同样可以按照上述方式进行分析,对寄存器赋值的方式是一样的

三 如果通道16或者17被选择,置位CR2寄存器23位

只不过需要注意,HAl库对寄存器位的表示方式,以通道数为例,通道数是5位的,那么hal库就是一位一位的按照bit位表示以及赋值的,

http://www.xdnf.cn/news/423739.html

相关文章:

  • 2025-05-13 Unity 网络基础12——大小端模式
  • centos中JDK_PATH 如何设置
  • 从 Vue3 回望 Vue2:事件总线的前世今生
  • Oracles数据库通过存储过程调用飞书接口推送群组消息
  • FPGA:XILINX FPGA产品线以及器件选型建议
  • MySQL 8.0 OCP(1Z0-908)英文题库(31-40)
  • 【认知思维】过度自信效应:高估自我能力的认知偏差
  • 【神经网络与深度学习】局部最小值和全局最小值
  • win10 局域网内聊天
  • Mac M系列 安装 jadx-gui
  • MySQL数据库故障排查指南
  • 【2025最新】Pycharm里如何运行多个py文件
  • linux 抓包工具tcpdump使用小记(使用时注意权限和系统资源)
  • log.js:5 [vxe table v4.12.5] 缺少 “vxe-tooltip“ 组件,请检查是否正确安装。
  • 网络状态可以通过hutool.HttpStatus获取
  • Data.olllo:一个可以打开 100GB CSV 文件的桌面工具
  • 【HBase整合Hive】HBase-1.4.8整合Hive-2.3.3过程
  • 前端取经路——前端安全:构建坚不可摧的Web应用防线
  • 如何在设计阶段考虑 Python 服务的可伸缩性,避免后期的重构
  • element-ui 源码调用接口跨域问题
  • web-ui开源程序是建立在浏览器使用的基础上,旨在使 AI 代理可以访问网站
  • plus-uiRuoYi-Vue-Plus 基于pgSql本地运行实践
  • 19.Excel数据透视表:第2部分数据透视计算
  • HTML、CSS 和 JavaScript 基础知识点
  • 【Bug】多文件上传只有最后一个loading会关闭
  • C 语言_基础语法全解析_深度细化版
  • 2025年项目管理软件革命:AI与空间计算如何重塑企业协作格局
  • golang 定时器
  • C语言| extern的用法作用
  • maven工程跳过@SpringTest