102 lines
3.4 KiB
C
102 lines
3.4 KiB
C
|
|
|||
|
#include "stm32h7xx_hal_gpio.h"
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ƽ
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIOx: <EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>ΪGPIO_TypeDef<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD>룬ָ<EFBFBD><EFBFBD>GPIO<EFBFBD>˿ڵĵ<EFBFBD>ַ
|
|||
|
* GPIO_Pin: ѡ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>GPIO<EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIO_Pin_0-15<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>ʾGPIOx<EFBFBD>˿ڵ<EFBFBD>0-15<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* PinState: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ŵĵ<EFBFBD>ƽ
|
|||
|
* @arg GPIO_PIN_RESET:<EFBFBD><EFBFBD><EFBFBD>õ͵<EFBFBD>ƽ
|
|||
|
* @arg GPIO_PIN_SET: <EFBFBD><EFBFBD><EFBFBD>øߵ<EFBFBD>ƽ
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
|
|||
|
{
|
|||
|
/*<2A><><EFBFBD><EFBFBD>GPIOx<4F>˿<EFBFBD>BSRR<52>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ĵ<EFBFBD>16λ<36><CEBB>Ӧ<EFBFBD><D3A6>GPIO_Pinλ<6E><CEBB>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ*/
|
|||
|
/*<2A><><EFBFBD><EFBFBD>GPIOx<4F>˿<EFBFBD>BSRR<52>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ĸ<EFBFBD>16λ<36><CEBB>Ӧ<EFBFBD><D3A6>GPIO_Pinλ<6E><CEBB>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ*/
|
|||
|
/*<2A><>ΪBSRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>д0<D0B4><30>Ӱ<EFBFBD>죬GPIO_Pinֻ<6E>Ƕ<EFBFBD>ӦλΪ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>ֱ<EFBFBD>Ӹ<EFBFBD>ֵ*/
|
|||
|
|
|||
|
if(PinState != GPIO_PIN_RESET)
|
|||
|
{
|
|||
|
GPIOx->BSRRL = GPIO_Pin;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
GPIOx->BSRRH = GPIO_Pin ;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIOx<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>ΪGPIO_TypeDef<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD>룬ָ<EFBFBD><EFBFBD>GPIO<EFBFBD>˿ڵĵ<EFBFBD>ַ
|
|||
|
* GPIO_InitTypeDef:GPIO_InitTypeDef<EFBFBD>ṹ<EFBFBD><EFBFBD>ָ<EFBFBD>룬ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
|
|||
|
{
|
|||
|
uint32_t position = 0x00;
|
|||
|
uint32_t ioposition = 0x00;
|
|||
|
uint32_t iocurrent = 0x00;
|
|||
|
uint32_t temp = 0x00;
|
|||
|
|
|||
|
/* Configure the port pins */
|
|||
|
for(position = 0; position < 16; position++)
|
|||
|
{
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨ<EFBFBD><CDA8> GPIO_InitStruct->GPIO_Pin <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>0-15*/
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pos<6F><73>pinposλΪ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>GPIO_Pin_x<5F><78><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>pinpos<6F><73><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>1<EFBFBD><31>*/
|
|||
|
ioposition = ((uint32_t)0x01) << position;
|
|||
|
/* pos<6F><73>GPIO_InitStruct->Pin<69><6E> & <20><><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>currentpin == pos<6F><73>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾGPIO_InitStruct->Pin<EFBFBD><EFBFBD>pinposλҲΪ1<EFBFBD><EFBFBD>
|
|||
|
<EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD>֪pinpos<EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIO_InitStruct->Pin<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<EFBFBD>0-15*/
|
|||
|
iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition;
|
|||
|
|
|||
|
if(iocurrent == ioposition)
|
|||
|
{
|
|||
|
/*--------------------- GPIO Mode Configuration ------------------------*/
|
|||
|
/* <20>ڸ<EFBFBD><DAB8>ù<EFBFBD><C3B9><EFBFBD>ģʽѡ<CABD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
|
|||
|
{
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>뵱ǰIOӳ<4F><D3B3><EFBFBD>ı<EFBFBD><C4B1>ù<EFBFBD><C3B9><EFBFBD> */
|
|||
|
temp = GPIOx->AFR[position >> 3];
|
|||
|
temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
|
|||
|
temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
|
|||
|
GPIOx->AFR[position >> 3] = temp;
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>IO<49><4F><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ģ<EFBFBD>⣩ */
|
|||
|
temp = GPIOx->MODER;
|
|||
|
temp &= ~(GPIO_MODER_MODER0 << (position * 2));
|
|||
|
temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
|
|||
|
GPIOx->MODER = temp;
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>ģʽѡ<CABD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
|
|||
|
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
|
|||
|
{
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ٶȲ<D9B6><C8B2><EFBFBD> */
|
|||
|
temp = GPIOx->OSPEEDR;
|
|||
|
temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
|
|||
|
temp |= (GPIO_Init->Speed << (position * 2));
|
|||
|
GPIOx->OSPEEDR = temp;
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
temp = GPIOx->OTYPER;
|
|||
|
temp &= ~(GPIO_OTYPER_OT_0 << position) ;
|
|||
|
temp |= (((GPIO_Init->Mode & GPIO_OUTPUT_TYPE) >> 4) << position);
|
|||
|
GPIOx->OTYPER = temp;
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD>ǰIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
temp = GPIOx->PUPDR;
|
|||
|
temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
|
|||
|
temp |= ((GPIO_Init->Pull) << (position * 2));
|
|||
|
GPIOx->PUPDR = temp;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*********************************************END OF FILE**********************/
|
|||
|
|