本节主要介绍eCos中stm32的ADC驱动及其应用编程。在eCos中,已经实现了stm32的ADC驱动。但在stm3210e_eval模板中,你会发现ADC驱动配置项是灰色的,也就是不能配置。
所以,我们的任务很简单:在eCos图形界面中根据板子硬件实现来配置stm32的ADC驱动(包括如何使能配置项)和编写一个应用实例(读取ADC的值,并在串口打印出来)。
配置stm32的ADC驱动
首先,在ecos.db的target中加入2个ADC相关包(分别是:CYGPKG_IO_ADC和CYGPKG_DEVS_ADC_CORTEXM_STM32),如下图灰色段:
打开eCos图形配置工具,菜单:Build—>Packages,左边窗口找到Generic ADC support,点击Add按钮,把其加入到右边窗口,如下图所示:
加入后,你会发现ST STM32 ADC device driver配置项会跑到I/O sub-system配置项下面去了,如下图所示:
这时候,你就可以根据你板子的硬件,对stm32的ADC进行配置了。我的配置如下:
- 使能ADC1的配置;
- 使能ADC1的ADC channel 14,用于读取精密可调电阻的电压值;
- 使能ADC1的ADC channel 16,用于读取芯片内部温度传感器的温度值;
- 其它保持默认配置即可。
ADC应用编程
ADC设备名称
应用程序使用eCos提供的设备IO(DEVIO)接口来访问ADC设备,即lookup()—>read()。在ADC驱动中,每个ADC通道对应一个设备名称,如下图所示:
ADC采样电压的计算
stm32F103ZE是12bit的模拟数字转换模块,因此,采样的电压的计算公式:
ADC_sameple * Vref / 4095, 其中:
- Vref:ADC的参考电压,在安富莱开发板上,使用的是3.3V;
- ADC_sameple:ADC采样数据值,即cyg_io_read()函数读取出来的数据,为cyg_adc_sample_t数据类型,这个数据类型需包含头文件:#include <cyg/io/adc.h> /* for cyg_adc_sample_t data type */
CPU温度计算公式
看STM32的参考手册和数据手册:
在编程中,我都是使用的典型值。
应用示例
eCos stm32 ADC驱动带有一个应用示例,详见源文件:adc1.c
应用问题
在ADC应用中,我遇到了一个问题:只要我在eCos图形配置工具中打开了ADC的任何一个通道,则不能生成正常的bin格式映像文件(但可生成正常的srec格式映像文件),如果不打开ADC任何一个通道,则可以输出正常的bin格式文件。
由于内容有点多,所以关于这个问题的解决,就放在下节来说明了。