弄了两周了,一直没有解决。我刚开始学,用的stm32mini开发板,识别是我用例程里的adc例程改的,应该是可以返回数据,可是一直曝光不足,拿手机的手电筒照着才有反应,我实在不知道怎么办了,恳请给位大神帮忙!!
注释的都是我很不明白的地方,文件我也已经上传到了附件,希望各位大神帮助!!
【ADC】
#include "adc.h"
#include "delay.h"
u8 AD[128] ={0};
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );
RCC_HCLKConfig(RCC_SYSCLK_Div4); //时钟设置 这块是我自己改的,不知道行不行
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
u16 Get_Adc(u8 ch) //获取adc的值
{
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_7Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC1);
}
void SI(int a)
{
// GPIO_WriteBit(GPIOB,GPIO_Pin_13,Bit_RESET);
if(a==1)
GPIO_WriteBit(GPIOB,GPIO_Pin_13,1);
else
GPIO_WriteBit(GPIOB,GPIO_Pin_13,0);
}
void CLK(int a)
{
// GPIO_WriteBit(GPIOB,GPIO_Pin_14,Bit_SET);
if(a==1)
GPIO_WriteBit(GPIOB,GPIO_Pin_14,1);
else
GPIO_WriteBit(GPIOB,GPIO_Pin_14,0);
}
void ADC_GetLine(void)//采点
{
int i;
//采第一个点
SI(0);
CLK(0);
delay_us(1);
SI(1);
delay_us(1);
CLK(1);
delay_us(1);
SI(0);
delay_us(1);
AD[0]=Get_Adc(0);
CLK(0);
//采第2~128个点
for(i=1; i<128; i++)
{
delay_us(1);
CLK(1);
delay_us(1);
AD = Get_Adc(0);
CLK(0);
}
//第129个结束CLK
delay_us(1);
CLK(1);
delay_us(1);
CLK(0);
delay_ms(10);
}
【MAIN】
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "wdg.h"
#include "timer.h"
#include "pwm.h"
#include "lcd.h"
#include "adc.h"
int main(void)
{
int k=0;
float temp;
SystemInit();
delay_init(72);
NVIC_Configuration();//这句话不明白
uart_init(9600);//这句话也不明白
LED_Init();
KEY_Init();
LCD_Init();
Adc_Init();
POINT_COLOR=RED;
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"ROBOT TEST");
LCD_ShowString(60,90,"2014/6/2");
POINT_COLOR=BLUE;
LCD_ShowString(60,130,"ADC_CH0_VAL:");
while(1)
{
ADC_GetLine();
while(k<128)
{
LCD_ShowNum(156,130,AD[k],4,16);//好像是关于显示屏输出的
LCD_ShowNum(40,150,AD[3],4,16);
LCD_ShowNum(80,150,AD[6],4,16);
LCD_ShowNum(120,150,AD[9],4,16);
LCD_ShowNum(160,150,AD[12],4,16);
// LCD_ShowNum(200,150,AD[15],4,16);
// LCD_ShowNum(40,170,AD[18],4,16);
// LCD_ShowNum(80,170,AD[21],4,16);
// LCD_ShowNum(120,170,AD[24],4,16);
// LCD_ShowNum(160,170,AD[27],4,16);
// LCD_ShowNum(200,170,AD[30],4,16);
// LCD_ShowNum(40,190,AD[33],4,16);
// LCD_ShowNum(80,190,AD[36],4,16);
// LCD_ShowNum(120,190,AD[39],4,16);
// LCD_ShowNum(160,190,AD[42],4,16);
// LCD_ShowNum(200,190,AD[45],4,16);
// LCD_ShowNum(40,210,AD[48],4,16);
// LCD_ShowNum(80,210,AD[51],4,16);
// LCD_ShowNum(120,210,AD[54],4,16);
// LCD_ShowNum(160,210,AD[57],4,16);
// LCD_ShowNum(200,210,AD[60],4,16);
// LCD_ShowNum(40,230,AD[63],4,16);
// LCD_ShowNum(80,230,AD[69],4,16);
// LCD_ShowNum(120,230,AD[72],4,16);
// LCD_ShowNum(160,230,AD[75],4,16);
// LCD_ShowNum(200,230,AD[78],4,16);
// LCD_ShowNum(40,250,AD[81],4,16);
// LCD_ShowNum(80,250,AD[84],4,16);
// LCD_ShowNum(120,250,AD[87],4,16);
// LCD_ShowNum(160,250,AD[90],4,16);
// LCD_ShowNum(200,250,AD[93],4,16);
// LCD_ShowNum(40,270,AD[96],4,16);
// LCD_ShowNum(80,270,AD[99],4,16);
// LCD_ShowNum(120,270,AD[102],4,16);
// LCD_ShowNum(160,270,AD[105],4,16);
// LCD_ShowNum(200,270,AD[108],4,16);
LED0=!LED0;
if(AD[k]<128)//在显示屏上输出
{
AD[k]=0;
}
else
{
AD[k]=1;
}
k++;
}
k=0;
}
}
一周热门 更多>