我有两个简单的发光二极管闪光灯编程,闪光间隔为1秒,我的BluePills.One方法使用HAL_GPIO_TogglePin来切换发光二极管状态,另一个使用设置和复位来切换发光二极管状态。设置和复位功能与预期一样,但HAL_GPIO_TogglePin确实在工作,但它在某些时候几乎有脉宽调制效应。我已经在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);
}发布于 2020-09-15 22:22:23
谢谢Codo,你是100%正确的。我把它修改成
if ((__HAL_TIM_GET_COUNTER(&htim1) == 32000) || (__HAL_TIM_GET_COUNTER(&htim1)==0))
{
HAL_GPIO_TogglePin(User_LED_GPIO_Port, User_LED_Pin);
timer_val = __HAL_TIM_GET_COUNTER(&htim1);
}有趣的是,我最初遵循了Digikey的例子,它做了同样的事情。
while (1)
{
// If enough time has passed (1 second), toggle LED and get new timestamp
if (__HAL_TIM_GET_COUNTER(&htim16) - timer_val >= 10000)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
timer_val = __HAL_TIM_GET_COUNTER(&htim16);
}哦,对于我想要的,Set Reset无论如何都会工作得更好。谢谢
https://stackoverflow.com/questions/63899257
复制相似问题