8路灰度传感器与stm32f1

这篇具有很好参考价值的文章主要介绍了8路灰度传感器与stm32f1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.连接

2.adc配置

3.主函数


1.连接

8路灰度,stm32,keil5,stm32文章来源地址https://www.toymoban.com/news/detail-643748.html

2.adc配置

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

	   	   
//初始化ADC
void  Adc_Init(void)
{ 	
    /*定义两个初始化要用的结构体,下面给每个结构体成员赋值*/
	ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure;
	
	/*
	  使能GPIOA和ADC1通道时钟
	  注意:除了RCC_APB2PeriphClockCmd还有RCC_APB1PeriphClockCmd,那么该如何选择?
      APB2:高速时钟,最高72MHz,主要负责AD输入,I/O,串口1,高级定时器TIM
      APB1:低速时钟,最高36MHz,主要负责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); //复位,将ADC1相关的寄存器设为默认值
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//工作模式:ADC1和ADC2独立工作模式  (还有其他什么模式?请看下面的附录图2)
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//数模转换工作:扫描(多通道)模式=ENABLE、单次(单通道)模式=DISABLE
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//数模转换工作:连续=ENABLE、单次=DISABLE
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//ADC转换由软件触发启动 (还有其他什么模式?请看下面的附录图3)
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐   除了右就是左:ADC_DataAlign_Left
	ADC_InitStructure.ADC_NbrOfChannel = 1;	//顺序进行规则转换的ADC通道的数目   范围是1-16
	ADC_Init(ADC1, &ADC_InitStructure);	//根据ADC_InitStruct中指定的参数初始化外设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  注意:函数ADC_Cmd只能在其他ADC设置函数之后被调用

    /*下面4步按流程走,走完就行*/
	ADC_ResetCalibration(ADC1);	//重置指定的ADC的校准寄存器
	while(ADC_GetResetCalibrationStatus(ADC1)); //等待上一步操作完成
	ADC_StartCalibration(ADC1);	//开始指定ADC的校准状态	
	while(ADC_GetCalibrationStatus(ADC1));//等待上一步操作按成		
 }	


//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)// 
{
  	//设置指定ADC的规则组通道,一个序列,采样时间
	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采样时间为239.5周期	  			    
  
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能	
	 
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

	return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1规则组的转换结果
}

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.主函数

#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();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	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);	
	}
 }

到了这里,关于8路灰度传感器与stm32f1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32——DS18B20温度传感器

    一、DS18B20介绍 (一)DS18B20技术性能特征 1、独特的单总线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,大大提高了系统的抗干扰性。 2、测温范围  -55°C~+125°C 3、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只

    2024年01月19日
    浏览(45)
  • 基于STM32F103——XGZP6847D压力传感器+串口打印

    XGZP6847D 型压力传感器尺寸小、易安装,广泛用于医疗电子、汽车电子、消费电子、运动健身器材、 物联网等领域 Reg0x30(测量命令寄存器) Measurement_control2:0( 工作模式 ) 010b ,组合采集模式(一次温度采集后立即进行一次传感器压力信号采集)。 011b ,休眠工作模式(定期的执

    2023年04月24日
    浏览(83)
  • STM32f103入门(4)对射式红外传感器计次(外部中断)

    中断:在主程序运行过程中,出现了特定的中断触发条件 (中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中

    2024年02月11日
    浏览(41)
  • (STM32F103单片机)DHT11温湿度传感器

    目录   一,产品介绍 二,产品亮点 三,产品参数 四,引脚连接及通信说明  五,原理讲解 六,源码 1,DHR11.C 2.DHR11.H 3,main.c DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高

    2023年04月08日
    浏览(56)
  • 基于STM32_DS18B20单总线传感器驱动

    本文以一款典型的单总线传感器及其驱动——DS18B20为例,简单对1-Wire总线接口的传感器做个示例讲解,该项目基于硬件平台STM32F407,使用标准库本完成。 DS18B20数字温度计提供9至12位(可配置)温度读数,指示设备的温度。信息通过1-Wire总线接口发送到/从DS18B20,因此只需要从中

    2024年02月07日
    浏览(50)
  • 基于STM32F030驱动MQ7一氧化碳传感器

    了解一氧化碳传感器 MQ7 的驱动原理,通过配置 STM32F030 的GPIO及外设ADC和DMA,采集一氧化碳浓度数据。 MQ-7气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。采用高低温循环检测方式低温(1.5v加热)检测一氧化碳,高温(5.0v加热)清洗低温时吸附的

    2023年04月26日
    浏览(53)
  • HX711压力传感器(基于STM32F103C8T6)

    HX711模块是我们目前比较常见的压力传感器模块,主要的作用是用来做压力检测,重量监测等等。博主的这篇博文主要实现功能为,在对重量或者压力进行监测的同时,可以累加或者清零数值,在此基础上就可以对比如饮水量进行统计等等。 HX711模块是市面上比较常见的模块

    2024年02月11日
    浏览(58)
  • STM32CubeMX 读取DS18B20温度传感器数据串口打印显示

    本文要做的所有工作标题基本都包括了,读取温度传感器的温度数值,再通过串口打印到串口助手; 好多博主大神的教程我按步骤做了之后总是出现程序不报错并且检测不到传感器的情况,后来找到原因并且修改后调试正常。 我用的是普中科技的实验板,主控芯片为STM3210

    2024年02月05日
    浏览(84)
  • STM32F103实现激光测距传感器测距WT-VL53L0 L1

    目录 本博客将采用标准库和HAL库实现 所用设备选择 引脚说明 与单片机的接线表 标准库实现  HAL库实现 本博客将采用 标准库 和 HAL库 实现 所用设备选择 单片机型号:STM32F103C8T6  激光测距传感器型号:WT-VL53L0 L1   采用串口TTL电平输出,可以接USB-TTL串口到电脑,或者直接接

    2024年02月14日
    浏览(40)
  • 【正点原子STM32连载】 第三十二章 光敏传感器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    本章,我们将学习使用STM32开发板板载的一个光敏传感器。我们还是要使用到ADC采集,通过ADC采集电压,获取光敏传感器的电阻变化,从而得出环境光线的变化,并在TFTLCD上面显示出来。 本章分为如下几个小节: 32.1 光敏传感器简介 32.2 硬件设计 32.3 程序设计 32.4 下载验证

    2024年02月03日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包