Files
CHJ/user/MCU/lhl_gpio.c

89 lines
3.4 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#include "../main/SystemInclude.h"
/**------------------------------------------------------------------------
* @brief ϵͳ GPIO <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊģ<EFBFBD><EFBFBD>ģʽ<EFBFBD>Խ<EFBFBD><EFBFBD>͹<EFBFBD><EFBFBD><EFBFBD>
* @note GPIO0 <EFBFBD><EFBFBD> GPIO1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊģ<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>GPIO2 <EFBFBD>ܿ<EFBFBD> XIN/XOUT/SWDIO/SWCLK <EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
* <EFBFBD><EFBFBD> GPIO_PIN_1/2/3/4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊģ<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @example SystemGPIOInit();
**/
void SystemGPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_All; //<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //ģʽ<C4A3><CABD><EFBFBD><EFBFBD> GPIO_MODE_INPUT GPIO_MODE_OUTPUT_PP GPIO_MODE_OUTPUT_OD
GPIO_InitStruct.Current = GPIO_CURRENT_2mA; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIO_InitStruct.Pull = GPIO_PULLUP; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPIO_PULLDOWN GPIO_NOPULL
GPIO_InitStruct.SchmittTrigger = ENABLE; //<2F><><EFBFBD><EFBFBD>ʩ<EFBFBD><CAA9><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
GPIO_InitStruct.Alternate = GPIOx_AF_GPIO; //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨIO
LHL_GPIO_Init(GPIO0, &GPIO_InitStruct);
LHL_GPIO_Init(GPIO1, &GPIO_InitStruct);
GPIO_InitStruct.Pin &= ~(GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 | GPIO_PIN_4); //<2F>ܿ<EFBFBD>XIN XOUT SWDIO SWCLK
LHL_GPIO_Init(GPIO2, &GPIO_InitStruct);
}
/**------------------------------------------------------------------------
* @brief ʹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param GPIOx: GPIO <EFBFBD>˿<EFBFBD> (pGPIO0/pGPIO1/pGPIO2)
* @param GPIO_PinPos: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD> (0~15)
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OD λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>©<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD>޸<EFBFBD> OD <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @example EnableOutput(pGPIO0, 3); // ʹ<><CAB9> P0.3 Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**/
void EnableOutput(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinPos)
{
GPIOx->OE |= 1<<GPIO_PinPos; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIOx->IE &= ~(1<<GPIO_PinPos); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ö˿ڵ<CBBF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIOx->DR &= ~(3u << (GPIO_PinPos * 2));
GPIOx->DR |= ((uint32_t)GPIO_CURRENT_4mA<< (GPIO_PinPos * 2));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>趨(<28><>ͨIO)
GPIOx->OD &= ~(1u << GPIO_PinPos);
// <20><>©<EFBFBD><C2A9><EFBFBD><EFBFBD><EFBFBD>
// GPIOx->OD |= (1u << GPIO_PinPos);
}
/**------------------------------------------------------------------------
* @brief ʹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
* @param GPIOx: GPIO <EFBFBD>˿<EFBFBD> (pGPIO0/pGPIO1/pGPIO2)
* @param GPIO_PinPos: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD> (0~15)
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
* @example EnableInput(pGPIO0, 3); // ʹ<><CAB9> P0.3 Ϊ<><CEAA><EFBFBD><EFBFBD>
**/
void EnableInput(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinPos)
{
GPIOx->OE &= ~(1u << GPIO_PinPos);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPIOx->IE |= (1u << GPIO_PinPos); //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/**------------------------------------------------------------------------
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param GPIOx: GPIO <EFBFBD>˿<EFBFBD> (pGPIO0/pGPIO1/pGPIO2)
* @param GPIO_PinPos: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD> (0~15)
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>
* @example EnablePullUp(pGPIO0, 3); // ʹ<><CAB9> P0.3 <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
**/
void EnablePullUp(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinPos)
{
GPIOx->PDE &= ~(1u << GPIO_PinPos);
GPIOx->PUE |= (1u << GPIO_PinPos);
}
/**------------------------------------------------------------------------
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param GPIOx: GPIO <EFBFBD>˿<EFBFBD> (pGPIO0/pGPIO1/pGPIO2)
* @param GPIO_PinPos: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD> (0~15)
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>
* @example EnablePullDown(pGPIO0, 3); // ʹ<><CAB9> P0.3 <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
**/
void EnablePullDown(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinPos)
{
GPIOx->PUE &= ~(1u << GPIO_PinPos);
GPIOx->PDE |= (1u << GPIO_PinPos);
}