(二)stm32巡线小车首尝试 红外篇

#采用stm32f103c8t6芯片

嗨嗨嗨,我又来了,这回是难度更大的红外传感器啦。我将一步步的实现红外传感器的功能,然后把实现过程写在博客里哈。

红外传感器,以前还没怎么接触过呢,先看一下它的样子。一个黑色的头头,一个白色的头头,看起来挺吓人的,不会输出模拟信号吧(没那么多模数转化接口啊啊啊啊)。查询资料后,我发现,它是输出数字信号的,当接收到发射光时就输出低电平,反之,就输出高电平。

好了,二话不说,开干。

将工程模板复制,然后再HARDEWARE下再建立一个名为infrared(红外线)的文件夹,建立.c与.h的文件,在头文件中写好INFRARED_Init()的声明。

在这个函数中,我是这么构想的。接收GPIOx与Pin两个参数,用于表示红外传感器所用的引脚,这样子写有一个好处,就是引脚可以灵活调整,就不用在更改需要使用的引脚的时候大费周章。然后再infrared.h中宏定义传感器初始化参数以及将GPIO_ReadInputDataBit宏定义成INFRARED_input。这样就在调用时,就会方便许多。但是,这样子会出现一个问题,时钟怎么初始化?我的方法是采用if…else if的方法,对与输入的不同io,采取不同的选择。

以下是代码了哦:

#infrared.h

#ifndef __INFRARED_H
#define __INFRARED_H

#include "stm32f10x.h"

void INFRARED_Init(GPIO_TypeDef* input_GPIOx, uint16_t Pin);

#define INFRARED1_init GPIOA, GPIO_Pin_1
#define INFRARED1_input GPIO_ReadInputDataBit(INFRARED1_init)

#endif

#infrared.c

#include "infrared.h"
#include "stm32f10x.h"

void INFRARED_Init(GPIO_TypeDef* input_GPIOx, uint16_t Pin)
{
    GPIO_InitTypeDef GPIO_init_set;

	if (input_GPIOx == GPIOA)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    else if (input_GPIOx == GPIOB)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    else if (input_GPIOx == GPIOC)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    else if (input_GPIOx == GPIOD)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
    
    GPIO_init_set.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_init_set.GPIO_Pin = Pin;
    GPIO_init_set.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(input_GPIOx, &GPIO_init_set);
}

#main.c 测试代码

#include "stm32f10x.h"
#include "led.h"
#include "infrared.h"

int main(void)
{
    LED_Init();
    LED1_PC13_Off;
    INFRARED_Init(INFRARED1_init);
    while (1)
    {
        if (INFRARED1_input == 0)
        {
            LED1_PC13_On;
        }
        else LED1_PC13_Off;
    }
}

就到这里了,红外巡线传感器基本上弄懂了,加油,继续努力。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值