接入《STM32 精美连接:光敏模块实现》

STM32+光敏模块

  • 器件选择
  • 4线光敏传感器介绍
  • 光敏模块原理图
  • 光敏模块实物
  • 光敏模块引脚说明
  • CubeMX配置
  • 代码主体部分
  • 结果展示
  • 器件选择

    硬件平台选择STM32F103C8T6最小系统开发板。
    STM32代码配置工具使用STM32CubeMX的HAL库进行开发。
    光敏模块选择4线光敏电阻传感器模块,(光敏电阻型号5516)。
    注1:数据下载使用ST-LINK下载。
    注2:串口数据接收使用USB转TTL传输,USB转TTL的TXD接STM32的PA10引脚RXD,RXD接STM32的PA9引脚TXD。

    4线光敏传感器介绍

    光敏模块原理图

    光敏模块原理图

    光敏模块实物

    光敏模块实物
    光敏传感器是利用光敏元件将光信号转换为电信号的传感器。在光敏电阻模块中载入了一个光敏电阻。光敏电阻是用硫化镉或硒化镉等半导体材料制成的特殊电阻器。光敏电阻对环境光线十分敏感。光照越强阻值就越低,随着光照强度的升高,电阻值迅速降低。

    光敏模块引脚说明

    VCC:电源引脚,接单片机+5V或者3.3V。
    GND:地线,接单片机GND。
    DO:开关量输出(0或1),模块在无光条件下或光强达不到设定阈值时,DO口输出高电平;当外界环境光强超过设定阈值时,DO输出低电平。
    AO:模拟量输出(电压),与单片机AD模块相连,通过AD转换,获得准确数值。(后续中使用PA1引脚作为ADC转换,因此此处接单片机的PA1引脚)

    CubeMX配置

    1、首先新建一个工程,芯片选择STM32F103C8T6,双击后进入开发。

    2、进入后,首先进行一些基础配置。配置调试引脚,配置时钟。在SYS下的Debug中选择Serial Wire。

    时钟配置选择外部时钟

    进入时钟配置:

    3、ADC相关配置,使用PA1脚作为ADC:

    使能配置:


    为了方便看出光敏模块输出模拟量的变化,通过PC端的串口工具返回电压值。因此也要进行串口的配置:

    同时也对其中断使能配置,勾选Enabled:

    后续配置:

    代码主体部分

    1、引入头文件,为后续使用sprintf做准备。

    #include "stdio.h"
    

    2、变量预先定义。

    uint16_t ADC_Sample = 0,ADC_Volt = 0;//ADC_Value为采样值,ADC_Volt为电压值
    uint8_t str[64];//给定一个数组空间,存放sprintf的内容
    

    3、数据存放与发送。

    void UR1_Send_Info()
    {
    	sprintf((char*)str_buff,"\r\nSampling value:%d,Voltage value:%d.%d%d",ADC_Sample,ADC_Volt/100,(ADC_Volt/10)%10,ADC_Volt%10);//使用sprintf把将要发送的内容存放到数组
    	HAL_UART_Transmit(&huart1,str,sizeof(str),10000);//将数组中的内容发送到串口
    }
    

    4、数据的获取。

    void Get_ADC_Sample()
    {
    	HAL_ADC_Start(&hadc1);//打开ADC转换
    	if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK)
    	{
    		ADC_Sample = HAL_ADC_GetValue(&hadc1);//将得到的ADC采样值放入变量ADC_Sample中
    		ADC_Volt = ADC_Sample * 330/4096;//数据转换,电压为3.3V,数据时12位,保留两位小数
    	}
    	UR1_Send_Info();//将上面数据进行存放,发送到上位机
    	HAL_ADC_Stop(&hadc1);//停止ADC转换
    }
    

    5、在main函数的while循环中加入写入的代码

    /* USER CODE BEGIN WHILE */
      while (1)
      {
        Get_ADC_Sample();
    	UR1_Send_Info();
    	HAL_Delay(500);//使用HAL库的Delay函数延时500ms,每500ms转换一次
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
      }
      /* USER CODE END 3 */
    

    结果展示


    注:博主是跟随小蜜蜂老师学习,故代码可能与小蜜蜂老师有重复,如侵权,请告知删除。
    (2022年05月13日写于郑州)

    物联沃分享整理
    物联沃-IOTWORD物联网 » 接入《STM32 精美连接:光敏模块实现》

    发表评论