首页 > 其他分享 >ra6m3之adc踩坑日志(基于rt-thread )

ra6m3之adc踩坑日志(基于rt-thread )

时间:2024-03-24 18:23:45浏览次数:17  
标签:rt src thread ra6m3 BSP drv ADC GetDepend USING

问题描述

1.已经用fsp工具正确配置Pins

image

2.已经用fsp工具正确配置Stacks

image

3.问题是根本没有在RT-Thread Studio看到HAL相关的ADC代码,也没看到Settings里边的ADC配置选项

image

问题分析

RT-Thread跟Linux内核一样,采用Kconfig来配置驱动和组件,既然没有看到有ADC选项,可以考虑自己添加一个;再者,HAL_Drivers目录下的SConscript代码是这样的 :

Import('RTT_ROOT')
Import('rtconfig')
from building import *

cwd = GetCurrentDir()

# add the general drivers.
src = Split("""
    drv_common.c
""")

if GetDepend(['BSP_USING_UART']):
    if GetDepend(['RT_USING_SERIAL_V2']):
        src += ['drv_usart_v2.c']
    else:
        print("\nThe current project does not support serial-v1\n")
        Return('group')

if GetDepend(['BSP_USING_GPIO']):
    src += ['drv_gpio.c']

if GetDepend(['BSP_USING_WDT']):
    src += ['drv_wdt.c']

if GetDepend(['BSP_USING_ONCHIP_RTC']):
    src += ['drv_rtc.c']

if GetDepend(['BSP_USING_I2C', 'RT_USING_I2C_BITOPS']):
    if GetDepend('BSP_USING_I2C0') or GetDepend('BSP_USING_I2C1'):
        src += ['drv_soft_i2c.c']

if GetDepend(['BSP_USING_I2C', 'BSP_USING_HW_I2C']):
        src += ['drv_i2c.c']

if GetDepend(['BSP_USING_SPI']):
    src += ['drv_spi.c']

if GetDepend(['BSP_USING_SCI_SPI']):
    src += ['drv_sci_spi.c']

if GetDepend(['BSP_USING_ADC']):
    src += ['drv_adc.c']

if GetDepend(['BSP_USING_DAC']):
    src += ['drv_dac.c']

if GetDepend(['BSP_USING_ONCHIP_FLASH']):
    src += ['drv_flash.c']

if GetDepend(['BSP_USING_PWM']):
    src += ['drv_pwm.c']

if GetDepend(['BSP_USING_ETH']):
    src += ['drv_eth.c']

if GetDepend(['BSP_USING_CAN']):
    src += ['drv_can.c']

if GetDepend(['BSP_USING_SDHI']):
    src += ['drv_sdhi.c']

if GetDepend(['BSP_USING_LCD']):
    src += ['drv_lcd.c']

path =  [cwd]
path += [cwd + '/config']

group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path)

Return('group')

可以了解到drv_adc.c在HAL_Drivers目录下是存在的,只是它没有添加到整个RT-Thread工程里边来,只要开启BSP_USING_ADC宏即可;于是乎,编写Kconfig开启ADC支持,RT_USING_ADC是RT-Thread支持ADC的宏开关,代码如下:

config BSP_USING_ADC
    bool "Enable ADC"
    select BSP_USING_ADC0
    select RT_USING_ADC
    default y

重新编译,但是编译报错

image

很明显,需要开启BSP_USING_ADC0这个宏,于是乎,又在Kconfig加上一下代码:

config BSP_USING_ADC0
    bool "Enable ADC0"
    default y

重新打开Settings,终于看到两个开关,重新编译工程也没有问题了

image

测试

示例程序,在hal_entry.c加入以下代码:

/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author        Notes
 * 2021-10-10     Sherman       first version
 */

#include <rtthread.h>
#include "hal_data.h"
#include <rtdevice.h>

#define LED_PIN    BSP_IO_PORT_02_PIN_09 /* Onboard LED pins */

#define ADC_DEV_NAME        "adc0"      /* ADC 设备名称 */
#define ADC_DEV_CHANNEL     1           /* 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);


void hal_entry(void)
{
    rt_kprintf("\nHello RT-Thread!\n");

    while (1)
    {
        rt_pin_write(LED_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED_PIN, PIN_LOW);
        rt_thread_mdelay(500);
    }
}

烧写运行demo,P001接板子电源口,运行结果如下,电压还是算合理的

image

标签:rt,src,thread,ra6m3,BSP,drv,ADC,GetDepend,USING
From: https://www.cnblogs.com/hywing/p/18092761

相关文章

  • 十七、BART
    前期回顾:BERT模型是仅使用Transformer-Encoder结构的预训练语言模型。GPT模型是仅使用Transformer-Decoder结构的预训练语言模型。BART(Bidirectionaland Auto-Regressive Transformers)模型是使用标准的Transformer-EncoderandDecoder模型整体结构的预训练语言模型......
  • 阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】
    文章目录学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路BERT代码学习过程20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析),一开始看这块其实挺懵的,不会就去问百度或其他人,当时遇见困难挺害怕的,但22后面开始力扣题【目前已刷......
  • Kubernetes客户端认证(三)—— Kubernetes使用CertificateSigningRequest方式签发客户端
    1、概述在《Kubernetes客户端认证(一)——基于CA证书的双向认证方式 》和《Kubernetes客户端认证(二)——基于ServiceAccount的JWTToken认证》两篇博文中详细介绍了Kubernetes客户端认证方式,包括以证书方式访问的普通用户或进程(运维人员及kubectl、kubelet等进程);以Service......
  • 【WEEK4】 【DAY4】AJAX - Part One【English Version】
    2024.3.21ThursdayContents8.AJAX8.1.Introduction8.2.Simulatingajax8.2.1.Createanewmodule:springmvc-06-ajax8.2.2.Addwebsupport,importpomdependencies8.2.2.1.Modifyweb.xml8.2.2.2.Createajspfolder8.2.3.CreateapplicationContext.xml......
  • 银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report
    人民银行金融统计数据大集中自动化报送系统(简称PBOCReport),是基于现代计算机网络技术应用基础上,由人行总行设置金融统计数据服务器,建立的一个全国统一的金融统计数据库。人行针对各银行存贷款、中间业务、网点人员、互联网金融等汇总报表统计,贷款类报表较多,从行业、期限、业务......
  • Python包的本地安装(.whl)报错:.whl is not a supported wheel on this platform
    以Pandas为例:1.报错:.whlisnotasupportedwheelonthisplatform.2.报错原因:下载的包与Python版本不相配3.解决步骤(共4步):Step1:在cmd输入命令“pipdebug--verbose”,查看可支持的版本。Step2:下载对应版本的安装包(根据......
  • portfinder.getPort( { port: 8080, // 默认8080端口,若被占用,重复+1,直到找
    https://github.com/wkylin/pro-sale-charge/blob/df7fa93c8673701e6897f18498cab78a7fbb05d7/webpack/webpack.dev.js#L77C1-L92C3constportfinder=require('portfinder')module.exports=newPromise((resolve,reject)=>{portfinder.getPort(......
  • 阿里二面:谈谈ThreadLocal的内存泄漏问题?问麻了。。。。
    引言ThreadLocal在Java多线程编程中扮演着重要的角色,它提供了一种线程局部存储机制,允许每个线程拥有独立的变量副本,从而有效地避免了线程间的数据共享冲突。ThreadLocal的主要用途在于,当需要为每个线程维护一个独立的上下文变量时,比如每个线程的事务ID、用户登录信息、数据库连接......
  • Linux C编程一站式学习 part2: C语言本质
    LinuxC编程一站式学习(akaedu.github.io)22.Makefile基础1.基本规则欲更新目标,必须首先更新它的所有条件;所有条件中只要有一个条件被更新了,目标也必须随之被更新。“更新”:执行一遍规则中的命令列表,命令列表中的每条命令必须以一个Tab开头对于Makefile中的每个以Tab开头......
  • Apache ECharts的用法——通过直观的图表来展示数据
    定义ApacheECharts是一款基于Javascript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。官网地址:https://echarts.apache.org/zh/index.html为了通过直观的图表来展示数据入门案例ApacheEcharts官方提供的快速入门:点击跳转网盘下载下载链......