Rima Alaya GSI2-B
mylib.h
#include "stm32f4xx.h"
#ifndef SRC_MYLIB_H_
#define SRC_MYLIB_H_
typedef enum
{ set=1, res=0}ETAT;
// Fonctions de lecture
ETAT GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint8_t pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint8_t pin);
uint16_t GPIO_ReadOutputData(uGPIO_TypeDef* GPIOx);
// Fonctions d'écriture
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t pins);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t pins);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint8_t pin, ETAT value);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t data);
void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t pins);
#endif
mylib.c
#include "mylib.h"
// Fonctions de lecture
//Lit l'état d'une broche GPIO spécifique en tant qu'entrée
ETAT GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint8_t pin) {
if (GPIOx->IDR & (1U << pin)) {
return set;
} else {
return res;
}
}
//Lit l'état de toutes les broches GPIO configurées en tant qu'entrées sur un
port GPIO donné
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) {
return (uint16_t)GPIOx->IDR;
}
//Lit l'état d'une broche GPIO spécifique en tant que sortie
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint8_t pin) {
if (GPIOx->ODR & (1U << pin)) {
return set;
} else {
return res;
}
}
//Lit l'état de toutes les broches GPIO configurées en tant que sorties sur un
port GPIO donné
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) {
return (uint16_t)GPIOx->ODR;
}
// Fonctions d'écriture
//Définit l'état logique haut (1) sur les broches spécifiées d'un port GPIO en
utilisant un masque de broches.
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t pins) {
GPIOx->BSRR = pins;
}
//Réinitialise l'état logique bas (0) sur les broches spécifiées d'un port
GPIO en utilisant un masque de broches.
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->BRR = GPIO_Pin;
}
// Écrit un état logique spécifié
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint8_t pin, ETAT value) {
if (value == set) {
GPIOx->BSRR = (1U << pin);
} else {
GPIOx->BSRR = (1U << (pin + 16));
}
}
//Écrit une valeur binaire spécifiée sur toutes les broches d'un port GPIO.
Chaque bit de la valeur binaire correspond à une broche du port.
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t data) {
GPIOx->ODR = data;
}
// Inverse l'état logique des broches spécifiées sur un port GPIO donné.
void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t pins) {
GPIOx->ODR ^= pins;
}