stm32f407-openocd/Core/Src/gpio/gpio_scan.c

146 lines
3.6 KiB
C

#include <stdio.h>
#include "bit_band.h"
#include "stm32f4xx_hal.h"
#include "stm32f407xx.h"
void gpio_input_set(GPIO_TypeDef *gpio, uint16_t pin)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(gpio, &GPIO_InitStruct);
}
void gpio_output_set(GPIO_TypeDef *gpio, uint16_t pin)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(gpio, &GPIO_InitStruct);
}
void gpio_init()
{
// fan read
gpio_input_set(GPIOD, GPIO_PIN_4);
gpio_input_set(GPIOD, GPIO_PIN_5);
gpio_input_set(GPIOD, GPIO_PIN_6);
gpio_input_set(GPIOD, GPIO_PIN_7);
gpio_input_set(GPIOB, GPIO_PIN_4);
gpio_input_set(GPIOB, GPIO_PIN_3);
// pwm output
// gpio_output_set(GPIOC, GPIO_PIN_6);
// gpio_output_set(GPIOC, GPIO_PIN_7);
// gpio_output_set(GPIOC, GPIO_PIN_8);
// gpio_output_set(GPIOC, GPIO_PIN_9);
gpio_output_set(GPIOA, GPIO_PIN_5);
}
// void start_time()
// {
// PAout(5) = 1;
// }
// void stop_time()
// {
// PAout(5) = 0;
// }
static volatile char old[6];
static volatile int cnt[6];
static volatile int speed[6];
#define GPIO_DETECT(state, reg, cnt) \
if (state) \
{ \
if (reg == 0) \
{ \
reg = 1; \
cnt++; \
} \
} \
else \
{ \
if (reg == 1) \
{ \
reg = 0; \
} \
}
#define SAVE_SPEED(speed, cnt) \
{ \
speed = cnt; \
cnt = 0; \
}
void gpio_save_speed()
{
SAVE_SPEED(speed[0], cnt[0]);
SAVE_SPEED(speed[1], cnt[1]);
SAVE_SPEED(speed[2], cnt[2]);
SAVE_SPEED(speed[3], cnt[3]);
SAVE_SPEED(speed[4], cnt[4]);
SAVE_SPEED(speed[5], cnt[5]);
}
void gpio_scan()
{
char state = PDin(4);
GPIO_DETECT(state, old[0], cnt[0]);
state = PDin(5);
GPIO_DETECT(state, old[1], cnt[1]);
state = PDin(6);
GPIO_DETECT(state, old[2], cnt[2]);
state = PDin(7);
GPIO_DETECT(state, old[3], cnt[3]);
state = PBin(4);
GPIO_DETECT(state, old[4], cnt[4]);
state = PBin(3);
GPIO_DETECT(state, old[5], cnt[5]);
static int save = 0;
if (save > 1000)
{
gpio_save_speed();
save = 0;
}
else
{
save++;
}
}
static char duty[4] = {90, 60, 40, 10};
static char now = 0;
#define PWM_OUT(duty, now, io_deal) \
if (duty < now) \
{ \
io_deal = 1; \
} \
else \
{ \
io_deal = 0; \
}
void gpio_pwm_output()
{
// static char cnt = 0;
// if (cnt < 10)
// {
// cnt++;
// return;
// }
// cnt = 0;
// PAout(5) = 1;
// PCout(6) = 1;
// PCout(7) = 1;
// HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,1);
// PCout(8) = 1;
// PCout(9) = 1;
// PAout(5) = 0;
// PWM_OUT(duty[0], now, PCout(6));
// PWM_OUT(duty[1], now, PCout(7));
// PWM_OUT(duty[2], now, PCout(8));
// PWM_OUT(duty[3], now, PCout(9));
// now++;
// if (now == 99)
// {
// now = 0;
// }
}