2017年8月24日 星期四

STM32F469I GPIO 基本的按鈕控制

STM32F469I GPIO 基本的按鈕控制

腳位的部分或LED控制可以參考上一篇
https://charlottehong.blogspot.tw/2017/07/stm32f469i-gpio.html

按鈕初始化

/* UserDefine functions ------------------------------------------------------*/
void User_LED_Init()
{
  // 設定角位(3行都要改)
  uint16_t pin       = GPIO_PIN_4;
  GPIO_TypeDef* port = GPIOB;
  __HAL_RCC_GPIOB_CLK_ENABLE();

  // 初始化
  GPIO_InitTypeDef  GPIO_InitStruct;
  GPIO_InitStruct.Pin = pin;                  // 腳位數字
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 設置為輸出
  GPIO_InitStruct.Pull = GPIO_PULLUP;         // 下拉電阻
  GPIO_InitStruct.Speed = GPIO_SPEED_FAST;    // 速度
  HAL_GPIO_Init(port, &GPIO_InitStruct);

  // 設定起始狀態
  HAL_GPIO_WritePin(port, pin, GPIO_PIN_RESET);
}
與前一章節一樣需要設置 Set port and pin 內的參數三行,這裡設置的事 PB8 也就是 Arduino腳位的 D15 的腳位置。

偵測按鈕

這個直接在放主程式main的 while 回圈內就可以
D15放空或接5V會讓D2 D3亮,D15接地則滅。
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == PB_RESET)
{
  /* 接地 */
  HAL_GPIO_WritePin(ArD2_GPIO_PORT, ArD2_PIN, GPIO_PIN_SET);
  HAL_GPIO_WritePin(ArD3_GPIO_PORT, ArD3_PIN, GPIO_PIN_SET);
}
else if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == PB_SET)
{
  /* 放開 */
  HAL_GPIO_WritePin(ArD2_GPIO_PORT, ArD2_PIN, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(ArD3_GPIO_PORT, ArD3_PIN, GPIO_PIN_RESET);  
}

沒有留言:

張貼留言