GPIO口讀寫函數(shù)有如下8個;
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
這幾個函數(shù)結構比較簡單,一個個來看
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}
return bitstatus;
}
此函數(shù)為讀取GPIO端口輸入寄存器IDR某一位的狀態(tài),返回一個8位的值;
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
{
return ((uint16_t)GPIOx->IDR);
}
此函數(shù)為讀取一組GPIO端口輸入寄存器IDR的值,返回一個16位的值;
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;
if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}
return bitstatus;
}
此函數(shù)為讀取GPIO端口輸出寄存器ODR某一位的狀態(tài),返回一個8位的值;
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
{
return ((uint16_t)GPIOx->ODR);
}
此函數(shù)為讀取一組GPIO端口輸出寄存器ODR的值,返回一個16位的值;
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->BSRR = GPIO_Pin;
}
此函數(shù)為對GPIO端口某一位進行置位操作,通過BSRR寄存器實現(xiàn);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->BRR = GPIO_Pin;
}
此函數(shù)為對GPIO端口某一位進行復位操作,通過BRR寄存器實現(xiàn);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
if (BitVal != Bit_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BRR = GPIO_Pin;
}
}
此函數(shù)為對GPIO端口某一位進行寫操作,輸入?yún)?shù)有3個值,其中參數(shù)BitVal可為整型值0或者1,
其中關于BitAction,見如下定義typedef enum
{ Bit_RESET = 0,
Bit_SET
}BitAction;
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
GPIOx->ODR = PortVal;
}
此函數(shù)為對某一組GPIO口進行寫操作,輸入?yún)?shù)PortVal為一個16位的值,同過直接操作ODR寄存器來實現(xiàn)
上一篇:ST之GPIO使用之理解
下一篇:STM32的RCC配置流程
推薦閱讀
史海拾趣