STM32H750XB_RT-THREAD/08-自己写库—构建库函数雏形/stm32h7xx_hal_gpio.c

102 lines
3.4 KiB
C
Raw Normal View History

2025-07-21 06:34:29 +00:00
#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**********************/