使用RT-Thread Studio IDE开发STM32F407实现多通道ADC采集

注意:使用这个IDE配置工程特别简单( only   10  minutes )

step1:选择对应的芯片或开发板创建RT-Thread项目

 step2:配置RT-Thread Settings(按我的步骤顺序进行)

由于要用到ADC,所以我们使能这个框架,直接把它选上就ok

是不是特别简单?接下来第三步,要难一点了

step3

注意:这一步要配置cubmx(配置与stm32时钟,外设相关的东西,其实借助cubmx图形化配置工具这一步也变得十分简单)

ok,按下面的顺序来

 

 

 

 

然后把串口收发的引脚配置一下(是个人应该都会)

 

 接下来是时钟,只需要在下图两个位置输入数字然后enter,系统会自动帮你计算分频系数

 

最后一步,生成代码就可以直接关闭cubmx了,返回studio

 

 step3:以上准备工作做完了(实际操作起来很快的,你这是不熟悉而已),下面就可以愉快的码代码了,不多废物,直接看图

在编写主函数之前,先改一下工程(相当于移植工程),我们之前在配置好cubmx之后,会在studio 里面的cubmx文件夹生成相应的初始化代码,我们只需移植即可食用。

将cubmx->src->msp.下的这两个函数剪切到divers->board.c里面(最好放在最下面)

 

 

 然后在cubmx->conf.h里面把adc的这个使能注释可去掉(一般是已经帮你弄好了的,不过最好还是看一眼)

 最后一步将drivers->board.h下的BSP USING ADC注释取消掉(看你用哪一个或者是那几个adc)

然后就是main.c部分(开始编写业务逻辑代码)


#include <rtthread.h>
#include <rtdbg.h>
#include <board.h>
#include <rtdevice.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#define ADC_DEV_NAME        "adc1"      /* ADC 设备名称 */
#define REFER_VOLTAGE       330         /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS        (1 << 12)   /* 转换位数为12位 */

rt_thread_t Adc_thread1= RT_NULL;
rt_thread_t Adc_thread2= RT_NULL;
static void Adc_entry(void* paremeter);

int main(void)
{   /*创建第一个线程,用于采集IN8的值*/
    Adc_thread1 = rt_thread_create("adc1",
            Adc_entry,
            (void*)8,
            512,
            16,
            20);
    if(Adc_thread1 != RT_NULL)
        rt_thread_startup(Adc_thread1);
    else
        return -1;
    /*创建第二个线程,用于采集IN9的值*/
    Adc_thread2= rt_thread_create("adc1",
                Adc_entry,
               (void*)9,
                512,
                16,
                20);
        if(Adc_thread2 != RT_NULL)
            rt_thread_startup(Adc_thread2);
        else
            return -1;
}

static void Adc_entry(void* paremeter)
{
    rt_adc_device_t adc_dev;
    rt_uint32_t value,vol;
    rt_err_t ret = RT_NULL;
    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);
    }
    /* 使能设备 */
    ret = rt_adc_enable(adc_dev, paremeter);
    while(1)
    {
        /* 读取采样值 */
        value = rt_adc_read(adc_dev,paremeter);
        /* 转换为对应电压值 */
        vol = value * REFER_VOLTAGE / CONVERT_BITS;
        rt_kprintf("the  ch%d value is :%d.%02d \n", paremeter,vol/ 100, vol % 100);
        rt_thread_delay(500);
    }
}



 最后编译,下载,烧录注入灵魂(我用的是ST-LINK)

 编译是这个小锤子(没有问题)

 

 

 这是测试结果,接3.3和gnd都没有问题,chl8我接的压力传感器,没有动它就默认高电阻3.3v,存在少许漂移现象和工频干扰。(后续可以加入DMA和滤波算法)

物联沃分享整理
物联沃-IOTWORD物联网 » 使用RT-Thread Studio IDE开发STM32F407实现多通道ADC采集

发表评论