ca13734bf0
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.
228 lines
9.2 KiB
C
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 */
|