目錄
1.連接
2.adc配置
3.主函數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-643748.html
1.連接
文章來源地址http://www.zghlxwxcb.cn/news/detail-643748.html
2.adc配置
#include "adc.h"
#include "delay.h"
//初始化ADC
void Adc_Init(void)
{
/*定義兩個初始化要用的結(jié)構(gòu)體,下面給每個結(jié)構(gòu)體成員賦值*/
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/*
使能GPIOA和ADC1通道時鐘
注意:除了RCC_APB2PeriphClockCmd還有RCC_APB1PeriphClockCmd,那么該如何選擇?
APB2:高速時鐘,最高72MHz,主要負(fù)責(zé)AD輸入,I/O,串口1,高級定時器TIM
APB1:低速時鐘,最高36MHz,主要負(fù)責(zé)DA輸出,串口2、3、4、5,普通定時器TIM,USB,IIC,CAN,SPI
*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12, ADC的采樣時鐘最快14MHz
/*配置輸入電壓所用的PA0引腳*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
ADC_DeInit(ADC1); //復(fù)位,將ADC1相關(guān)的寄存器設(shè)為默認(rèn)值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //工作模式:ADC1和ADC2獨立工作模式 (還有其他什么模式?請看下面的附錄圖2)
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //數(shù)模轉(zhuǎn)換工作:掃描(多通道)模式=ENABLE、單次(單通道)模式=DISABLE
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//數(shù)模轉(zhuǎn)換工作:連續(xù)=ENABLE、單次=DISABLE
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ADC轉(zhuǎn)換由軟件觸發(fā)啟動 (還有其他什么模式?請看下面的附錄圖3)
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數(shù)據(jù)右對齊 除了右就是左:ADC_DataAlign_Left
ADC_InitStructure.ADC_NbrOfChannel = 1; //順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目 范圍是1-16
ADC_Init(ADC1, &ADC_InitStructure); //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADC1的寄存器
ADC_RegularChannelConfig(ADC1, ADC_Channel_0|ADC_Channel_1|ADC_Channel_5|ADC_Channel_6|ADC_Channel_7|ADC_Channel_8|ADC_Channel_9, 1, ADC_SampleTime_239Cycles5 );//添加通道
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC 注意:函數(shù)ADC_Cmd只能在其他ADC設(shè)置函數(shù)之后被調(diào)用
/*下面4步按流程走,走完就行*/
ADC_ResetCalibration(ADC1); //重置指定的ADC的校準(zhǔn)寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //等待上一步操作完成
ADC_StartCalibration(ADC1); //開始指定ADC的校準(zhǔn)狀態(tài)
while(ADC_GetCalibrationStatus(ADC1));//等待上一步操作按成
}
//獲得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)//
{
//設(shè)置指定ADC的規(guī)則組通道,一個序列,采樣時間
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采樣時間為239.5周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的軟件轉(zhuǎn)換啟動功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉(zhuǎn)換結(jié)束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果
}
u16 Get_Adc_Average(u8 ch,u8 times)//電壓平均值
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
3.主函數(shù)
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "adc.h"
int main(void)
{
float tempa0,tempa1,tempa4,tempa5,tempa6,tempa7,tempb0,tempb1;
delay_init(); //延時函數(shù)初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
uart_init(115200); //串口初始化為115200
LED_Init(); //LED端口初始化
LCD_Init();
Adc_Init(); //ADC初始化
while(1)
{
tempa0=(float)Get_Adc_Average(ADC_Channel_0,10)*(3.3/4096);
tempa1=(float)Get_Adc_Average(ADC_Channel_1,10)*(3.3/4096);
tempa4=(float)Get_Adc_Average(ADC_Channel_4,10)*(3.3/4096);
tempa5=(float)Get_Adc_Average(ADC_Channel_5,10)*(3.3/4096);
tempa6=(float)Get_Adc_Average(ADC_Channel_6,10)*(3.3/4096);
tempa7=(float)Get_Adc_Average(ADC_Channel_7,10)*(3.3/4096);
tempb0=(float)Get_Adc_Average(ADC_Channel_8,10)*(3.3/4096);
tempb1=(float)Get_Adc_Average(ADC_Channel_9,10)*(3.3/4096);
printf("v0 %-4f v1 %-4f v2 %-4f v3 %-4f v4 %-4f v5 %-4f v6 %-4f v7 %-4f\r\n",tempa0,tempa1,tempa4,tempa5,tempa6,tempa7,tempb0,tempb1);
if(tempa0<3.15||tempa1<3.15||tempa4<3.15||tempa5<3.15||tempa6<3.15||tempa7<3.15||tempb0<3.15||tempb1<3.15)
LED0=!LED0;
delay_ms(1000);
}
}
到了這里,關(guān)于8路灰度傳感器與stm32f1的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!