RA4M2开发板试用报告【四】使用单通道ADC采集NTC

简介

前一段时间买了一个固态硬盘盒用来给MAC外接。 但是发现它有时候温度又实在有一点高。所以是一定需要一个风扇来给他散热的。 于是买了两个NTC的电阻。本次将通过配置ADC来读取3.3经过NTC后的值(因为没有加外部电阻,所以没办法获取到温度)

ADC配置步骤

1- 在FSP里结合对应的PIN和原理图和ADC的引脚配置对应的外设

我这里选择的是P004, 因为可以直接接NTC

2- 在PIN配置中开启ADC

3- 新建一个stack , 选择ADC

4- 配置ADC的详细属性参数

通用的ADC配置, 可以保持默认, 在input中开启通道4的输入。

配置ADC的中断和中断优先级,然后检查对应的pin是否使能。接着就是生成project。

5- 根据配置的回调函数名称写我们自己的回调函数。 其主要作用是判断ADC是否转换完成。

volatile bool scanned = false;

void adc0_callback(adc_callback_args_t *p_args)
{
    scanned = true;
}

6- 初始化ADC

void init_adc()
{
    fsp_err_t status = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
    assert(FSP_SUCCESS == status);
    printf("Init ADC successful!\r\n");
    status = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
    assert(FSP_SUCCESS == status);
    printf("ADC SCAN successful!\r\n");

}

上面的代码我踩坑了两三天。 因为我ADC之前都只是打开了,但是并没有调用ScanCfg函数来进行配置。 所以每次扫描出来的都是0

7- 在主函数中来进行ADC的读取和转换

void hal_entry(void)
{

    init_usart();
    init_adc();

    uint16_t adc_value = 0;
    fsp_err_t status = FSP_SUCCESS;
    while(1)
    {
        R_ADC_ScanStart(&g_adc0_ctrl);
        scanned = false;
        while(!scanned);
        status = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_4, &adc_value);
        assert(FSP_SUCCESS == status);
        printf("ADC Value: %u\r\n", adc_value);
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
    }

}

8- 然后将代码烧录的单片机中, 上述的主要逻辑为首先配置好ADC, 然后再while中触发转换,然后更新adc转换的标志, 从而等待在中断中对ADC的中断标志位进行重置即代表转换完成。然后遍可以通过串口打印出去了。

实验效果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值