X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=Src%2Fmain.c;h=de59f78369fc054eb53e7c83b568cc3ba3b56503;hb=f06abb81f5f7d6bffa600b41e66cc0b3c5a727c6;hp=490e55606fe11db7d9c5d8b918188b38513bcecb;hpb=cffd7e087d148a4814279ba0f330a7bc079e187f;p=home-hw.git diff --git a/Src/main.c b/Src/main.c index 490e556..de59f78 100644 --- a/Src/main.c +++ b/Src/main.c @@ -41,6 +41,9 @@ #include "stm32f1xx_hal.h" /* USER CODE BEGIN Includes */ +#include "util.h" +#include "usb.h" +#include "app.h" /* USER CODE END Includes */ @@ -50,6 +53,7 @@ PCD_HandleTypeDef hpcd_USB_FS; /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ +struct usb usb; /* USER CODE END PV */ @@ -59,6 +63,7 @@ static void MX_GPIO_Init(void); static void MX_I2C1_Init(void); static void MX_I2C2_Init(void); static void MX_USB_PCD_Init(void); +static void MX_TIM4_Init(void); /* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/ @@ -93,26 +98,46 @@ int main(void) SystemClock_Config(); /* USER CODE BEGIN SysInit */ + usb_init(&usb, &hpcd_USB_FS); /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); + + // A hack to let USB host reset us + LL_GPIO_InitTypeDef gpio; + gpio.Pin = LL_GPIO_PIN_12 | LL_GPIO_PIN_13; + gpio.Mode = LL_GPIO_MODE_OUTPUT; + gpio.Speed = LL_GPIO_SPEED_FREQ_HIGH; + gpio.OutputType = LL_GPIO_OUTPUT_OPENDRAIN; + LL_GPIO_Init(GPIOA, &gpio); + LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_12); + LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_13); + LL_mDelay(1000); + MX_I2C1_Init(); MX_I2C2_Init(); MX_USB_PCD_Init(); + MX_TIM4_Init(); /* USER CODE BEGIN 2 */ + display_init(); + usb_start(&usb); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ + int cnt = 0; while (1) { + debug_printf("Counter = %d\n", cnt); + display_counter(cnt); LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin); - LL_mDelay(1000); + LL_mDelay(500); LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin); - LL_mDelay(1000); + LL_mDelay(500); + cnt++; /* USER CODE END WHILE */ @@ -259,6 +284,45 @@ static void MX_I2C2_Init(void) } +/* TIM4 init function */ +static void MX_TIM4_Init(void) +{ + + LL_TIM_InitTypeDef TIM_InitStruct; + LL_TIM_OC_InitTypeDef TIM_OC_InitStruct; + + /* Peripheral clock enable */ + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM4); + + /* TIM4 interrupt Init */ + NVIC_SetPriority(TIM4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); + NVIC_EnableIRQ(TIM4_IRQn); + + TIM_InitStruct.Prescaler = 7200; + TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; + TIM_InitStruct.Autoreload = 1000; + TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; + LL_TIM_Init(TIM4, &TIM_InitStruct); + + LL_TIM_DisableARRPreload(TIM4); + + LL_TIM_SetClockSource(TIM4, LL_TIM_CLOCKSOURCE_INTERNAL); + + TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_FROZEN; + TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE; + TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE; + TIM_OC_InitStruct.CompareValue = 0; + TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH; + LL_TIM_OC_Init(TIM4, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct); + + LL_TIM_OC_DisableFast(TIM4, LL_TIM_CHANNEL_CH1); + + LL_TIM_SetTriggerOutput(TIM4, LL_TIM_TRGO_RESET); + + LL_TIM_DisableMasterSlaveMode(TIM4); + +} + /* USB init function */ static void MX_USB_PCD_Init(void) { @@ -302,7 +366,7 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Pin = LED_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; - GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN; LL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); /**/