锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

《STM32嵌入式接口与传感器应用开发》实验报告(二)

时间:2022-08-03 17:19:00 sitemap stm8外接传感器

STM32嵌入式接口与传感器应用开发实验报告(2)

实验名称:ADC KEY控制LED

一、实验目的

1.在keil五中编写工程实现ADC KEY控制LED的功能。

二、实验内容

在工程代码中实现ADC KEY控制LED的功能。

  • 实验过程和结论
  1. C源码(请在下面粘贴C源码)

#include "stm32f10x.h"

#include "adc.h"
#include "delay.h"

void MY_Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

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));
}

u16 Get_Adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t {
temp_val =Get_Adc(ch);
DELAY_S;
}
return temp_val/times;
}

u16 Adc_Value(void)
{
float temp = 0;
u16 adc = 0;
adc = Get_Adc_Average(ADC_Channel_1,10);
temp = (float)adc*(3.3/4096);
adc = temp * 1000;

return adc;
}

图1 adc.c的配置

#ifndef __ADC_H
#define __ADC_H

void Init_ADC(void);

#endif


图2 adc.h的配置


#include "stm32f10x.h"
#include
#include "led.h"
#include "key.h"
#include "wwdg.h"
#include "beep.h"
#include "adc.h"

void Whole_Init(void)
{
    Init_LED();
    Init_KEY();
    Init_BEEP();
    delay_count(1000);
  Init_IWDG(3,1000);
    GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);
}
void IWDG_FEED(void)
{
   IWDG_ReloadCounter();
}

int main(void)
{
  Whole_Init();
    
  while (1)
  {
        if(KEY_Status(0)==1 )
        {
          IWDG_FEED();//ι¹·
            delay_count(1000);
            GPIO_ResetBits(GPIOE,GPIO_Pin_5);    
            GPIO_ResetBits(GPIOB,GPIO_Pin_8);
            delay_count(1000);
            GPIO_SetBits(GPIOE,GPIO_Pin_5);    
            GPIO_ResetBits(GPIOB,GPIO_Pin_8);
        }
  }
}

图3 main函数的配置

  1. 程序运行完成截图(请将程序运行后截图粘贴于下方) 图3 编译结果图

(3)实验现象

 

相关文章