写入ODR寄存器

时间:2019-05-29 10:33:57

标签: c embedded stm32

已要求我修改WriteLED()的代码以直接使用ODR寄存器。该代码应读取寄存器的当前值,然后根据要打开或关闭哪些LED来写回修改后的值。

需要更改的代码

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;
}

提供给我的示例代码

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;
   }

以上代码在输出到ODR寄存器时应该是什么样子

0 个答案:

没有答案