Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ADC
cubemx
STM32
手把手教你基于RT-Thread Studio 使用STM32单片机的ADC外设
发布于 2022-03-15 22:51:31 浏览:3935
订阅该版
[tocm] #一、工程建立 工程建立和时钟配置这里不再赘述,可以看上一篇文章,在PWM中详细的介绍了工程建立的每一步,时钟配置已经做了详细的步骤,各位客官链接如下: [手把手教你基于RT-Thread Studio 使用STM32单片机的PWM外设](https://club.rt-thread.org/ask/article/3464.html) [本篇文章代码Gitee链接奉上](https://gitee.com/lele_0101/rt-thread-adc---demo) # 二、驱动配置 ## 1. 打开ADC驱动 我们直入主题,更改好时钟后,打开RT-Thread Studio的 RT-Thread Settings,使能ADC设备。 ![image.png](https://oss-club.rt-thread.org/uploads/20220315/63cf3581c8d925c7043759e16aa2e4c3.png.webp) 进入组件-设备驱动程序-使用ADC设备驱动程序 ![image.png](https://oss-club.rt-thread.org/uploads/20220315/c2eeadfe51932dcd20ca8f71da7b2eda.png.webp) 最后进入board.h中,取消掉ADC1的注释。 ![image.png](https://oss-club.rt-thread.org/uploads/20220315/65db19bf1392491e44c9661e8a0579ba.png.webp) ## 2. Cubemx配置 STM32最方便的工具就是cubemx了,我们打开cubemx配置管脚的ADC功能。 我使用的引脚是PA0,将其设置为ADC1的通道5。 ![image.png](https://oss-club.rt-thread.org/uploads/20220315/efb91fdd9069f1464011c948f7b337cd.png.webp) 然后点击左边的Analong-ADC1 将通道5设置为Single-ended,默认是12位ADC,如果需要配置其他ADC参数可下拉配置。 ![image.png](https://oss-club.rt-thread.org/uploads/20220315/c80646a6af63c1f0a455d1d9788d8c87.png.webp) 然后点击左上角文件,保存工程后点击右上角获取代码。 ## 3. 修改驱动 打开 cubemx下的Src文件,打开stm32l4xx_hal_msp.c,找到下面这两个函数将其剪贴到board.c最下方。 ``` void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) ``` 到这里驱动就已经修改完成了,可以建立用户代码了。 # 三、构建代码 ## 1. 新建.c文件 可以直接在applictation 文件目录右键新建一个源文件,可以随便命名,但是一定要加后缀.c ![image.png](https://oss-club.rt-thread.org/uploads/20220315/65dac74852a663a8d6ab230ed527428c.png) ## 2. 导入我们头文件 ``` #include
#include
``` ## 3. 定义ADC句柄,ADC设备名,通道、参考电压,位数 ``` rt_adc_device_t adc_dev; #define ADC_DEV_NAME "adc1" /* ADC 设 备 名 称 */ #define ADC_DEV_CHANNEL 6 /* ADC 通 道 */ #define REFER_VOLTAGE 330 /* 参 考 电 压 3.3V,数 据 精 度 乘 以100保 留2位 小 数 */ #define CONVERT_BITS (1 << 12) /* 转 换 位 数 为12位 */ ``` ## 4. 编写设备代码 首先我们需要使用 这个API来查找设备获取设备句柄, ``` rt_device_t rt_device_find(const char* name); ``` 其次使能设备 ``` rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel); ``` 再然后读取ADC结果 ``` rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel); ``` ## 4. 这里放上这个.c文件的完整代码 ``` /* * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2022-03-14 desktop the first version */ #include
#include
rt_adc_device_t adc_dev; #define ADC_DEV_NAME "adc1" /* ADC 设 备 名 称 */ #define ADC_DEV_CHANNEL 6 /* ADC 通 道 */ #define REFER_VOLTAGE 330 /* 参 考 电 压 3.3V,数 据 精 度 乘 以100保 留2位 小 数 */ #define CONVERT_BITS (1 << 12) /* 转 换 位 数 为12位 */ static int adc_vol_sample(int argc, char *argv[]) { rt_uint32_t value, vol; /* 查 找 设 备 */ adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); if (adc_dev == RT_NULL) { rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME); return RT_ERROR; } /* 使 能 设 备 */ rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); /* 读 取 采 样 值 */ value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); rt_kprintf("the value is :%d \n", value); /* 转 换 为 对 应 电 压 值 */ vol = value * REFER_VOLTAGE / CONVERT_BITS; rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100); return RT_EOK; } /* 导 出 到 msh 命 令 列 表 中 */ MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample); ``` # 四、 使用方法 使用方法特别简单,我将这个函数导入了命令行中,可以输入adc_vol_sample这个关键词调用,可以直接输出其ADC电压。 ![image.png](https://oss-club.rt-thread.org/uploads/20220315/c68e08178e5005e69762784042e4feb7.png.webp)
4
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
乐乐爱学习
这家伙很懒,什么也没写!
文章
8
回答
3
被采纳
0
关注TA
发私信
相关文章
1
请大神帮忙看下风格 还是哪里有问题 照着串口驱动写的ADC驱动
2
ADC config
3
rt_thread_delay()和ADC采样之间的冲突
4
请教在官方BSP中的STM32F40X程序中加入ADC,串口没输出。
5
给RT-Thread添加ADC驱动框架
6
求助:ADC采样被干扰
7
【内核和外设学习营】十里 ADC光敏电阻电压采集实验
8
<内核学习营>+坦然+探索者stm32f407板子的ADC测试光传感器实验
9
【内核学习营】+青春+ADC读取光敏传感器实验
10
《内核学习营》+水一方+项目中应用的ADC实现电压采集
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部