这是我学习32的心理路程 我会尽量把内容写的仔细 对于一些简单模块的使用,我不打算深究其原理,我只要会用它就欧克。所以看见我的记光32博客的同志们请注意这一点 。如果同志您觉得内容有改进的敏传模块地方,那就请多多指教啦~~~本人一定认真听取 。
我这里使用的学习日光敏传感器是4针的。
DO | 数字输出:大于光线阈值,DO引脚输出1(高电平);反之输出0。关于光线阈值,应该是敏传模块调节模块上面那个十字架旋钮 |
GND | 接地 |
VCC | 3·3v或者5v |
注意:这是我第一次使用这个模块,所以语言描述可能有bug 。
3针的光敏传感器就好像没有DO引脚。其他的是一样的 。
这个小实验很简单哈 。
lightsensor.c
#include "stm32f10x.h" // Device header#define LED_OFF() GPIO_SetBits(GPIOB, GPIO_Pin_1 )#define LED_NO() GPIO_ResetBits(GPIOB, GPIO_Pin_1 )/*** @brief 光敏传感器DO引脚所连接32的PC14引脚的初始化,PC14设置为输入模式,读取DO传过来的电平。 * @param 无* @retval 无*/void Light_Sensor_GPIOinit(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef Light_Sensor_GPIO_InitStruct;Light_Sensor_GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU ;Light_Sensor_GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;Light_Sensor_GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&Light_Sensor_GPIO_InitStruct);}/*** @brief 光敏传感器所控制的led的初始化,这里我是自己外接的led* @param 无* @retval 无*/void Test_Sensor_LEDinit(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef Test_Sensor_LEDinit;Test_Sensor_LEDinit.GPIO_Mode = GPIO_Mode_Out_PP ;Test_Sensor_LEDinit.GPIO_Pin = GPIO_Pin_1;Test_Sensor_LEDinit.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB,&Test_Sensor_LEDinit);LED_OFF(); //high--->led off}/*** @brief 功能函数,读取DO电平,来控制外接LED* @param* @retval*/void Sensor_Contral_LED(void){//uint8_t value = 0;if( GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_14) == 0 ){LED_OFF();}elseLED_NO(); }main.c
#include "stm32f10x.h" // Device header#include "lightsensor.h"int main (void){Light_Sensor_GPIOinit();Test_Sensor_LEDinit();while(1){//GPIO_ResetBits(GPIOB, GPIO_Pin_1 );// 测试外接led单独能不能亮Sensor_Contral_LED();}}注意:lightsensor.h就是将lightsensor.c中的函数名复制一下就欧克了,这里就不多展示 了哈!
对于这个实验的总结: 开始测试外接led能不能单独亮的时候,led死活不亮,我还以为是引脚复用的毛病,但是我差了一下资料发现并不是这个问题,结果回去仔细看了一下引脚初始化才发现led要推挽输出(),以及引脚初始化结构体的问题 。我麻了