【GD32F427开发板试用】4. ADC采集摇杆模块移动量

news2024/12/28 4:12:41

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:hehung

之前发帖

【GD32F427开发板试用】1. 串口实现scanf输入控制LED
【GD32F427开发板试用】2. RT-Thread标准版移植
【GD32F427开发板试用】3. 硬件IIC0驱动OLED显示中文

前言

本文实现了使用GD32FF427V-START板子的ADC功能读取摇杆模块的XY坐标移动数值。
本文实现功能如下:

  1. 基于RT-Thread OS;
  2. 驱动ADC读取模拟电压;
  3. 采集摇杆模块的XY坐标的移动位置数值。

资料查询

通过查看芯片数据手册可以知道PA1分别连接到了ADC0的Channel1与Channel2,基于此信息,我们使用PA1与PA2来作为摇杆模块的X坐标与Y坐标的移动量,如下为数据手册信息。

软件编写

知道了硬件连接,我们就可以开始写软件了,此部分不做过多说明,详见源码,GD官方也提供了丰富的参考源码。

ADC初始化

  1. 初始化时钟以及分频;
  2. 初始化PA1作为模拟端口;
  3. 初始化ADC0,配置为软件触发采集。
    void Adc_Init(void) { /* enable GPIOC clock / rcu_periph_clock_enable(RCU_GPIOA); / enable ADC clock / rcu_periph_clock_enable(RCU_ADC0);; / config ADC clock / adc_clock_config(ADC_ADCCK_PCLK2_DIV8); / config the GPIO as analog mode / gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_1 | GPIO_PIN_2); / ADC data alignment config / adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); / ADC channel length config / adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1U); / ADC trigger config / adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_EXTI_11); / ADC external trigger config / adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE); / enable ADC interface / adc_enable(ADC0); rt_thread_mdelay(1U); / ADC calibration and reset calibration */ adc_calibration_enable(ADC0); }

ADC采集函数

我们使用软件触发采集,代码如下:

uint16_t Adc_ChSample(uint8_t channel)
{
    /* ADC regular channel config */
    adc_regular_channel_config(ADC0, 0U, channel, ADC_SAMPLETIME_480);
    /* ADC software trigger enable */
    adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

    /* wait the end of conversion flag */
    while(!adc_flag_get(ADC0, ADC_FLAG_EOC));
    /* clear the end of conversion flag */
    adc_flag_clear(ADC0, ADC_FLAG_EOC);
    /* return regular channel sample value */
    return (adc_regular_data_read(ADC0));
}

主函数

主函数初始化ADC,IIC,OLED;
while循环中没100ms采集一次ADC数据,代码如下:

int main(void)
{
    char adc_str[16];

    /* Initialize the ADC */
    Adc_Init();
    /* Configure the I2C GPIO ports */
    i2c_gpio_config();
    /* Configure I2C */
    i2c_config();
    /* Configure OLED */
    OLED_Init();

    OLED_ShowString(0, 0, (const uint8_t*)"GD32F427V-START", 16, 1);
    OLED_ShowHzStringRow(0, 16, (const char*)"极术社区", 1);
    OLED_ShowString(64, 16, (const uint8_t*)"|hehung", 16, 1);
    OLED_Refresh_Gram();

    while (1)
    {
        sprintf(adc_str, "ADC-X:%03d", (int)(Adc_ChSample(ADC_CHANNEL_1)/4096.0*100.0));
        OLED_ShowString(0, 32, (const char*)adc_str, 16, 1);
        sprintf(adc_str, "ADC-Y:%03d", (int)(Adc_ChSample(ADC_CHANNEL_2)/4096.0*100.0));
        OLED_ShowString(0, 48, (const char*)adc_str, 16, 1);
        OLED_Refresh_Gram();
        rt_thread_mdelay(100);
    }

    return RT_EOK;
}

显示效果

见下面的图片,移动摇杆,ADC0的Channel0与Channel1可以采集到X与Y坐标的数值,50表示正中间的位置。0表示最小位置,99表示最大位置。

详细效果见视频:

【GD32F427开发板试用】4. ADC采集摇杆模块移动量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue利用provide和inject做套娃组件设计

provide和inject原来用的不多,只是见人引用axios的时候在main.js里使用provide来注入 app.provide(axios, axios) 这样,在所有的vue文件里都可以使用inject来获取这个注入的axios const axios inject("axios"); 这种利用provide和inject做…

(考研湖科大教书匠计算机网络)第一章概述-第五节3:计算机网络体系结构之相关专业术语

文章目录一:实体二:协议三:服务四:协议数据单元本节对应视频 【计算机网络微课堂(有字幕无背景音乐版)】:1.6 计算机网络体系结构(4)—专用术语 注意:本节内容…

2023MyBatis精选面试题2(8道)

一. MyBatis的框架架构设计是怎么样的这张图从上往下看。MyBatis的初始化,会从mybatis-config.xml配置文件,解析构造成Configuration这个类,就是图中的红框。1. 加载配置:配置来源于两个地方,一处是配置文件&#xff0…

【阅读笔记】《重构》 第一二章

第一章 重构,第一个案例 编译器不会在乎代码好不好看,都是正常运行的。但人在乎,差劲的系统很难修改,因为很难找到修改点,导致程序员很有可能犯错,从而引入bug 重构的第一步 得为即将修改的代码建立一组…

自动化测试Selenium【基础篇一】

自动化测试Selenium【基础篇一】🍎一.什么是自动化测试🍒1.1 自动化测试介绍🍒1.2 单元测试🍒1.3 接口自动化🍒1.4 UI自动化🍒1.5 为什么选择selenium作为我们的web自动化工具?🍒1.6什么是驱动…

DaVinci:限定器 - RGB

调色页面:限定器Color:Qualifier限定器 - RGB Qualifier - RGB根据像素的三原色通道(红、绿、蓝)的值来选择画面上的对应区域,从而限制节点调色的范围。限定器 - RGB 根据指定的各个原色通道的色阶范围来选择连续的近似…

Java 对象处理流(ObjectOutputStream\ObjectInputStream)

文章目录前言什么是对象流?基本介绍ObjectOutputStreamObjectInputStream对象处理流的使用细节前言 处理流:是对一个已存在的流进行处理和封装,通过所封装的流的功能调用实现对数据的操作。而处理流中也有不同的分类,此片介绍的是…

C规范编辑笔记(十一)

往期文章: C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) C规范编辑笔记(六) C规范编辑笔记(七) C规范编辑笔记(八) C规范编辑笔记(九) C规则编辑笔记(十) 正文: 因为太久没有更新了,今天就…

Elasticsearch7.8.0版本高级查询—— 多关键字精确查询文档

目录一、初始化文档数据二、多关键字精确查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中,向 ES 服务器发 POST 请求 :http://localhost:9200/user/_doc/1,请求体内容为: {"name":"张三","…

干货 | 算力网络节点可信度评估和安全管控方案

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:算力网络第二部分:可信度评估一、可信度评估在整个算力网络处理任务的实施流程中,不同部分有不同可信度评估的方法,具体包括:…

忙活了一年的开源社区,终于赶上了春节前的末班车!

随着春节的临近,忙碌了一年的小伙伴们,是不是都已经踏上了回乡的列车?我呢也终于在春节前,完成了 HelloGitHub.com 的重构。HelloGitHub.com 是我在 2017 年的时候用 FlaskjQuery 开发的网站,最初的想法很简单就是为了…

MySQL34道练习题

1、取得每个部门最高薪水的人员名称(要求显示部门编号、人员名称和薪资) 第一步:查询每个部门的最高薪资 SELECT deptno,max(sal) as maxsal FROM emp GROUP BY deptno; 第二步:把上面查询结果当做临时表t&#xff0…

Pagoda panel宝塔面板

宝塔面板是干什么的?有哪些典型的功能作用?宝塔面板是开发的服务器管理工具,是一家专业从事服务器相关软件和服务研发的公司。宝塔的愿景是让用户更容易使用服务器。宝塔面板是一款服务器管理软件,支持Windows和Linux系统,服务器…

【SpringCloud18】SpringCloud Alibaba Nacos服务注册和配置中心

1.Nacos简介 1.1为什么叫Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service 1.2 是什么 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos:Dynamic Naming and Configuration ServiceNacos就是注册中心 配置中心…

简单双向LSTM模型实战项目

前言 数据来自于kaggle比赛Ventilator Pressure Prediction,数据背景介绍请看官方说明代码来自于当前排名第一的团队Shujun, Kha, Zidmie, Gilles, B,他们在获得第一名的成绩以后发了一篇博客,提供了他们在比赛中使用的模型,包括…

[C/C++]对象指针

对象指针 1.对象指针变量 和基本类型变量一样,对象在初始化之后也会在内存中占有若干字节的内存空间。因此在程序中,我们可以通过对象名或对象的地址来访问该对象。对象指针变量就是一个用于保存对象在内存中存储空间首地址的指针变量,它与普…

Python Matplotlib 中如何用 plt.savefig 存储图片

目录前言正文前言 plt.show()展示图片的时候,截图进行保存,图片不是多么清晰 如何保存高清图也是一知识点 函数包名:import matplotlib.pyplot as plt 正文 主要功能:保存绘制数据后创建的图形。使用此方法可以将创建的图形保…

MobaXterm的安装与使用

安装: 分为开箱即用和逐步配置版本,这里选择开箱即用的版本,网址如下: MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Home EditionFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Home Editionhttps://mobaxterm.m…

Java面试题(2),这是一篇会一直更新的博客!欢迎大家留言~

Java面试题第二篇1. 并发的三大特性2、线程池、解释线程池参数3、BeanFactory和ApplicationContext有什么区别?4、描述一下Spring Bean的生命周期5、Spring的几种Bean的作用域6、单例Bean是线程安全的吗?7、Spring框架用到了哪些设计模式8、Spring事务的…

Magic Leap CEO:我们的目标是再回到消费级AR市场

相比于几年前,Magic Leap在CEO换人后经历了一系列变化,其中更明显的变化,就是这家公司似乎变得更低调、更务实。此前,Magic Leap的内容库包括了大量趣味、娱乐的AR应用,而现在则主要改成B端解决方案,随着ML…