WCH沁恒单片机
直播中

张涛

7年用户 1341经验值
私信 关注
[问答]

请问uint8 HalLedSet (uint8 leds, uint8 mode)这个函数怎么使用?

没明白uint8 HalLedSet (uint8 leds, uint8 mode)这个函数怎么使用?
例如我LED的控制GPIO是A15,
#define LED_PIN (GPIO_Pin_15)

HAL_Init( );
  GPIOA_SetBits(LED_PIN);
  GPIOA_ModeCfg(LED_PIN, GPIO_ModeOut_PP_20mA);
  DelayMs(5000);
//  GPIOA_ResetBits(LED_PIN);
  HalLedSet(LED_PIN, HAL_LED_MODE_ON);
  DelayMs(5000);
//  GPIOA_SetBits(LED_PIN);
  HalLedSet(LED_PIN, HAL_LED_MODE_OFF);

灯不能亮,当用GPIOA_ResetBits(LED_PIN);灯右以正常亮。
HalLedSet()时要注意什么呢?
  

回帖(1)

池峙焯

2022-8-19 09:32:22
如果你看了EVT>EXAM>BLE>HAL>LED.c 的源码

你将发现这个函数的具体定义;

其最终的结果是通过查表方式调用一些在LED.h中通过#define 方式定义的对LED 控制的相关的宏.



下面是VT>EXAM>BLE>HAL>LED.h的部分源码:

LED引脚需要事先在这里定义.

/* 1 - LED */
#define LED1_BV BV(15)
#define LED2_BV
#define LED3_BV

#define LED1_OUT (R32_PB_OUT)
#define LED2_OUT 0
#define LED3_OUT 0
#define LED4_OUT 0

#define LED1_DDR (R32_PB_DIR|=LED1_BV)
#define LED2_DDR 0
#define LED3_DDR 0

#define HAL_TURN_OFF_LED1() (LED1_OUT |= LED1_BV)
#define HAL_TURN_OFF_LED2()
#define HAL_TURN_OFF_LED3()
#define HAL_TURN_OFF_LED4()

#define HAL_TURN_ON_LED1() (LED1_OUT &= (~LED1_BV))
#define HAL_TURN_ON_LED2()
#define HAL_TURN_ON_LED3()
#define HAL_TURN_ON_LED4()


这个实现,是为了一些简单的控制快速演示.

像绝大多数情况一样, 进一步的函数封装和抽象是建立在损失灵活性的基础上的.

你可以完全不使用LED.C 里的代码, 而通过以往的控制一般GPIO的经验去控制外部的led.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分