1.简介
本次没有用到模拟量采集,声音传感器听到声音,产生电平去点灯就可以了,可以自己去调节精度,不用太过灵敏
电源:5V 地:GND 引脚:PC11
流水灯:PC0 PC1 PC2
2.代码
voice.h
#ifndef __VOICE_H
#define __VOICE_H
#include "stm32f1xx_hal.h"
#define VOICE_GPIO_PORT GPIOC
#define VOICE_GPIO_PIN GPIO_PIN_11
#define VOICE_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0) /* PA口时钟使能 */
#define VOICE HAL_GPIO_ReadPin(VOICE_GPIO_PORT,VOICE_GPIO_PIN)
void VoiceSensor_Init(void);
uint8_t VoiceSensor_Get(void);
#endif
voice.c
#include "./BSP/VOICE/voice.h"
#include "stm32f1xx_hal.h"
void VoiceSensor_Init(void)
{
GPIO_InitTypeDef gpio_init_struct; /*调用GPIO结构体*/
VOICE_GPIO_CLK_ENABLE(); /* VOICE时钟使能 */
gpio_init_struct.Pin = VOICE_GPIO_PIN; /* VOICE引脚 */
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* 推挽输出 */
gpio_init_struct.Pull = GPIO_PULLDOWN; /* 下拉保持低电平 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init(VOICE_GPIO_PORT, &gpio_init_struct); /* 初始化VOICE引脚 */
}
uint8_t VoiceSensor_Get(void) /*读取PC11口的电平*/
{
return HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_11);
}
led.h
#ifndef _LED_H
#define _LED_H
#include "./SYSTEM/sys/sys.h"
/******************************************************************************************/
/* 引脚 定义 */
#define LED0_GPIO_PORT GPIOC
#define LED0_GPIO_PIN GPIO_PIN_0
#define LED0_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0) /* PA口时钟使能 */
#define LED1_GPIO_PORT GPIOC
#define LED1_GPIO_PIN GPIO_PIN_1
#define LED1_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0) /* PA口时钟使能 */
#define LED2_GPIO_PORT GPIOC
#define LED2_GPIO_PIN GPIO_PIN_2
#define LED2_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE(); }while(0) /* PA口时钟使能 */
/******************************************************************************************/
/* LED端口定义 */
#define LED0(x) do{ x ? \
HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_RESET); \
}while(0) /* LED0翻转 */
#define LED1(x) do{ x ? \
HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_RESET); \
}while(0) /* LED1翻转 */
#define LED2(x) do{ x ? \
HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(LED2_GPIO_PORT, LED2_GPIO_PIN, GPIO_PIN_RESET); \
}while(0) /* LED1翻转 */
/* LED取反定义 */
#define LED0_TOGGLE() do{ HAL_GPIO_TogglePin(LED0_GPIO_PORT, LED0_GPIO_PIN); }while(0) /* 翻转LED0 */
#define LED1_TOGGLE() do{ HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN); }while(0) /* 翻转LED1 */
#define LED2_TOGGLE() do{ HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_GPIO_PIN); }while(0) /* 翻转LED2 */
/******************************************************************************************/
/* 外部接口函数*/
void led_init(void); /* 初始化 */
#endif
led.c
#include "./BSP/LED/led.h"
/**
* @brief 初始化LED相关IO口, 并使能时钟
* @param 无
* @retval 无
*/
void led_init(void)
{
GPIO_InitTypeDef gpio_init_struct; /*调用GPIO结构体*/
LED0_GPIO_CLK_ENABLE(); /* LED0时钟使能 */
LED1_GPIO_CLK_ENABLE(); /* LED1时钟使能 */
LED2_GPIO_CLK_ENABLE(); /* LED0时钟使能 */
gpio_init_struct.Pin = LED0_GPIO_PIN | LED1_GPIO_PIN | LED2_GPIO_PIN; /* LED0引脚 */
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
/*初始化引脚*/
HAL_GPIO_Init(LED0_GPIO_PORT, &gpio_init_struct); /* 初始化LED0引脚 */
HAL_GPIO_Init(LED1_GPIO_PORT, &gpio_init_struct); /* 初始化LED1引脚 */
HAL_GPIO_Init(LED2_GPIO_PORT, &gpio_init_struct); /* 初始化LED2引脚 */
LED0(1); /* 关闭 LED0 */
LED1(1); /* 关闭 LED1 */
LED2(1); /* 关闭 LED2 */
}
main.c
部分代码,自己上面加初始化哦
while(1)
{
if (VoiceSensor_Get() == 1) //如果PA11口为高电平,即有声音,灯亮
{
LED0(0);
delay_ms(100);
LED0(1);
LED1(0);
delay_ms(100);
LED1(1);
LED2(0);
delay_ms(100);
LED2(1);
}
else
{
LED0(1);LED1(1);LED2(1);
}
3.视频演示
声音传感器点灯