TA的每日心情 | 无聊 2016-12-20 15:08 |
---|
签到天数: 510 天 连续签到: 1 天 [LV.9]以坛为家II
|
本帖最后由 ming1006 于 2012-12-28 12:32 编辑
我拿到LM4F Launchpad已经有一段时间了,但因为之前有点事,调PWM程序一直不出来,点亮LED等之类的教程已经有人发过,所以一直没有发表学习心得。这两天花了点时间终于调好了ADC多通道序列采样的程序,在此和大家分享了。 关于ADC的介绍我想大家可以阅读官方的说明书,我就不多介绍了。本次实验我使用的是TI的CCS,其中用到了一些CCS的调试技巧,包括graph的使用,有兴趣的可以学学。下面让我们来一步一步建立我们的工程。
1.打开CCS建立工程,配置如下:
2.在工作空间中右击ADC工程,选中Properties->build->ARM Compiler->Include Options,在包含路径中加入StellarisWare固件库的路径,我的是"D:\ti\StellarisWare",请根据你的路径修改
在build->ARM Linker->File Search Path下包含要用的driverlib-cm4f.lib
3.至此工程的基本设置就完成了,下面是主函数,注释很详细,我就不多说了- /*
- * main.c
- */
- #include "inc/hw_types.h"
- #include "inc/hw_memmap.h"
- #include "driverlib/adc.h"
- #include "driverlib/sysctl.h"
- #include "driverlib/gpio.h"
- #define VREF 3300.0 //参考电压3.3V
- //******************************************************************
- //本工程使用ADC0的采样序列1来实现多通道序列采样,采样序列1支持4个步进,
- //我们使用了三个步进,采样的通道依次为为CH0(PE3),CH1(PE2),CH2(PE1),
- //******************************************************************
- void main(void)
- {
- unsigned long value[3]; //采样的数据
- unsigned short voltage[3]; //转换后的电压
- //设置PLL,ADC时钟为16MHz
- SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL |
- SYSCTL_XTAL_16MHZ);
- //使能ADC0
- SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
- //使能ADC采样通道所在管脚对应的GPIO
- SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
- //设置GPIOE的PIN1,PIN2,PIN3为ADC功能引脚
- GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_1 |GPIO_PIN_2 |GPIO_PIN_3);
- //配置前先禁止ADC采样序列
- ADCSequenceDisable(ADC0_BASE,1);
- //配置ADC0,采样序列为1,采用处理器触发启动采样,优先级0
- ADCSequenceConfigure(ADC0_BASE,1,ADC_TRIGGER_PROCESSOR,0);
- //设置ADC0的步进0(即序列的第一个采样):输入通道0
- ADCSequenceStepConfigure(ADC0_BASE,1,0,ADC_CTL_CH0);
- //设置ADC0的步进1:输入通道1
- ADCSequenceStepConfigure(ADC0_BASE,1,1,ADC_CTL_CH1);
- //设置ADC0的步进2:输入通道2,中断使能,并说明这是采样序列的终止(最后一步)
- ADCSequenceStepConfigure(ADC0_BASE,1,2,ADC_CTL_CH2 |
- ADC_CTL_IE | ADC_CTL_END );
- //使能ADC采样序列1
- ADCSequenceEnable(ADC0_BASE,1);
- //清ADC采样序列1中断
- ADCIntClear(ADC0_BASE,1);
- while(1)
- {
- //触发ADC转换
- ADCProcessorTrigger(ADC0_BASE,1);
- //等待转换完成
- while(!ADCIntStatus(ADC0_BASE,1,false))
- {
- }
- //读采样序列FIFO中的采样结果(一次性将所有step的数据都读出)
- ADCSequenceDataGet(ADC0_BASE,1,value);
- //延时
- //SysCtlDelay(SysCtlClockGet());
- //将采样数据则算成电压(单位mV)
- voltage[0] = value[0] / 4096.0 * VREF;
- voltage[1] = value[1] / 4096.0 * VREF;
- voltage[2] = value[2] / 4096.0 * VREF;
- }
- }
复制代码 4.用滑动变阻器设置了三个电压分别接到PE1,PE2和PE3,点debug进入调试,在variables中右击各变量,都选中watch将他们加入变量窗口,都选中graph可以实现图形化的变量观察
在程序的最后一句设置断点,并右击断点,选择breakpoint properties->Debug Response->Action,设置为Refresh All Windows
点F8,调节滑动变阻器,我们可以在Expressions窗口中看到采样值和转化后的电压值,从Graph图可以更直观的观察变量以及变量的变化。
下面是完整的CCS工程,只要把StellarisWare固件库的路径和driverlib-cm4f.lib 的路径改成你的就可以了
ADC.zip
(29.62 KB, 下载次数: 41)
|
|