452 lines
9.6 KiB
C
Executable File
452 lines
9.6 KiB
C
Executable File
/*! \file stm32f4-discovery.h
|
|
* \author tkl
|
|
* \date Mai 7, 2012
|
|
* \brief Header file of the board definition for the STM32F4-Discovery board.
|
|
*/
|
|
#ifndef BSP_STM32F4_DISCOVERY_H_
|
|
#define BSP_STM32F4_DISCOVERY_H_
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "stm32f4xx.h"
|
|
|
|
#include "pwm.h"
|
|
#include "stm32f4_pwm.h"
|
|
|
|
#include "uart.h"
|
|
#include "stm32f4_uart.h"
|
|
#include "ringbuffer.h"
|
|
|
|
#include "timer.h"
|
|
#include "stm32_sys_tick.h"
|
|
#include "sys_tick.h"
|
|
|
|
#include "gpio.h"
|
|
#include "stm32f4_gpio.h"
|
|
#include "driver.h"
|
|
|
|
// GPIO_C0
|
|
static const GPIO_InitTypeDef port_cfg_c0 = {
|
|
.Pin = GPIO_PIN_0,
|
|
.Mode = GPIO_MODE_OUTPUT_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
};
|
|
|
|
static const struct stm32f4_gpio stm32_f4_gpio_c0 = {
|
|
.port = GPIOC,
|
|
.pin = &port_cfg_c0,
|
|
};
|
|
|
|
static const struct gpio __gpio_c0 = {
|
|
(void*)&stm32_f4_gpio_c0,
|
|
&gpio_fp
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver gpio_c0 = {
|
|
#else
|
|
const struct driver gpio_c0 = {
|
|
#endif
|
|
DRIVER_TYPE_GPIO,
|
|
&__gpio_c0,
|
|
};
|
|
|
|
// GPIO_C1
|
|
static const GPIO_InitTypeDef port_cfg_c1 = {
|
|
.Pin = GPIO_PIN_1,
|
|
.Mode = GPIO_MODE_OUTPUT_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
};
|
|
|
|
static const struct stm32f4_gpio stm32_f4_gpio_c1 = {
|
|
.port = GPIOC,
|
|
.pin = &port_cfg_c1,
|
|
};
|
|
|
|
static const struct gpio __gpio_c1 = {
|
|
(void*)&stm32_f4_gpio_c1,
|
|
&gpio_fp
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver gpio_c1 = {
|
|
#else
|
|
const struct driver gpio_c1 = {
|
|
#endif
|
|
DRIVER_TYPE_GPIO,
|
|
&__gpio_c0,
|
|
};
|
|
|
|
// GPIO_C2
|
|
static const GPIO_InitTypeDef port_cfg_c2 = {
|
|
.Pin = GPIO_PIN_2,
|
|
.Mode = GPIO_MODE_OUTPUT_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
};
|
|
|
|
static const struct stm32f4_gpio stm32_f4_gpio_c2 = {
|
|
.port = GPIOC,
|
|
.pin = &port_cfg_c0,
|
|
};
|
|
|
|
static const struct gpio __gpio_c2 = {
|
|
(void*)&stm32_f4_gpio_c2,
|
|
&gpio_fp
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver gpio_c2 = {
|
|
#else
|
|
const struct driver gpio_c2 = {
|
|
#endif
|
|
DRIVER_TYPE_GPIO,
|
|
&__gpio_c2,
|
|
};
|
|
|
|
// GPIO_C3
|
|
static const GPIO_InitTypeDef port_cfg_c3 = {
|
|
.Pin = GPIO_PIN_3,
|
|
.Mode = GPIO_MODE_OUTPUT_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
};
|
|
|
|
static const struct stm32f4_gpio stm32_f4_gpio_c3 = {
|
|
.port = GPIOC,
|
|
.pin = &port_cfg_c3,
|
|
};
|
|
|
|
static const struct gpio __gpio_c3 = {
|
|
(void*)&stm32_f4_gpio_c3,
|
|
&gpio_fp
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver gpio_c3 = {
|
|
#else
|
|
const struct driver gpio_c3 = {
|
|
#endif
|
|
DRIVER_TYPE_GPIO,
|
|
&__gpio_c3,
|
|
};
|
|
|
|
// SYSTEM TICK
|
|
static const enum stm32_sys_tick_time_base stm23_sys_tick_time_base =
|
|
STM32_SYS_TICK_TIME_BASE_MS;
|
|
|
|
static const struct stm32_sys_tick stm32_sys_tick = {
|
|
.tick_time_base = &stm23_sys_tick_time_base,
|
|
.sys_tick_cb = NULL,
|
|
.sys_tick_cb_param = NULL,
|
|
};
|
|
|
|
static const struct loki_timer timer_1 = {
|
|
.arch_dep_device = (void*)&stm32_sys_tick,
|
|
.fp = &timer_fp
|
|
};
|
|
|
|
// PWM CHANNEL 4
|
|
/* apb1 clock = 84MHz */
|
|
/* period_reg = src_clk / presc / cnt_clk */
|
|
/* 4199 = 84MHZ / (0 + 1) / 20kHz - 1 */
|
|
static TIM_HandleTypeDef tim4_handle = {
|
|
.Instance = TIM4,
|
|
.Init.Prescaler = 0,
|
|
.Init.CounterMode = TIM_COUNTERMODE_UP,
|
|
.Init.Period = 4199,
|
|
.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1,
|
|
.Init.RepetitionCounter = 0,
|
|
};
|
|
|
|
static TIM_OC_InitTypeDef t4_output_compare_cfg = {
|
|
.OCMode = TIM_OCMODE_PWM1,
|
|
.Pulse = 0,
|
|
.OCPolarity = TIM_OCPOLARITY_HIGH,
|
|
.OCNPolarity = TIM_OCNPOLARITY_HIGH,
|
|
.OCFastMode = TIM_OCFAST_DISABLE,
|
|
.OCIdleState = TIM_OCIDLESTATE_SET,
|
|
.OCNIdleState = TIM_OCNIDLESTATE_SET
|
|
};
|
|
|
|
static TIM_MasterConfigTypeDef t4_master_cfg = {
|
|
.MasterOutputTrigger = TIM_TRGO_RESET,
|
|
.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE,
|
|
};
|
|
|
|
static const GPIO_InitTypeDef port_cfg_D15 = {
|
|
.Pin = GPIO_PIN_15,
|
|
.Mode = GPIO_MODE_AF_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
.Alternate = GPIO_AF2_TIM4,
|
|
};
|
|
|
|
static const struct stm32f4_gpio t4c4_gpio = {
|
|
.port = GPIOD,
|
|
.pin = &port_cfg_D15,
|
|
};
|
|
|
|
static struct stm32f4_pwm str32f4_pwm_4 = {
|
|
.pwm_gpio = &t4c4_gpio,
|
|
.timer_handle = &tim4_handle,
|
|
.output_compare_cfg = &t4_output_compare_cfg,
|
|
.master_cfg = &t4_master_cfg,
|
|
.channel = TIM_CHANNEL_4,
|
|
};
|
|
|
|
static const struct pwm pwm_ch4 = {
|
|
.arch_dep_device = &str32f4_pwm_4,
|
|
.fp = &stm32f4_pwm_fp,
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver pwm_4 = {
|
|
#else
|
|
const struct driver pwm_4 = {
|
|
#endif
|
|
DRIVER_TYPE_PWM,
|
|
&pwm_ch4,
|
|
};
|
|
|
|
// PWM Channel 3
|
|
static const GPIO_InitTypeDef port_cfg_D14 = {
|
|
.Pin = GPIO_PIN_14,
|
|
.Mode = GPIO_MODE_AF_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
.Alternate = GPIO_AF2_TIM4,
|
|
};
|
|
static const struct stm32f4_gpio stm32f4_pwm_t4c3_gpio = {
|
|
.port = GPIOD,
|
|
.pin = &port_cfg_D14,
|
|
};
|
|
|
|
static struct stm32f4_pwm str32f4_pwm_3 = {
|
|
.pwm_gpio = &stm32f4_pwm_t4c3_gpio,
|
|
.timer_handle = &tim4_handle,
|
|
.output_compare_cfg = &t4_output_compare_cfg,
|
|
.master_cfg = &t4_master_cfg,
|
|
.channel = TIM_CHANNEL_3,
|
|
};
|
|
|
|
static const struct pwm pwm_ch3 = {
|
|
.arch_dep_device = &str32f4_pwm_3,
|
|
.fp = &stm32f4_pwm_fp,
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver pwm_3 = {
|
|
#else
|
|
const struct driver pwm_3 = {
|
|
#endif
|
|
DRIVER_TYPE_PWM,
|
|
&pwm_ch3,
|
|
};
|
|
|
|
// PWM Channel 2
|
|
static const GPIO_InitTypeDef port_cfg_D13 = {
|
|
.Pin = GPIO_PIN_13,
|
|
.Mode = GPIO_MODE_AF_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
.Alternate = GPIO_AF2_TIM4,
|
|
};
|
|
static const struct stm32f4_gpio stm32f4_pwm_t4c2_gpio = {
|
|
.port = GPIOD,
|
|
.pin = &port_cfg_D13,
|
|
};
|
|
|
|
static struct stm32f4_pwm str32f4_pwm_2 = {
|
|
.pwm_gpio = &stm32f4_pwm_t4c2_gpio,
|
|
.timer_handle = &tim4_handle,
|
|
.output_compare_cfg = &t4_output_compare_cfg,
|
|
.master_cfg = &t4_master_cfg,
|
|
.channel = TIM_CHANNEL_2,
|
|
};
|
|
|
|
static const struct pwm pwm_ch2 = {
|
|
.arch_dep_device = &str32f4_pwm_2,
|
|
.fp = &stm32f4_pwm_fp,
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver pwm_2 = {
|
|
#else
|
|
const struct driver pwm_2 = {
|
|
#endif
|
|
DRIVER_TYPE_PWM,
|
|
&pwm_ch2,
|
|
};
|
|
|
|
// PWM Channel 1
|
|
static const GPIO_InitTypeDef port_cfg_D12 = {
|
|
.Pin = GPIO_PIN_12,
|
|
.Mode = GPIO_MODE_AF_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
.Alternate = GPIO_AF2_TIM4,
|
|
};
|
|
static const struct stm32f4_gpio stm32f4_pwm_t4c1_gpio = {
|
|
.port = GPIOD,
|
|
.pin = &port_cfg_D12,
|
|
};
|
|
|
|
static struct stm32f4_pwm str32f4_pwm_1 = {
|
|
.pwm_gpio = &stm32f4_pwm_t4c1_gpio,
|
|
.timer_handle = &tim4_handle,
|
|
.output_compare_cfg = &t4_output_compare_cfg,
|
|
.master_cfg = &t4_master_cfg,
|
|
.channel = TIM_CHANNEL_1,
|
|
};
|
|
|
|
static const struct pwm pwm_ch1 = {
|
|
.arch_dep_device = &str32f4_pwm_1,
|
|
.fp = &stm32f4_pwm_fp,
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver pwm_1 = {
|
|
#else
|
|
const struct driver pwm_1 = {
|
|
#endif
|
|
DRIVER_TYPE_PWM,
|
|
&pwm_ch1,
|
|
};
|
|
|
|
// PWM5 CHANNEL 2
|
|
/* apb1 clock = 84MHz */
|
|
/* period_reg = src_clk / presc / cnt_clk */
|
|
/* 1679 = 84MHZ / 1000 / 50Hz - 1 */
|
|
static TIM_HandleTypeDef tim5_handle = {
|
|
.Instance = TIM5,
|
|
.Init.Prescaler = 1000,
|
|
.Init.CounterMode = TIM_COUNTERMODE_UP,
|
|
.Init.Period = 1679,
|
|
.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1,
|
|
.Init.RepetitionCounter = 0,
|
|
};
|
|
|
|
static TIM_OC_InitTypeDef t5_output_compare_cfg = {
|
|
.OCMode = TIM_OCMODE_PWM1,
|
|
.Pulse = 840,
|
|
.OCPolarity = TIM_OCPOLARITY_HIGH,
|
|
.OCNPolarity = TIM_OCNPOLARITY_HIGH,
|
|
.OCFastMode = TIM_OCFAST_DISABLE,
|
|
.OCIdleState = TIM_OCIDLESTATE_SET,
|
|
.OCNIdleState = TIM_OCNIDLESTATE_SET
|
|
};
|
|
|
|
static TIM_MasterConfigTypeDef t5_master_cfg = {
|
|
.MasterOutputTrigger = TIM_TRGO_RESET,
|
|
.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE,
|
|
};
|
|
|
|
static const GPIO_InitTypeDef port_cfg_A1 = {
|
|
.Pin = GPIO_PIN_1,
|
|
.Mode = GPIO_MODE_AF_PP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Pull = GPIO_PULLUP,
|
|
.Alternate = GPIO_AF2_TIM5,
|
|
};
|
|
|
|
static const struct stm32f4_gpio t5c2_gpio = {
|
|
.port = GPIOA,
|
|
.pin = &port_cfg_A1,
|
|
};
|
|
|
|
static struct stm32f4_pwm str32f4_pwm5_c2 = {
|
|
.pwm_gpio = &t5c2_gpio,
|
|
.timer_handle = &tim5_handle,
|
|
.output_compare_cfg = &t5_output_compare_cfg,
|
|
.master_cfg = &t5_master_cfg,
|
|
.channel = TIM_CHANNEL_2,
|
|
};
|
|
|
|
static const struct pwm pwm5_ch2 = {
|
|
.arch_dep_device = &str32f4_pwm5_c2,
|
|
.fp = &stm32f4_pwm_fp,
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver pwm5_c2 = {
|
|
#else
|
|
const struct driver pwm5_c2 = {
|
|
#endif
|
|
DRIVER_TYPE_PWM,
|
|
&pwm5_ch2,
|
|
};
|
|
|
|
// UART 1
|
|
static const GPIO_InitTypeDef port_cfg_uart1 = {
|
|
.Pin = GPIO_PIN_6 | GPIO_PIN_7,
|
|
.Mode = GPIO_MODE_AF_PP,
|
|
.Pull = GPIO_PULLUP,
|
|
.Speed = GPIO_SPEED_FREQ_HIGH,
|
|
.Alternate = GPIO_AF7_USART1,
|
|
};
|
|
|
|
static const struct stm32f4_gpio stm32f4_uart1_gpio = {
|
|
.port = GPIOB,
|
|
.pin = &port_cfg_uart1,
|
|
};
|
|
|
|
static UART_HandleTypeDef stm32f4_discovery_uart1_handle = {
|
|
.Instance = USART1,
|
|
.Init.BaudRate = 115200,
|
|
.Init.WordLength = UART_WORDLENGTH_8B,
|
|
.Init.StopBits = UART_STOPBITS_1,
|
|
.Init.Parity = UART_PARITY_NONE,
|
|
.Init.Mode = UART_MODE_TX_RX,
|
|
.Init.HwFlowCtl = UART_HWCONTROL_NONE,
|
|
.Init.OverSampling = UART_OVERSAMPLING_16,
|
|
.pTxBuffPtr = NULL,
|
|
.TxXferSize = 0,
|
|
.TxXferCount = 0,
|
|
.pRxBuffPtr = NULL,
|
|
.RxXferSize = 0,
|
|
.RxXferCount = 0,
|
|
.hdmatx = NULL,
|
|
.hdmarx = NULL,
|
|
.Lock = HAL_UNLOCKED,
|
|
.gState = HAL_UART_STATE_RESET,
|
|
.ErrorCode = 0,
|
|
};
|
|
|
|
static const struct stm32f4_uart stm32f4_uart1 = {
|
|
.uart_gpio = &stm32f4_uart1_gpio,
|
|
.uart_handle = &stm32f4_discovery_uart1_handle,
|
|
};
|
|
|
|
static char console_linear_buffer[10];
|
|
static struct ringbuffer console_buffer = {
|
|
console_linear_buffer,
|
|
console_linear_buffer,
|
|
console_linear_buffer,
|
|
10,
|
|
0
|
|
};
|
|
|
|
static const struct uart __uart_1 = {
|
|
&stm32f4_uart1,
|
|
&stm32f4_uart_fp,
|
|
&console_buffer,
|
|
};
|
|
|
|
#ifdef TEST_APP
|
|
static const struct driver uart_1 = {
|
|
#else
|
|
const struct driver uart_1 = {
|
|
#endif
|
|
DRIVER_TYPE_UART,
|
|
&__uart_1,
|
|
};
|
|
|
|
//! \brief Setup the hardware of the stm32f4-discovery board.
|
|
void board_init(void);
|
|
|
|
#endif /* BSP_STM32F4_DISCOVERY_H_ */
|