Skip to content

Instantly share code, notes, and snippets.

@hunandy14
Created August 24, 2017 09:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hunandy14/a496b1b635116a161f182b8cf0d47e4e to your computer and use it in GitHub Desktop.
Save hunandy14/a496b1b635116a161f182b8cf0d47e4e to your computer and use it in GitHub Desktop.
STM32F469I Arduino D0~D15 Define and Use
/*----------------------------------------------------------------
Arduino背板初始化設定函式
----------------------------------------------------------------*/
/* 腳位定義 */
#define ArD0_GPIO_PORT ((GPIO_TypeDef*)GPIOG)
#define ArD1_GPIO_PORT ((GPIO_TypeDef*)GPIOG)
#define ArD2_GPIO_PORT ((GPIO_TypeDef*)GPIOG)
#define ArD3_GPIO_PORT ((GPIO_TypeDef*)GPIOA)
#define ArD4_GPIO_PORT ((GPIO_TypeDef*)GPIOG)
#define ArD5_GPIO_PORT ((GPIO_TypeDef*)GPIOA)
#define ArD6_GPIO_PORT ((GPIO_TypeDef*)GPIOA)
#define ArD7_GPIO_PORT ((GPIO_TypeDef*)GPIOG)
#define ArD8_GPIO_PORT ((GPIO_TypeDef*)GPIOG)
#define ArD9_GPIO_PORT ((GPIO_TypeDef*)GPIOA)
#define ArD10_GPIO_PORT ((GPIO_TypeDef*)GPIOH)
#define ArD11_GPIO_PORT ((GPIO_TypeDef*)GPIOB)
#define ArD12_GPIO_PORT ((GPIO_TypeDef*)GPIOB)
#define ArD13_GPIO_PORT ((GPIO_TypeDef*)GPIOD)
#define ArD14_GPIO_PORT ((GPIO_TypeDef*)GPIOB)
#define ArD15_GPIO_PORT ((GPIO_TypeDef*)GPIOB)
#define ArD0_PIN ((uint32_t)GPIO_PIN_9)
#define ArD1_PIN ((uint32_t)GPIO_PIN_14)
#define ArD2_PIN ((uint32_t)GPIO_PIN_13)
#define ArD3_PIN ((uint32_t)GPIO_PIN_1)
#define ArD4_PIN ((uint32_t)GPIO_PIN_12)
#define ArD5_PIN ((uint32_t)GPIO_PIN_2)
#define ArD6_PIN ((uint32_t)GPIO_PIN_6)
#define ArD7_PIN ((uint32_t)GPIO_PIN_11)
#define ArD8_PIN ((uint32_t)GPIO_PIN_10)
#define ArD9_PIN ((uint32_t)GPIO_PIN_7)
#define ArD10_PIN ((uint32_t)GPIO_PIN_6)
#define ArD11_PIN ((uint32_t)GPIO_PIN_15)
#define ArD12_PIN ((uint32_t)GPIO_PIN_14)
#define ArD13_PIN ((uint32_t)GPIO_PIN_3)
#define ArD14_PIN ((uint32_t)GPIO_PIN_9)
#define ArD15_PIN ((uint32_t)GPIO_PIN_8)
/* 群組化腳位定義 */
GPIO_TypeDef* ArD_GPIO_PORT[16] = {ArD0_GPIO_PORT,
ArD1_GPIO_PORT,
ArD2_GPIO_PORT,
ArD3_GPIO_PORT,
ArD4_GPIO_PORT,
ArD5_GPIO_PORT,
ArD6_GPIO_PORT,
ArD7_GPIO_PORT,
ArD8_GPIO_PORT,
ArD9_GPIO_PORT,
ArD10_GPIO_PORT,
ArD11_GPIO_PORT,
ArD12_GPIO_PORT,
ArD13_GPIO_PORT,
ArD14_GPIO_PORT,
ArD15_GPIO_PORT};
uint32_t ArD_GPIO_PIN[16] = {ArD0_PIN,
ArD1_PIN,
ArD2_PIN,
ArD3_PIN,
ArD4_PIN,
ArD5_PIN,
ArD6_PIN,
ArD7_PIN,
ArD8_PIN,
ArD9_PIN,
ArD10_PIN,
ArD11_PIN,
ArD12_PIN,
ArD13_PIN,
ArD14_PIN,
ArD15_PIN};
/* Arduino 腳位定義 */
typedef enum
{
ArD0,
ArD1,
ArD2,
ArD3,
ArD4,
ArD5,
ArD6,
ArD7,
ArD8,
ArD9,
ArD10,
ArD11,
ArD12,
ArD13,
ArD14,
ArD15,
} ArD_TypeDef;
/* 初始化時脈 */
void Ard_CLK_ENABLE(ArD_TypeDef ArD){
switch(ArD)
{
case ArD0 :
__HAL_RCC_GPIOG_CLK_ENABLE();
break;
case ArD1 :
__HAL_RCC_GPIOG_CLK_ENABLE();
break;
case ArD2 :
__HAL_RCC_GPIOG_CLK_ENABLE();
break;
case ArD3 :
__HAL_RCC_GPIOA_CLK_ENABLE();
break;
case ArD4 :
__HAL_RCC_GPIOG_CLK_ENABLE();
break;
case ArD5 :
__HAL_RCC_GPIOA_CLK_ENABLE();
break;
case ArD6 :
__HAL_RCC_GPIOA_CLK_ENABLE();
break;
case ArD7 :
__HAL_RCC_GPIOG_CLK_ENABLE();
break;
case ArD8 :
__HAL_RCC_GPIOG_CLK_ENABLE();
break;
case ArD9 :
__HAL_RCC_GPIOA_CLK_ENABLE();
break;
case ArD10 :
__HAL_RCC_GPIOH_CLK_ENABLE();
break;
case ArD11 :
__HAL_RCC_GPIOB_CLK_ENABLE();
break;
case ArD12 :
__HAL_RCC_GPIOB_CLK_ENABLE();
break;
case ArD13 :
__HAL_RCC_GPIOD_CLK_ENABLE();
break;
case ArD14 :
__HAL_RCC_GPIOB_CLK_ENABLE();
break;
case ArD15 :
__HAL_RCC_GPIOB_CLK_ENABLE();
break;
default :
break;
}
}
/* 初始化程序 */
void Ard_LED_Init(ArD_TypeDef ArD)
{
GPIO_TypeDef* port;
uint16_t pin;
/* 設定腳位 */
port = ArD_GPIO_PORT[ArD];
pin = ArD_GPIO_PIN[ArD];
Ard_CLK_ENABLE(ArD);
/* 初始化結構設定 */
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
/* 初始化腳位 */
GPIO_InitStruct.Pin = pin;
HAL_GPIO_Init(port, &GPIO_InitStruct);
HAL_GPIO_WritePin(port, pin, GPIO_PIN_RESET);
}
/* 點亮LED */
void Ard_LED_On(ArD_TypeDef ArD){
if (ArD <= ArD15){
HAL_GPIO_WritePin(ArD_GPIO_PORT[ArD], ArD_GPIO_PIN[ArD], GPIO_PIN_SET);
}
}
/* 關閉LED */
void Ard_LED_Off(ArD_TypeDef ArD){
if (ArD <= ArD15){
HAL_GPIO_WritePin(ArD_GPIO_PORT[ArD], ArD_GPIO_PIN[ArD], GPIO_PIN_RESET);
}
}
/* 按鈕初始化 */
static void Ard_PB_Init(ArD_TypeDef ArD)
{
GPIO_TypeDef* port;
uint32_t pin;
/* 設定腳位 */
port = ArD15_GPIO_PORT;
pin = ArD15_PIN;
Ard_CLK_ENABLE(ArD);
/* Configure PA.00 pin as input floating */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = pin;
HAL_GPIO_Init(port, &GPIO_InitStructure);
/* Enable and set EXTI line 0 Interrupt to the lowest priority */
HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
/* 讀取按鈕 */
uint32_t Ard_PB_GetState(ArD_TypeDef ArD){
return HAL_GPIO_ReadPin(ArD_GPIO_PORT[ArD], ArD_GPIO_PIN[ArD]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment