[经验] 【eBox生态圈】连载七:STM32竟然可以这样读取模拟量?!情何以堪!

[复制链接]
发表于 2015-12-1 16:32:24   2595 查看 8 回复 显示全部楼层 倒序浏览
分享

STM32自带一个或者两个ADC转换器,精度(12位)和速度(14M的ADC时钟)还不错,最快的情况下采样率能到1M左右,能满足一般情况下的应用。性能没问题,有问题的是配置复杂。。。

eBox将这些复杂的过程封装起来,留给用户超级简单的接口,让用户用起来舒服到家!

eBox中ADC的特性:

(1)速度:ADC时钟采用eBox系统默认设置为RCC_PCLK2_Div6,即72/6=12Mhz,不可修改。每个通道的采样周期为ADC_SampleTime_28Cycles5,即28.5个ADC时钟周期完成一次采样;共开启了16个通道。使用规则顺序采样。由于使用了DMA所以也不会占用cpu资源(其实会占用一定的总线时间的,用于dma和cpu的总线仲裁)。

采样周期的计算:

Tconv = (28.5+12.5)* (1/12Mhz)*16=(41周期/12Mhz)*16=3.4us*16=54.4us。此处说明ADC每个通道更新周期为54.4us,实际的采样率为18.4Khz左右。但是每个通道实际使用的时3.4us完成了一次转换。如果想提高采样率只能申请修改内核,发布特殊需求版本的lib。

(2)analog_read()的速度是不受限制的,可以高速循环调用,但是其值的更新最快速度为Tconv。

(3)精度:ADC精度采用eBox系统默认设置12位,不可修改。返回值最大为4095.

(4)eBox默认支持ADC1的16个通道

使用方法:
  1. #include "ebox.h"
  2. int16_t x;
  3. void setup()
  4. {
  5.     ebox_init();
  6.     uart1.begin(9600);
  7.     PA7.mode(AIN);
  8. }

  9. int main(void)
  10. {
  11.     setup();
  12.     while(1)
  13.     {
  14.         x = analog_read(&PA7);
  15.         uart1.printf("hex = %05d\r\n",x);
  16.         x = analog_read_voltage(&PA7);
  17.         uart1.printf("val = %04dmv\r\n",x);
  18.         uart1.printf("==============\r\n",x);
  19.         delay_ms(1000);
  20.     }
  21. }
复制代码

撸主,我没文化,别骗我好不好!!!这么假?

没文化还不赶紧下载源代码试试,实践出真知!

最新的源代码下载地址:

https://github.com/eboxmaker/ebox_stm32

点击download zip下载源码,打开example->analog文件夹下面的文件。复制到main.cpp。


我的众筹项目地址:http://z.elecfans.com/30.html 期待大家一起来完善和发展eBox,打造国人自己的库,不仅仅支持STM32,更能支持飞思卡尔MCU、NXP MCU······

标签:STM32

实习生

发表于 2015-12-5 09:36:18  
请问你是用的什么什么模式采集ADC的值的?能支持一次初始化多个通道吗?
我也用C++封装过ADC的,用的DMA方式;但是如果在程序中间初始化一个通道的话会出现前面初始化过的通道重新又初始化一遍,我觉得这样不好;所以需要使用者在一开始就把所有的需要用到的ADC通道 一次性初始化完。
回复

点赞 举报

发表于 2015-12-5 12:50:15    楼主|
Jefferson_3 发表于 2015-12-5 09:36
请问你是用的什么什么模式采集ADC的值的?能支持一次初始化多个通道吗?
我也用C++封装过ADC的,用的DMA方式;但是如果在程序中间初始化一个通道的话会出现前面初始化过的通道重新又初始化一遍,我觉得这样不好;所以需要使用者在一开始就把所有的需要用到的ADC通道 一次性初始化完。 ...

恩,是这样的,eBox就是在最开始的时候将16通道的配置一起初始化完成,但是没有做IO的配置,所以用户真正需要使用的时候,只需要配置相应的GPIO为模拟输入即可!
回复

点赞 举报

实习生

发表于 2015-12-5 14:52:15  
ebox生态圈 发表于 2015-12-5 12:50
恩,是这样的,eBox就是在最开始的时候将16通道的配置一起初始化完成,但是没有做IO的配置,所以用户真正需要使用的时候,只需要配置相应的GPIO为模拟输入即可!

因为发的github上的源码并不能找到,404了所以我只能猜想了:你是在程序开始的时候就把GPIO的初始化完成了吗?也就是说你一开始就把所有引脚的功能规定好了;有些能复用功能的引脚就只有一种功能是吧?
回复

点赞 举报

实习生

发表于 2015-12-5 14:53:27  
Jefferson_3 发表于 2015-12-5 14:52
因为发的github上的源码并不能找到,404了所以我只能猜想了:你是在程序开始的时候就把GPIO的初始化完成了吗?也就是说你一开始就把所有引脚的功能规定好了;有些能复用功能的引脚就只有一种功能是吧?

404.png
回复

点赞 举报

助理工程师

发表于 2015-12-5 15:24:17  
听说过ebox好用,没想到这么好用
回复

点赞 举报

发表于 2015-12-6 10:45:36    楼主|

所有的GPIO都可以实现用户自定义配置,并没有封装死。现在可以支持一种复用,remap的引脚现在没有支持。这个后期会有的
回复

点赞 举报

发表于 2015-12-6 10:45:50    楼主|
愚姬嗳霸王 发表于 2015-12-5 15:24
听说过ebox好用,没想到这么好用

嘿嘿,不好用我就不做这个了
回复

点赞 举报

实习生

发表于 2016-5-30 22:19:58  
简单,快捷,牛,好好好好
回复

举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区