Skip to content

中国移动物联网麒麟版 mini 开关量输入检测

Published: at 01:53 PMSuggest Changes

用了一阵麒麟版,我觉得很有意思。 我用麒麟版实验了温湿度例程,流水灯例程。 但是找了半天没有找到开关量输入检测的。而我需要检测外置传感器信号。 我有一个红外线避障传感器和一个人体热释传感器,都是满足条件输出高电平的,然后单片机就需要在检测到高电平后,执行某些动作(程序)。 我知道开发板是用的 stm32 芯片,所以我在网上找了一下相关 lib(也就是库),看看能不能直接调用。还真找到现成的了。 这是我找到的一些资料,在这里做一下整理。

GPIO 输入

当 GPIO 连接了外部传感器,而传感器的信号是开关量的时候,GPIO 可能需要去轮询输入的状态是高是低,这时候 GPIO 就需要当做输入来用。 按键的动作可以用来模拟传感器的动作,按键通过上拉电阻接到高电平。当按键按下时,会使相应的 GPIO 管脚变成低电平。配置这些 GPIO 引脚为上拉模式,在没有收到信号的情况下,保持这些 GPIO 口为高电平。 GPIO 的库函数也为我们提供了读取某指定端口管脚的输入– GPIO_ReadInputDataBit 正是这样一个函数

函数名 GPIO_ReadInputDataBit 函数原形 u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) 功能描述 读取指定端口管脚的输入 输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设 输入参数 2 GPIO_Pin:待读取的端口位 返回值 输入端口管脚值,高或者低 u8 ReadValue; ReadValue = GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x); 返回值 ReadValue 反应了 GPIO 口的高低状态。

上面的就是我找的资料了,非常实用。然后我又找了一些现成的例程,修改了一下就可以直接上手使用。

开关量检测程序

首先要初始化一下 IO 口,初始化为输入模式

/*
 * @brief 初始化按键
 * @param 无
 * @retval 无
 */
void Key_GPIO_Config(void){
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 选择按键引脚 PA0
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 设置引脚模式为浮空输入
	GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化按键
}

然后在 main() 中直接使用函数

// 定义控制 LED 的引脚
#define LED_TOGGLE LED_Control(GPIOB, GPIO_Pin_0)
// 使用带参宏输出 LED 灯的另一种状态
#define LED_Control(GPIOx, GPIO_Pin) {GPIOx->ODR ^= GPIO_Pin;}

int main(void) {

  uint8_t SaveStatus = 0;
  uint8_t State;

  LED_GPIO_Config();
  Key_GPIO_Config();

  while (1)
  {
    State = Key_DETECTOR(GPIOA, GPIO_Pin_0);
    if (SaveStatus != State)
    {
      if (State == 1)
      {
        LED_TOGGLE;
      }
      SaveStatus = State;
    }
  }
}

笔记整理

我浏览了很多的网站,上面的部分内容就来自这些网站,谢谢这几位朋友给我带来的帮助。 然后我整理了一下这些网站,如果大家不是很清楚,可以进来更多的了解。

http://blog.csdn.net/kevinhg/article/details/17490273 http://blog.csdn.net/wjjontheway/article/details/9302189 http://blog.csdn.net/u010657219/article/details/41810771 http://blog.csdn.net/persistvonyao/article/details/38542847 http://blog.csdn.net/huangchijun11/article/details/53321566 https://zhuanlan.zhihu.com/p/23662301?refer=stm32


Previous Post
NodeMCU/ESP8266 驱动 OLED 0.96″ 128×64 I2C SSD1306 显示屏
Next Post
Nginx 反向代理 Google Font、Ajax 和 Gravatar 头像