Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AB32VG1
RT-Thread Studio
AB32VG1测评【ADC外设】
发布于 2021-03-18 00:19:16 浏览:1142
订阅该版
[tocm] ### **1.RT-Thread Studio工程创建** 首先打开Rtt studio创建AB32VG1开发板的工程,如图1.1所示 ![109657019f0b9c51a2b416493cc2ca1.png](https://oss-club.rt-thread.org/uploads/20210317/66d67811307d1564d7031eb097be723b.png) 由于这款“骁龙”开发板已经内置RTTHREAD所以在创建工程的时候可以直接点击基于开发板创建,如图1.2所示 ![20cc804956e2871641691fdea7b0a1b.png](https://oss-club.rt-thread.org/uploads/20210317/a01c5298512ff3d2949c0fcc83dd842d.png) 由此已经创建好基于这款AB32VG1芯片开发板的基础工程,点击编译看看是否有没有配置的选项导致编译失败。 ### **2.添加官方ADC驱动** 在建立好基础工程并且编译完成无错后,下一步骤先添加官方ADC驱动,第一步打开软件包中心,点击更多配置找到使用ADC设备驱动程序选项点击添加,如图2.1所示 ![28b29c5a52f7dbc7d63cc1744d64f2e.png](https://oss-club.rt-thread.org/uploads/20210317/b922ef2709f449594c034933eb72bbb2.png) 然后点击保存,由此官方ADC驱动添加完成。 ### 3.**编写AB32VG1 ADC底层代码** 由于这款开发板并没有官方人员提供ADC的底层驱动,想要实现ADC采集测试需要自行编写ADC底层驱动,第一步在图3.1所示文件位置新建ab32vg1_hal_adc.h drv_adc.c adc_config.h文件 ![5aa216059c47b6d273da4395ec9aeb2.png](https://oss-club.rt-thread.org/uploads/20210317/fecbca54b7833729c3d230c81a620e04.png) 如代码3.1所示,在adc_config.h文件添加如下代码 ``` #ifndef LIBRARIES_HAL_DRIVERS_CONFIG_ADC_CONFIG_H_ #define LIBRARIES_HAL_DRIVERS_CONFIG_ADC_CONFIG_H_ #include
#ifdef __cplusplus extern "C" { #endif #ifdef BSP_USING_ADC9 #ifndef ADC9_CONFIG #define ADC9_CONFIG \ { \ .adc_dat_handle = (hal_sfr_t)&SADCDAT9, \ .name = "adc9", \ } #endif /* ADC9_CONFIG */ #endif /* BSP_USING_ADC9 */ #ifdef __cplusplus } #endif #endif /* LIBRARIES_HAL_DRIVERS_CONFIG_ADC_CONFIG_H_ */ ``` 如代码3.2所示,在drv_adc.c文件中添加如下代码 ``` #include "drv_gpio.h" #ifdef BSP_USING_ADC9 #include "adc_config.h" #define LOG_TAG "drv.adc" #include
struct ab32_adc { struct rt_adc_device ab32_adc_device; hal_sfr_t adc_dat_handle; char *name; }; enum { #ifdef BSP_USING_ADC9 ADC9_INDEX, #endif ADC_INDEX_END }; static struct ab32_adc ab32_adc_obj[] = { #ifdef BSP_USING_ADC9 ADC9_CONFIG, #endif }; static rt_err_t ab32_adc_enabled(struct rt_adc_device *device, rt_uint32_t channel, rt_bool_t enabled) { RT_ASSERT(device != RT_NULL); hal_adc_enable(enabled); return RT_EOK; } static rt_err_t ab32_get_adc_value(struct rt_adc_device *device, rt_uint32_t channel, rt_uint32_t *value) { hal_sfr_t ab32_adc_handler; RT_ASSERT(device != RT_NULL); RT_ASSERT(value != RT_NULL); ab32_adc_handler = device->parent.user_data; hal_adc_start((1u << 9)); *value = ab32_adc_handler[channel]; return RT_EOK; } static const struct rt_adc_ops _adc_ops = { .enabled = ab32_adc_enabled, .convert = ab32_get_adc_value, }; static int ab32_adc_init(void) { int result = RT_EOK; int i = 0; if (ADC_INDEX_END == 0) { return result; } for (i = 0; i < sizeof(ab32_adc_obj) / sizeof(ab32_adc_obj[0]); i++) { if (rt_hw_adc_register(&ab32_adc_obj[i].ab32_adc_device, ab32_adc_obj[i].name, &_adc_ops, (const void *)ab32_adc_obj[i].adc_dat_handle) == RT_EOK){ LOG_D("%s init success", ab32_adc_obj[i].name); } else{ LOG_E("%s register failed", ab32_adc_obj[i].name); result = -RT_ERROR; } } return result; } INIT_BOARD_EXPORT(ab32_adc_init); #endif ``` 如代码3.3所示,在ab32vg1_hal_conf.h中开启使用adc ``` #define HAL_ADC_MODULE_ENABLED #ifdef HAL_ADC_MODULE_ENABLED #include "ab32vg1_hal_adc.h" #endif ``` 最后由代码3.4所示,在rtconfig.h中添加如下代码启用通道adc9 ``` #define BSP_USING_ADC #define BSP_USING_ADC9 ``` ### 4.实现ADC应用 由此我们添加完成了ADC的所以驱动,下一步骤编写上层ADC应用,在application文件新建一个.c文件,并在里面添加如下代码,代码由4.1所示 ``` #include
#include
#define ADC_DEV_NAME "adc9" /* ADC 设备名称 */ #define ADC_DEV_CHANNEL 9 /* 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_adc_device_t adc_dev; rt_uint32_t value, vol; rt_err_t ret = RT_EOK; /* 查找设备 */ 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; } /* 使能设备 */ ret = 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); /* 关闭通道 */ ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL); return ret; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample); ``` 当然由于官方人员并没有提供完整的ADC寄存器定义,并且RTTHREAD STUDIO中添加的工程文件也缺乏ADC相关的寄存器定义,导致底层的定义代码编写无法展开,亦由于本人技术有限,在有效文件信息下缺乏驱动开发的思路,所以如果由官方人员看到此文章望尽快完善ADC相关文件。 ## 5.Finsh控制台控制ADC设备 在前面的步骤下,基本上完成了ADC驱动的开发,打开官方提供的downloader软件,并连接相应串口,效果如图5.1所示 ![3ab6529e7ef9fef2bcba8cc96bfdecf.png](https://oss-club.rt-thread.org/uploads/20210318/dfe61f489377446fd8fd83e527510453.png) 下一步骤在控制台输入list_device命令查看adc设备是否添加成功,如图5.2所示 ![498d9107fedd69d1027479061ae8598.png](https://oss-club.rt-thread.org/uploads/20210318/f9f98c924bceb750417b6e796dd53df1.png) 最后,在控制台输入 adc_vol_sample命令启用代码4.1来运行ADC,效果如图5.2所示 ![2b35e908968e1144c0329233d8a5142.png](https://oss-club.rt-thread.org/uploads/20210318/6723c44b52b8c7def7ba01c354741639.png) 这里可以明显的看到,显示的电压和AD值均为0,因为底层的驱动没有添加,导致实际物理设备没有采集ADC的功能。 ## 6.总结 至此,我的测评应该算告一段落,在实现ADC功能之前我体验了此款开发板的其他功能,感觉这个芯片功能非常强大,但是ADC功能并没有真正的实现,这在我心里始终是一个结,所以我会继续关注此芯片的相关信息,并认真的去学习这款芯片的具体操作,希望在我以后的工作中能用上这款功能强大的芯片。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
CPU_X_2048
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
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
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部