簡體   English   中英

在STM32上直接使用ODR寄存器

[英]Using the ODR register directly On STM32

修改WriteLED()的代碼以直接使用ODR寄存器。 該代碼應讀取寄存器的當前值,然后根據要打開或關閉哪些LED來寫回修改后的值。

給我的示例代碼

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->ODR ˆ= GPIO_Pin;
}

需要更改的代碼

WriteLED (uint8_t LED, uint8_t State)
{
  // Check for correct state
 if ((State != LED_OFF) && (State != LED_ON))
  {
    return;
  }

  // Turn on/off the LED
  switch (LED)
    {
    case 'L':
      HAL_GPIO_WritePin (LD4_GPIO_Port, LD4_Pin, State);
      break;
    case 'T':
      HAL_GPIO_WritePin (LD3_GPIO_Port, LD3_Pin, State);
      break;
    case 'B':
      HAL_GPIO_WritePin (LD6_GPIO_Port, LD6_Pin, State);
      break;
    case 'R':
      HAL_GPIO_WritePin (LD5_GPIO_Port, LD5_Pin, State);
      break;
    }

  return;
}

輸出到ODR寄存器時,上面的代碼應該是什么樣的

您需要了解C按位運算。 這三個是^ (異或), & (按位與), | (按位或)

要清除一點GPIO->ODR &= ~pin_mask;

設置GPIO->ODR |= pin_mask;

這應該給您足夠的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM