【发布时间】:2020-09-15 09:47:21
【问题描述】:
我有两个简单的 LED 闪光灯以 1 秒的间隔为我的 BluePills 编程闪光。一种方法使用 HAL_GPIO_TogglePin 切换 LED 状态,另一种使用 Set 和 Reset 切换 LED 状态。设置和重置按预期运行,但 HAL_GPIO_TogglePin 确实在工作,但它在某些时候几乎具有 PWM 效果。我已经在 2 种不同的 Bluepills 上尝试了这两种方法,结果都相同。
while (1)
{
if (__HAL_TIM_GET_COUNTER(&htim1) >= 32000)
{
HAL_GPIO_TogglePin(User_LED_GPIO_Port, User_LED_Pin);
}
和
while (1)
{
if (__HAL_TIM_GET_COUNTER(&htim1) >= 32000)
{
HAL_GPIO_WritePin(User_LED_GPIO_Port, User_LED_Pin, GPIO_PIN_SET);
}
else {
HAL_GPIO_WritePin(User_LED_GPIO_Port, User_LED_Pin, GPIO_PIN_RESET);
}
【问题讨论】:
-
你没有提到定时器是如何配置的。让我们假设它计数到 64,000。因此,查看您的第一个代码 sn-p:从 0 到 32,000,LED 没有变化。从 32,000 到 64,000,LED 在每次循环迭代时都会更改(切换),可能每秒数千次,即它看起来像 PWM。您的代码与您观察到的完全一致。