diff --git a/source/firmware/arch/stm32f4xx/board/stm32f4-discovery/include/stm32f4-discovery.h b/source/firmware/arch/stm32f4xx/board/stm32f4-discovery/include/stm32f4-discovery.h index 81faad3..e6a7408 100755 --- a/source/firmware/arch/stm32f4xx/board/stm32f4-discovery/include/stm32f4-discovery.h +++ b/source/firmware/arch/stm32f4xx/board/stm32f4-discovery/include/stm32f4-discovery.h @@ -13,15 +13,18 @@ #include "driver.h" #include "gpio.h" +#include "pwm.h" #include "timer.h" #include "uart.h" #include "ringbuffer.h" #include "sys_tick.h" #include "stm32f4xx.h" #include "stm32f4_gpio.h" +#include "stm32f4_pwm.h" #include "stm32f4_uart.h" #include "stm32_sys_tick.h" + // SYSTEM TICK static const enum stm32_sys_tick_time_base stm23_sys_tick_time_base = STM32_SYS_TICK_TIME_BASE_MS; @@ -36,6 +39,53 @@ static const struct loki_timer timer_1 = { &timer_fp }; +// PWM CHANNEL 4 +/* apb1 clock = 84MHz */ +/* period_reg = src_clk / presc / cnt_clk */ +/* 4199 = 84MHZ / (0 + 1) / 20kHz - 1 */ +static const TIM_TimeBaseInitTypeDef timer_4_cfg = { + .TIM_RepetitionCounter = 0x0000, + .TIM_Prescaler = 0, + .TIM_ClockDivision = TIM_CKD_DIV1, + .TIM_CounterMode = TIM_CounterMode_Up, + .TIM_Period = 4199 +}; + +static const TIM_OCInitTypeDef t4_output_compare_cfg = { + .TIM_OutputNState = TIM_OutputNState_Disable, + .TIM_OCNPolarity = TIM_OCPolarity_High, + .TIM_OCIdleState = TIM_OCIdleState_Reset, + .TIM_OCNIdleState = TIM_OCNIdleState_Set, + .TIM_OCMode = TIM_OCMode_PWM1, + .TIM_OCPolarity = TIM_OCPolarity_High, + .TIM_OutputState = TIM_OutputState_Enable, + .TIM_Pulse = 0 // Initiale Pulsweite in Millisekunden +}; + +static const GPIO_InitTypeDef port_cfg = { + .GPIO_Pin = GPIO_Pin_15, + .GPIO_Mode = GPIO_Mode_AF, + .GPIO_OType = GPIO_OType_PP, + .GPIO_PuPd = GPIO_PuPd_UP, + .GPIO_Speed = GPIO_Speed_100MHz, +}; + +static struct stm32f4_pwm str32f4_pwm = { + .timer = TIM4, + .timer_cfg = &timer_4_cfg, + .output_compare_cfg = &t4_output_compare_cfg, + .port = GPIOD, + .pin_src = GPIO_PinSource15, + .port_cfg = &port_cfg, + .channel = channel_4, +}; + +static const struct pwm pwm_ch4 = { + .arch_dep_device = &str32f4_pwm, + .fp = &stm32f4_pwm_fp, +}; + +// UART 1 static char console_linear_buffer[80]; static struct ringbuffer console_buffer = { console_linear_buffer, diff --git a/source/test/pwm/main.c b/source/test/pwm/main.c index b9150fa..f0aa726 100644 --- a/source/test/pwm/main.c +++ b/source/test/pwm/main.c @@ -16,55 +16,6 @@ #include "list.h" #include "shell.h" -#include "stm32f4xx.h" - -#include "pwm.h" -#include "stm32f4_pwm.h" - -/* apb1 clock = 84MHz */ -/* period_reg = src_clk / presc / cnt_clk */ -/* 4199 = 84MHZ / (0 + 1) / 20kHz - 1 */ -static const TIM_TimeBaseInitTypeDef timer_4_cfg = { - .TIM_RepetitionCounter = 0x0000, - .TIM_Prescaler = 0, - .TIM_ClockDivision = TIM_CKD_DIV1, - .TIM_CounterMode = TIM_CounterMode_Up, - .TIM_Period = 4199 -}; - -static const TIM_OCInitTypeDef t4_output_compare_cfg = { - .TIM_OutputNState = TIM_OutputNState_Disable, - .TIM_OCNPolarity = TIM_OCPolarity_High, - .TIM_OCIdleState = TIM_OCIdleState_Reset, - .TIM_OCNIdleState = TIM_OCNIdleState_Set, - .TIM_OCMode = TIM_OCMode_PWM1, - .TIM_OCPolarity = TIM_OCPolarity_High, - .TIM_OutputState = TIM_OutputState_Enable, - .TIM_Pulse = 0 // Initiale Pulsweite in Millisekunden -}; - -static const GPIO_InitTypeDef port_cfg = { - .GPIO_Pin = GPIO_Pin_15, - .GPIO_Mode = GPIO_Mode_AF, - .GPIO_OType = GPIO_OType_PP, - .GPIO_PuPd = GPIO_PuPd_UP, - .GPIO_Speed = GPIO_Speed_100MHz, -}; - -static struct stm32f4_pwm str32f4_pwm = { - .timer = TIM4, - .timer_cfg = &timer_4_cfg, - .output_compare_cfg = &t4_output_compare_cfg, - .port = GPIOD, - .pin_src = GPIO_PinSource15, - .port_cfg = &port_cfg, - .channel = channel_4, -}; - -static const struct pwm pwm_ch4 = { - .arch_dep_device = &str32f4_pwm, - .fp = &stm32f4_pwm_fp, -}; #define TH_STACK_SIZE 256 stack_t th_stack[TH_STACK_SIZE]; @@ -90,7 +41,6 @@ static void th_func(void *arg) int main(void) { thread_create(&th_ctx, th_stack, TH_STACK_SIZE, th_func, NULL, THREAD_PRIO_LOW); - schedule_start(); return 0;