#include #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; // } }