Files
root ca13734bf0 Add full automotive RTOS project
Add kernel (Cortex-M0/M3/M4, Tricore, S32K, RISC-V ports), drivers,
middleware (CAN stack, diagnostics, safety), applications, board
support, build/test tooling, and documentation.
2026-08-23 03:35:29 -04:00

228 lines
9.2 KiB
C

/**
* @file board.h
* @brief STM32F407 Discovery board definitions
*/
#ifndef BOARD_H
#define BOARD_H
#include <stdint.h>
#include <stdbool.h>
#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 */