#include "driver.h" #include #include #include #include "com_gpio.h" #include "hal_interface_api.h" #include "linux/fcntl.h" #define DEV_NAME "/dev/gpio" /* Demon // Set PD_2 output GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; stm32_gpio_init(GPIOD, &GPIO_InitStruct); stm32_gpio_write(GPIOD, GPIO_PIN_12, GPIO_PIN_SET); // Set PI_8 input GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; stm32_gpio_init(GPIOI, &GPIO_InitStruct); //Set PD_2 low stm32_gpio_write(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET); //Get PI_8 value printf("PI_8: %d\n", stm32_gpio_read(GPIOI, GPIO_PIN_8)); */ void stm32_gpio_init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) { int fd; int ret; gpio_t gpio_arg; fd = open(DEV_NAME, O_RDWR); if(fd == -1) { printf("Open %s failed!\n", DEV_NAME); } gpio_arg.GPIOx = GPIOx; gpio_arg.GPIO_pin = GPIO_Init->Pin; memcpy(&gpio_arg.GPIO_Init, GPIO_Init, sizeof(GPIO_InitTypeDef)); ret = ioctl(fd, GPIO_INIT, &gpio_arg); if(ret == -1) { printf("Init gpio failed!\n"); } close(fd); } void stm32_gpio_write(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) { int fd; int ret; gpio_t gpio_arg; fd = open(DEV_NAME, O_RDWR); if(fd == -1) { printf("Open %s failed!\n", DEV_NAME); } gpio_arg.GPIOx = GPIOx; gpio_arg.GPIO_pin = GPIO_Pin; gpio_arg.Data = PinState; ret = ioctl(fd, GPIO_WRITE_PIN, &gpio_arg); if(ret == -1) { printf("Write gpio failed!\n"); } close(fd); } GPIO_PinState stm32_gpio_read(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { int fd; int ret; gpio_t gpio_arg; fd = open(DEV_NAME, O_RDWR); if(fd == -1) { printf("Open %s failed!\n", DEV_NAME); } gpio_arg.GPIOx = GPIOx; gpio_arg.GPIO_pin = GPIO_Pin; ret = ioctl(fd, GPIO_READ_PIN, &gpio_arg); if(ret == -1) { printf("Write gpio failed!\n"); } close(fd); return gpio_arg.Data; }