注意:使用这个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)
编译是这个小锤子(没有问题)
文章来源:https://www.toymoban.com/news/detail-704237.html
这是测试结果,接3.3和gnd都没有问题,chl8我接的压力传感器,没有动它就默认高电阻3.3v,存在少许漂移现象和工频干扰。(后续可以加入DMA和滤波算法)文章来源地址https://www.toymoban.com/news/detail-704237.html
到了这里,关于使用RT-Thread studio IDE开发stm32F407(实现adc多通道采集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!