STM32ADC使用心得分享

RTThread物联网操作系统 2024-01-29 19:18

作者:螺丝松掉的人

最近对 stm32 的 adc 使用的比较多,也稍微有一点深入,之前都是简单使用,没有过多研究,发现还是有很多很意思的地方,并且一些功能在网上的介绍和使用也是比较少的,就想分享一下自己摸索的过程和思考,有些功能可能我用的也不太对或者有更好的用法,欢迎大家交流

基本功能


我们通过 adc 可以直接读取到电压的大小,通过对读取到的电压进行转换可以获取到电流、温度等模拟信号的数字转换结果。在 stm32 中通常具备 3 个 adc ,每个 adc 又具备十多个通道,每个通道可以对应引脚采集数据(部分通道仅用于采集内部数据,没有引出外部引脚),其中规则通道最多有16路,注入通道最多有4路。有的 adc 之间还可以配置为主从模式,进行交叉采样等更复杂高级的操作,一般电机控制时用的比较多。但是需要注意的是,对于 adc 中的多个通道,一般是不能直接指定通道进行读取的,除非将通道使能为注入模式(稍后介绍)。之前我一般 adc 只会用到 1 个通道,是否指定其实都只能读到那一个通道,所以并没有注意到这个地方。但要写设备驱动就必须要做好通用性,为用户屏蔽好这些比较绕的问题。

规则模式


规则模式(Regular)就是一般的普通模式,也是使用的比较多的。一般可以设置三个寄存器序列,可以根据自己的需要将多个规则通道划分到指定序列中的指定位置,开启 adc 序列转换后,就会开始按顺序对序列中的通道进行扫描转换。单数需要注意的是,每个 adc 只有一个规则数据寄存器,只够存储一个通道的数据,数据是会被覆盖的。也就是说在每个通道的数据读取完成以后,我们需要及时取出,并按顺序进行区分。可以用一个数组去存取转换的数据,之前设定的序列,也就知道的指定通道对应的数据。

一般还可以采用结合 DMA 的方式,在读取到数据后,将数据按顺序进行逐个装填,我们也能得到指定通道顺序的数据。

注入模式


注入模式有点像中断,可以选择多种触发源,也可以用户软件触发,可以直接打断正在进行的规则通道转换。最多可以使能 4 个通道作为注入通道,并且每个通道都具备自己的数据寄存器,不会存在数据覆盖的问题。对于 DMA 资源紧张,不想引入阻塞,不便于维护转换序列时,可以选择采用该模式。

交叉模式


交叉模式需要将两个adc配置为主从关系进行,一般是 ADC1/2,具体可参考官方手册。

注意事项


  • 规则通道数据寄存器只有一个,会存在数据覆盖问题,需要做好数据维护对应工作;

  • 通道使能为注入模式后无法使用连续转换模式;

  • 每个ADC只能使用4个注入模式通道,需要主要资源分配;

  • ADC的数据寄存器不会存在读取到脏数据的情况;


设备驱动对比


接下来分析对比一下主流RTOS的adc设备驱动都是怎么写的,是如何为用户屏蔽好这些比较绕的底层细节的。

RT-Thread

adc初始化设置如下,关闭连续采样模式:

 1
2
3#define ADC1_CONFIG                                                \
4

5    {                                                              \
6
7       .Instance                   = ADC1,                         \
8
9       .Init.DataAlign             = ADC_DATAALIGN_RIGHT,          \
10
11       .Init.ScanConvMode          = ADC_SCAN_DISABLE,             \
12
13       .Init.ContinuousConvMode    = DISABLE,                      \
14
15       .Init.NbrOfConversion       = 1,                            \
16
17       .Init.DiscontinuousConvMode = DISABLE,                      \
18
19       .Init.NbrOfDiscConversion   = 1,                            \
20
21       .Init.ExternalTrigConv      = ADC_SOFTWARE_START,           \
22
23    }
24
25#endif /* ADC1_CONFIG */

均设置为规则通道,并放到同一个序列中:

1ADC_ChanConf.Rank = ADC_REGULAR_RANK_1;

读取函数:(入参有 channel,但并没有用)

 1static rt_err_t stm32_adc_get_value(struct rt_adc_device *device, rt_int8_t channel, rt_uint32_t *value)
2
{
3    ADC_HandleTypeDef *stm32_adc_handler;
4    RT_ASSERT(device != RT_NULL);
5    RT_ASSERT(value != RT_NULL);
6    stm32_adc_handler = device->parent.user_data;
7    /* Wait for the ADC to convert */
8    HAL_ADC_PollForConversion(stm32_adc_handler, 100);
9    /* get ADC value */
10    *value = (rt_uint32_t)HAL_ADC_GetValue(stm32_adc_handler);
11    return RT_EOK;
12}

去adc设备设备驱动看看怎么维护的:

 1static rt_ssize_t _adc_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
2{
3    rt_err_t result = RT_EOK;
4    rt_size_t i;
5    struct rt_adc_device *adc = (struct rt_adc_device *)dev;
6    rt_uint32_t *value = (rt_uint32_t *)buffer;
7    for (i = 0; i < size; i += sizeof(int))
8    {
9        result = adc->ops->convert(adc, pos + i, value);
10        if (result != RT_EOK)
11        {
12            return 0;
13        }
14        value++;
15    }
16    return i;
17}

可以看出来就是我们说的第一种方法,所有通道为规则模式,同一转换序列,逐个读取并对按序存储到数组中。

Refer

  • STM32H723/733, STM32H725/735 and STM32H730 Value line advanced Arm®-based 32-bit MCUs - Reference manual

  • 野火]STM32库开发实战指南——基于野火指南者开发板 文档 (embedfire.com)


————————————————

版权声明:本文为RT-Thread论坛用户「螺丝松掉的人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://club.rt-thread.org/ask/article/3c37ce454d8fecc4.html

———————End——————



👇 点击阅读原文进入官网

RTThread物联网操作系统 帮助您了解RT-Thread相关的资讯.
评论 (0)
  • 近年来,越来越多的企业在5S管理的基础上,开始追求6S、7S甚至8S管理,仿佛S越多,管理就越先进,企业就越优秀。于是,6S增加了“安全”,7S又加上了“节约”,8S甚至引入了“学习”……看似更加全面,实则很多企业只是机械地增加S,却忽略了管理的核心目标:提升效率、降低浪费、优化工作环境。优思学院认为,5S本身已经是一套成熟的精益管理工具,它的核心理念不仅简单高效,而且易于实施和推广。如果企业只是为了赶时髦,盲目增加S,而没有真正理解5S的本质,那么这些额外的“S”很可能会变成管理上的负担,而不
    优思学院 2025-03-07 12:43 205浏览
  • 在企业管理和职场环境中,权力是一个常被提及却又让人感到微妙的话题。有人觉得它充满吸引力,有人却对它避之不及。然而,不管你对权力的态度如何,理解它、掌握它,甚至善用它,都是职场成功的重要一环。今天,我们就来深入探讨权力的本质,特别是个人权力和社会权力的区别,以及如何在职场中逐步建立属于自己的影响力。权力的两种面貌:你掌控自己,还是掌控他人?说到权力,首先要区分它的两种类型。个人权力是你对自己生活的掌控感。比如,你能自由决定自己的职业方向,不用总是请示他人。这种权力让人感到踏实和满足,是我们在生活中
    优思学院 2025-03-07 15:56 209浏览
  • ​CS6212是一款可分别用于USB Type-C主机/显示端口源应用的带重定时的有源开关。这设备符合USB 3.2标准版本1.0和USB Type-C标准上的VESA DisplayPort Alt模式 1.0版,支持通过GPIO或12C进行灵活的模式切换。此设备支持USB 3.2第2x1代 运行速度高达10Gbps,DisplayPort 1.4运行速度高达HBR3 8.1Gbps。CS6212管脚分布及功能定义:CS6212支持重定时器训练,并支持USB 3.2标准中定义的状态状态机(RT
    QQ1540182856 2025-03-07 10:09 162浏览
  • 服务器应用环境与客户需求PCIe 5.0高速接口技术的成熟驱动着生成式AI与高效能运算等相关应用蓬勃发展。在随着企业对服务器性能的要求日益严苛,服务器更新换代的周期也持续加快。在此背景下,白牌与DIY(Do It Yourself)服务器市场迎来了新的发展契机,但同时也面临着更趋复杂的技术挑战。传统上,白牌与DIY服务器以其高度客制化与成本效益优势受到市场青睐。然而,随着PCIe 5.0等高速技术的导入,服务器系统的复杂度大幅提升,对组装技术与组件兼容性也就提出更高的要求。举个简单的例子来说,P
    百佳泰测试实验室 2025-03-06 17:00 165浏览
  • 一、系统概述MYD-LD25X搭载的Debian系统包含以太网、WIFI/BT、USB、RS485、RS232、CAN、AUDIO、HDMI显示和摄像头等功能,同时也集成了XFCE轻量化桌面、VNC远程操控、SWITCH网络交换和TSN时间敏感网络功能,为工业设备赋予“超强算力+实时响应+极简运维”的体验!类别名称描述源码TF-AArm Trusted Firmware 2.8OP-TEEOP-TEE 3.19BootloaderU-boot 2022.10KernelLinux Ke
    米尔电子嵌入式 2025-03-07 14:08 241浏览
  • 多人同时共享相同无线网络,以下场景是否是您熟悉的日常?姐姐:「妈~我在房间在线上课,影音一直断断续续的怎么上课啊!」奶奶:「媳妇啊~我在在线追剧,影片一直卡卡的,实在让人生气!」除此之外,同时间有老公在跟客户开在线会议,还有弟弟在玩在线游戏,而妈妈自己其实也在客厅追剧,同时间加总起来,共有五个人同时使用这个网络!我们不论是在家里、咖啡厅、餐厅、商场或是公司,都会面临到周遭充斥着非常多的无线路由器(AP),若同时间每位使用者透过手机、平板或是笔电连接到相同的一个网络,可想而知网络上的壅塞及相互干扰
    百佳泰测试实验室 2025-03-06 16:50 162浏览
  • 深圳触觉智能RK3506开发板现已上市,开启预售!搭载瑞芯微RK3506B/J超低功耗工业处理器(1.5GHz三核A7+M0,主频1.5GHz);支持1280×1280显示、双百兆网口、星闪无线三模,板载高达2路CAN FD与5路串口。RK3506适用场景简介工业控制‌:RK3506适用于工业控制、工业通信、人机交互等应用场景。其多核异构架构(3xCortex-A7+Cortex-M0)和外设接口丰富,支持Buildroot、Yocto系统,适合轻量级HMI应用‌。‌工业通信‌:RK3506均支
    Industio_触觉智能 2025-03-07 10:04 136浏览
  • ASL6328芯片支持高达 6.0 Gbps 运行速率的交流和直流耦合输入T-MDS 信号,具备可编程均衡和抖动清理功能。ASL6328 是一款单端口 HDMI/DVI 电平转换 / 中继器,具有重新定时功能。它包含 TypeC双模式 DP 线缆适配器寄存器,可用于识别线缆适配器的性能。抖动清理 PLL(锁相环)能够消除输入抖动,并完全重置系统抖动容限,因此能更好地满足更高数据速率下 HDMI 抖动合规性要求。设备的运行和配置可通过引脚设置或 I2C 总线实现。自动断电和静噪功能提供了灵活的电
    QQ1540182856 2025-03-06 14:26 134浏览
  • 深圳触觉智能SOM3506核心板现已上市,搭载瑞芯微RK3506B/J超低功耗处理器(1.5GHz三核A7+M0),低功耗满载仅0.7W,支持40℃~85℃工作环境,即日起宽温级59元/工业级68元,特价开售!芯片介绍RK3506是瑞芯微Rockchip在2024年第四季度全新推出的Arm嵌入式芯片平台,三核Cortex-A7+单核Cortex-M0多核异构设计,CPU频率达1.5Ghz, M0 MCU为200Mhz。RK3506适用场景简介工业控制‌:RK3506适用于工业控制、工业通信、人机
    Industio_触觉智能 2025-03-07 10:03 159浏览
  • 在六西格玛项目中,团队的选择往往决定了最终的成败。合适的团队成员不仅能推动项目顺利进行,更能确保最终成果符合预期。因此,组建六西格玛团队时,必须挑选最合适的人才,确保他们具备必要的能力和特质。团队主管的关键特质每个精益六西格玛项目都需要一位主管来带领团队。他们不仅需要具备领导力,还要能够分析数据、制定策略,并与管理层和团队成员高效沟通。团队主管的核心职责包括:领导团队行动:能够激励成员,确保团队朝着既定目标前进。数据分析能力:精通数据处理和分析,能基于数据做出决策。沟通协调:能够在管理层和团队之
    优思学院 2025-03-06 12:51 132浏览
  • Sub-GHz,即工作频段低于1GHz的无线通信技术,常见频段有315MHz、433MHz、868MHz与915MHz等。其可借助无线电波在自由空间传播的特性,把数据调制到射频载波上进行传输,达成物联网设备间的无线通信,是物联网设备实现高效、稳定、无缝交互的“通信基石”。典型射频信号(无线电波)收发电路简示在工业自动化、智慧城市、智慧农业与智能家居等物联网领域中,LoRa、Wi-SUN、Z-Wave、Sigfox等工业级通信协议大多运行在Sub-GHz频段。而正是通过Sub-GHz射频技术,传感
    华普微HOPERF 2025-03-07 11:39 159浏览
  • 文/Leon编辑/cc孙聪颖2025年全国两会进行时,作为“十四五”规划收官之年,本届两会释放出坚定目标、稳中求进、以进促稳等信号。其中,企业家们的建议备受关注,关系到民营经济在2025年的走向。作为国内科技制造业的“老兵”,全国人大代表、TCL集团创始人及董事长李东生在本届两会中提出三份代表建议,包括《关于优化中国科技制造业融资环境的建议》、《关于加强AI深度伪造欺诈管理的建议》和《关于降低灵活就业人员社会保险参保门槛的建议》,表现出对科技制造、AI发展和劳动者保障方面的关注。会后,李东生接受
    华尔街科技眼 2025-03-06 19:41 143浏览
  •        深夜的公园里,当路灯熄灭后,传统监控摄像头只能拍出模糊的黑白画面,仿佛老式胶片电影里的场景。而搭载为旌瑶光ISP的摄像头,却能像猫科动物一样,在几乎全黑的环境中捕捉到行人衣服的颜色、树叶的纹理,甚至快速跑动的宠物狗毛发细节。这种从“黑白默片”到“全彩4K电影”的跨越,背后是为旌瑶光ISP对传统红外补光技术的颠覆性创新。一、传统方案之困:被红外光“绑架”的夜视世界        传统安防摄像头依赖红外
    中科领创 2025-03-07 16:50 319浏览
  • 随着自动驾驶技术的迅猛发展,构建高保真、动态的仿真场景成为了行业的迫切需求。传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战。在此背景下,3D高斯点阵渲染(3DGS)技术应运而生,成为自动驾驶仿真场景重建的关键突破。一、3DGS技术概述与原理1、3DGS的技术概述3DGS是一种基于3D高斯分布的三维场景表示方法。通过将场景中的对象转化为多个3D高斯点,每个点包含位置、协方差矩阵和不透明度等信息,3DGS能够精确地表达复杂场景的几何形状和光照特性。与传统的神经辐射场(NeRF)方法相比,
    康谋 2025-03-06 13:17 320浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦