/** * @file board.h * @brief STM32F407 Discovery board definitions */ #ifndef BOARD_H #define BOARD_H #include #include #include "stm32f4xx.h" /* ============================================================================ * Board Identification * ============================================================================ */ #define BOARD_NAME "STM32F407G-DISC1" #define BOARD_MANUFACTURER "STMicroelectronics" #define BOARD_VERSION "1.0" #define BOARD_MCU "STM32F407VG" /* ============================================================================ * Clock Configuration * ============================================================================ */ #define HSE_VALUE 8000000U /* External crystal */ #define HSI_VALUE 16000000U /* Internal oscillator */ #define LSE_VALUE 32768U /* Low speed external */ #define LSI_VALUE 32000U /* Low speed internal */ #define SYSTEM_CLOCK 168000000U /* 168 MHz */ #define AHB_CLOCK 168000000U #define APB1_CLOCK 42000000U #define APB2_CLOCK 84000000U #define USB_CLOCK 48000000U /* PLL Configuration */ #define PLL_M 8 #define PLL_N 336 #define PLL_P 2 #define PLL_Q 7 /* ============================================================================ * LED Definitions * ============================================================================ */ #define LED_COUNT 4 #define LED1_PORT GPIOD #define LED1_PIN GPIO_PIN_12 #define LED1_CLOCK __HAL_RCC_GPIOD_CLK_ENABLE() #define LED2_PORT GPIOD #define LED2_PIN GPIO_PIN_13 #define LED2_CLOCK __HAL_RCC_GPIOD_CLK_ENABLE() #define LED3_PORT GPIOD #define LED3_PIN GPIO_PIN_14 #define LED3_CLOCK __HAL_RCC_GPIOD_CLK_ENABLE() #define LED4_PORT GPIOD #define LED4_PIN GPIO_PIN_15 #define LED4_CLOCK __HAL_RCC_GPIOD_CLK_ENABLE() /* LED Active Level */ #define LED_ACTIVE_LEVEL GPIO_PIN_SET /* ============================================================================ * Button Definitions * ============================================================================ */ #define BUTTON_COUNT 1 #define BUTTON1_PORT GPIOA #define BUTTON1_PIN GPIO_PIN_0 #define BUTTON1_CLOCK __HAL_RCC_GPIOA_CLK_ENABLE() #define BUTTON1_EXTI_IRQ EXTI0_IRQn /* Button Active Level */ #define BUTTON_ACTIVE_LEVEL GPIO_PIN_SET /* ============================================================================ * UART Definitions * ============================================================================ */ #define UART1_INSTANCE 0 #define UART1_BAUDRATE 115200 #define UART1_WORDLENGTH UART_WORDLENGTH_8B #define UART1_STOPBITS UART_STOPBITS_1 #define UART1_PARITY UART_PARITY_NONE #define UART1_HWFLOWCTL UART_HWCONTROL_NONE #define UART1_TX_PORT GPIOA #define UART1_TX_PIN GPIO_PIN_9 #define UART1_TX_AF GPIO_AF7_USART1 #define UART1_RX_PORT GPIOA #define UART1_RX_PIN GPIO_PIN_10 #define UART1_RX_AF GPIO_AF7_USART1 #define UART1_CLOCK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE() #define UART1_GPIO_CLOCK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() #define UART2_INSTANCE 1 #define UART2_BAUDRATE 115200 #define UART2_TX_PORT GPIOA #define UART2_TX_PIN GPIO_PIN_2 #define UART2_TX_AF GPIO_AF7_USART2 #define UART2_RX_PORT GPIOA #define UART2_RX_PIN GPIO_PIN_3 #define UART2_RX_AF GPIO_AF7_USART2 #define UART2_CLOCK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() /* ============================================================================ * CAN Definitions * ============================================================================ */ #define CAN1_INSTANCE 0 #define CAN1_BAUDRATE 500000 #define CAN1_TX_PORT GPIOB #define CAN1_TX_PIN GPIO_PIN_9 #define CAN1_TX_AF GPIO_AF9_CAN1 #define CAN1_RX_PORT GPIOB #define CAN1_RX_PIN GPIO_PIN_8 #define CAN1_RX_AF GPIO_AF9_CAN1 #define CAN1_CLOCK_ENABLE() __HAL_RCC_CAN1_CLK_ENABLE() #define CAN1_GPIO_CLOCK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() #define CAN2_INSTANCE 1 #define CAN2_BAUDRATE 500000 #define CAN2_TX_PORT GPIOB #define CAN2_TX_PIN GPIO_PIN_13 #define CAN2_TX_AF GPIO_AF9_CAN2 #define CAN2_RX_PORT GPIOB #define CAN2_RX_PIN GPIO_PIN_12 #define CAN2_RX_AF GPIO_AF9_CAN2 #define CAN2_CLOCK_ENABLE() __HAL_RCC_CAN2_CLK_ENABLE() /* ============================================================================ * SPI Definitions * ============================================================================ */ #define SPI1_INSTANCE 0 #define SPI1_SCK_PORT GPIOA #define SPI1_SCK_PIN GPIO_PIN_5 #define SPI1_SCK_AF GPIO_AF5_SPI1 #define SPI1_MISO_PORT GPIOA #define SPI1_MISO_PIN GPIO_PIN_6 #define SPI1_MISO_AF GPIO_AF5_SPI1 #define SPI1_MOSI_PORT GPIOA #define SPI1_MOSI_PIN GPIO_PIN_7 #define SPI1_MOSI_AF GPIO_AF5_SPI1 #define SPI1_CLOCK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() /* ============================================================================ * I2C Definitions * ============================================================================ */ #define I2C1_INSTANCE 0 #define I2C1_SCL_PORT GPIOB #define I2C1_SCL_PIN GPIO_PIN_6 #define I2C1_SCL_AF GPIO_AF4_I2C1 #define I2C1_SDA_PORT GPIOB #define I2C1_SDA_PIN GPIO_PIN_7 #define I2C1_SDA_AF GPIO_AF4_I2C1 #define I2C1_CLOCK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() /* ============================================================================ * ADC Definitions * ============================================================================ */ #define ADC1_INSTANCE 0 #define ADC1_CHANNEL_COUNT 6 #define ADC1_CH0_PORT GPIOA #define ADC1_CH0_PIN GPIO_PIN_0 #define ADC1_CH1_PORT GPIOA #define ADC1_CH1_PIN GPIO_PIN_1 #define ADC1_CH2_PORT GPIOA #define ADC1_CH2_PIN GPIO_PIN_2 #define ADC1_CH3_PORT GPIOA #define ADC1_CH3_PIN GPIO_PIN_3 #define ADC1_CLOCK_ENABLE() __HAL_RCC_ADC1_CLK_ENABLE() /* ============================================================================ * PWM/Timer Definitions * ============================================================================ */ #define PWM_TIMER_INSTANCE 0 #define PWM_TIMER TIM1 #define PWM_TIMER_CLOCK_ENABLE() __HAL_RCC_TIM1_CLK_ENABLE() #define PWM_TIMER_CHANNEL_COUNT 4 #define PWM_TIMER_PRESCALER 168 /* 1 MHz */ #define PWM_TIMER_PERIOD 1000 /* 1 kHz */ #define PWM_TIMER_IRQ TIM1_UP_TIM10_IRQn #define PWM_CH1_PORT GPIOA #define PWM_CH1_PIN GPIO_PIN_8 #define PWM_CH1_AF GPIO_AF1_TIM1 #define PWM_CH2_PORT GPIOA #define PWM_CH2_PIN GPIO_PIN_9 #define PWM_CH2_AF GPIO_AF1_TIM1 #define PWM_CH3_PORT GPIOA #define PWM_CH3_PIN GPIO_PIN_10 #define PWM_CH3_AF GPIO_AF1_TIM1 #define PWM_CH4_PORT GPIOA #define PWM_CH4_PIN GPIO_PIN_11 #define PWM_CH4_AF GPIO_AF1_TIM1 /* ============================================================================ * Watchdog Configuration * ============================================================================ */ #define WATCHDOG_INSTANCE 0 #define WATCHDOG_TIMEOUT_MS 100 #define WATCHDOG_WINDOW_MS 50 /* ============================================================================ * Board Functions * ============================================================================ */ void board_init(void); void board_clock_init(void); void board_gpio_init(void); void board_uart_init(void); void board_can_init(void); void board_spi_init(void); void board_i2c_init(void); void board_adc_init(void); void board_pwm_init(void); void board_watchdog_init(void); void board_watchdog_service(void); void board_led_on(uint8_t led); void board_led_off(uint8_t led); void board_led_toggle(uint8_t led); bool board_button_read(uint8_t button); void board_delay_ms(uint32_t ms); void board_delay_us(uint32_t us); float board_get_temperature(void); float board_get_voltage(void); #endif /* BOARD_H */