• 【蓝牙低功耗BLE】控制GPIO来点亮LED


    这节讲一下最简单的,也是最基础的东西。CC2540的IO操作,把PORT口当做GPIO来用,废话不多说,往下看。

    1、硬件电路

    硬件电路时最简单的,用一根GPIO去控制LED灯。因为GPIO作为output。所以也不用管GPIO的模式。


    还是挺简单的,控制左边GPIO的高低来开关LED灯。


    2、相关寄存器

    P0SEL      P0[7:0]功能设置寄存器,默认设置为普通I/O口
    P0INP P0[7:0]作为输入口时电路模式寄存器。能够设置为输入上下拉等
    P0 P0[7:0]能够位寻址的I/O寄存器
    P0DIR P0口输入输出设置寄存器

    P0SEL    0:普通IO口    1:第二功能

    P0DIR    0:输入            1:输出

    P0INP    0:上拉/下拉    1:三态


    3、代码实现

    这里以P1_0为例,看下代码中是怎样实现。

    在hal_led.c里面的HalLedInit函数:

    void HalLedInit (void)
    {
    #if (HAL_LED == TRUE)
      HalLedSet(HAL_LED_ALL, HAL_LED_MODE_OFF);  // Initialize all LEDs to OFF.
    
      // Set LED GPIOs to outputs.
      LED1_DDR |= LED1_BV;
    #if (!defined HAL_PA_LNA && !defined HAL_PA_LNA_CC2590)
      LED2_DDR |= LED2_BV;
    #if (!defined CC2540_MINIDK && !defined HAL_BOARD_CC2540USB)
      LED3_DDR |= LED3_BV;
    #endif
    #endif
    #if defined BLINK_LEDS
      HalLedStatusControl.sleepActive = FALSE;  // Initialize sleepActive to FALSE.
    #endif
    #endif
    
    相关的宏定义
    /* 1 - Green */
    #define LED1_BV                        BV(0)
    #define LED1_SBIT                      P1_0
    #define LED1_DDR                       P1DIR
    #define LED1_POLARITY                  ACTIVE_HIG

    开关LED

      #define HAL_TURN_OFF_LED1()       st( LED1_SBIT = LED1_POLARITY (0); )
      #define HAL_TURN_OFF_LED2()       st( LED2_SBIT = LED2_POLARITY (0); )
      #define HAL_TURN_OFF_LED3()       st( LED3_SBIT = LED3_POLARITY (0); )
      #define HAL_TURN_OFF_LED4()       HAL_TURN_OFF_LED1()
    
      #define HAL_TURN_ON_LED1()        st( LED1_SBIT = LED1_POLARITY (1); )
      #define HAL_TURN_ON_LED2()        st( LED2_SBIT = LED2_POLARITY (1); )
      #define HAL_TURN_ON_LED3()        st( LED3_SBIT = LED3_POLARITY (1); )
      #define HAL_TURN_ON_LED4()        HAL_TURN_ON_LED1(


    提取一下关键代码:

    1)把P1_0设置为输出

    P1_DIR |= 0x01;

    2)设置P1_0为高电平,点亮LED

    P1_0 = 1;
    2)设置P1_0为低电平,熄灭LED
    P1_0 = 0;

    事实上看一下协议栈里面的HAL中针对各个接口的封装也不难。


    这一节就先到这。


  • 相关阅读:
    关于selenium中的三种等待方式与EC模块的知识
    re.findall用法
    链表及链表的逆置
    通过两个队列实现一个栈
    flask与Django框架的区别
    http协议与https协议
    Maven系列教材 (四)- 通过命令行创建Maven风格的Java项目
    Maven系列教材 (三)- 仓库概念,下载与配置
    Maven系列教材 (二)- 下载与配置Maven
    Maven系列教材 (一)- 什么是Maven
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7130663.html
Copyright © 2020-2023  润新知