summaryrefslogtreecommitdiff
path: root/Project/src/main.c
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-03-05 20:20:45 +0300
committerOxore <oxore@protonmail.com>2023-03-05 20:20:45 +0300
commitea807de65b0485ac58b6eae576209c64d4d5c4e9 (patch)
treeb4264d20e1d700cfd9e0ece9d847a825dd1dfc03 /Project/src/main.c
parentdd01e7ed22cea652061f0d12cecf929e04b285e9 (diff)
Split app code and third party libraries
Diffstat (limited to 'Project/src/main.c')
-rw-r--r--Project/src/main.c289
1 files changed, 0 insertions, 289 deletions
diff --git a/Project/src/main.c b/Project/src/main.c
deleted file mode 100644
index aa8c111..0000000
--- a/Project/src/main.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/**
- ******************************************************************************
- * @file STM32L152_Ex01_3TKeys_EVAL\src\main.c
- * @author MCD Application Team
- * @version V1.1.0
- * @date 24-February-2014
- * @brief Basic example of how to use the STMTouch Driver.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
- *
- * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.st.com/software_license_agreement_liberty_v2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************
- */
-
-/*
- Здесь необходимо создать большой комментарий о характеристиках железа МК. Или
-же лучше создать отдельный файл и сделать на него ссылку. Кстати, такой файл
-создает программа STM32CubeMX.
-
-И вообще, нужно создать глобальную папку проекта, где будет лежать все по
-полочкам ( схема, программа, текстовые файлы, документация и тд )
-*/
-
-// Это программа для версии NixieClock_v2, которая является модифицированной версией предыдущей
-// NixieLUT
-
-/* Includes ------------------------------------------------------------------*/
-#include "time.h"
-#include "main.h"
-
-// FreeRTOS includes
-#include "FreeRTOS.h"
-#include "task.h"
-#include "queue.h"
-#include "semphr.h"
-
-#include "ltimers.h"
-#include "head_task.h"
-#include "button_task.h"
-#include "button_handler.h"
-#include "nixie_driver_task.h"
-#include "light_sensor_task.h"
-
-#ifdef LED_DRIVER
-#include "led_driver_task.h"
-#endif
-
-#include "indicate_modes_task.h"
-#include "tsl_user.h"
-#include "time.h"
-#include "stm32f0xx_usart.h"
-
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-
-// Задаем размеры кучи для каждой задачи отдельно
-// - как правильно определить необходимый минимум для кучи задачи?
-
-#define STACK_SIZE_HEAD ((unsigned short) 230)
-#define STACK_SIZE_NIXIE_DRIVER ((unsigned short) 80)
-#define STACK_SIZE_BUTTON ((unsigned short) 200)
-#define STACK_SIZE_LIGHT_SENSOR ((unsigned short) 70)
-#ifdef LED_DRIVER
-#define STACK_SIZE_LED_DRIVER ((unsigned short) 70)
-#endif
-#define STACK_SIZE_INDICATE_MODES ((unsigned short) 250)
-
-/* Private functions prototype ---------------------------------------------- */
-
-static void USART1Init(void)
-{
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- USART_InitTypeDef usart_init = {0};
- usart_init.USART_BaudRate = 115200;
- usart_init.USART_WordLength = USART_WordLength_8b;
- usart_init.USART_StopBits = USART_StopBits_1;
- usart_init.USART_Parity = USART_Parity_No;
- usart_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_Init(USART1, &usart_init);
- USART_Cmd(USART1, ENABLE);
-}
-
-static void USART4Init(void)
-{
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART4, ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_4);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_4);
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- USART_InitTypeDef usart_init = {0};
- usart_init.USART_BaudRate = 9600;
- usart_init.USART_WordLength = USART_WordLength_8b;
- usart_init.USART_StopBits = USART_StopBits_1;
- usart_init.USART_Parity = USART_Parity_No;
- usart_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_Init(USART4, &usart_init);
- USART_Cmd(USART4, ENABLE);
-}
-
-static void WIFI_IO_GPIOInit(void)
-{
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_SetBits(GPIOB, GPIO_Pin_0); // WIFI_EN
- GPIO_ResetBits(GPIOA, GPIO_Pin_15); // WIFI_IO0
-}
-
-static void USART3Init(void)
-{
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_4);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_4);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_4);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_4);
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- USART_InitTypeDef usart_init = {0};
- usart_init.USART_BaudRate = 115200;
- usart_init.USART_WordLength = USART_WordLength_8b;
- usart_init.USART_StopBits = USART_StopBits_1;
- usart_init.USART_Parity = USART_Parity_No;
- usart_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_RTS_CTS;
- USART_Init(USART3, &usart_init);
- USART_Cmd(USART3, ENABLE);
-}
-
-// ----------------------------------------------------------------------------
-// Инициализация до создания задач
-// ----------------------------------------------------------------------------
-void InitAll ( void )
-{
- SystemInit();
- WIFI_IO_GPIOInit();
- USART1Init();
- USART3Init();
- USART4Init();
- InitLTimers();
- LightSensorInit();
-#if 0
- NixieDriverInit();
- HeadTaskInit();
- IndicateModesInit();
-#endif
-#ifdef LED_DRIVER
- LED_DriverInit();
-#endif
- TSL_user_Init();
- TimeInit();
- ButtonInit();
-}
-
-static void TestUart(void *arg)
-{
- (void) arg;
- while (1) {
- if (USART3->ISR & USART_ISR_RXNE) {
- const uint16_t data = USART_ReceiveData(USART3);
- USART_SendData(USART1, data);
- }
- if (USART1->ISR & USART_ISR_RXNE) {
- const uint16_t data = USART_ReceiveData(USART1);
- USART_SendData(USART3, data);
- }
- }
-}
-
-BaseType_t TaskSuccess;
-
-// Главный цикл ------------------------------------------------------------- //
-int main ()
-{
- InitAll ();
- // Создаем задачи FreeRTOS ----------------------------------------------- //
-
- // ВНИМАНИЕ !!!
- // Необходимо проверять кучу при создании задачи! ( и очереди )
-
- // Если в программе используется подключаемая библиотека, которая использует
- // ОСРВ, то задача должна там и создаватья. То есть это нужно оформить в
- // в виде специальной функции
- TaskSuccess = xTaskCreate(Button_Task, "Button_Task", STACK_SIZE_BUTTON, NULL, tskIDLE_PRIORITY + 2, NULL);
- configASSERT(TaskSuccess);
- TaskSuccess = xTaskCreate(LightSensor_Task, "LightSensor_Task", STACK_SIZE_LIGHT_SENSOR, NULL, tskIDLE_PRIORITY + 2, NULL);
- configASSERT(TaskSuccess);
-#if 0
- TaskSuccess = xTaskCreate(Head_Task, "Head_Task", STACK_SIZE_HEAD, NULL, tskIDLE_PRIORITY + 2, NULL);
- configASSERT(TaskSuccess);
- TaskSuccess = xTaskCreate(IndicateModes_Task, "IndicateModes_Task", STACK_SIZE_INDICATE_MODES, NULL, tskIDLE_PRIORITY + 2, NULL);
- configASSERT(TaskSuccess);
- TaskSuccess = xTaskCreate(NixieDriver_Task, "NixieDriver_Task", STACK_SIZE_NIXIE_DRIVER, NULL, tskIDLE_PRIORITY + 2, NULL);
- configASSERT(TaskSuccess);
-#endif
-#ifdef LED_DRIVER
- TaskSuccess = xTaskCreate(LED_Driver_Task, "LED_Driver_Task", STACK_SIZE_LED_DRIVER, NULL, tskIDLE_PRIORITY + 2, NULL);
- configASSERT(TaskSuccess);
-#endif
- TaskSuccess = xTaskCreate(TestUart, "TestUart", 200, NULL, tskIDLE_PRIORITY + 2, NULL);
- configASSERT(TaskSuccess);
- vTaskStartScheduler(); // И запускаем диспетчер задач ( он же планировщик )
-} // end of main
-
-
-
-#ifdef USE_FULL_ASSERT
-/**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
-void assert_failed ( uint8_t* file, uint32_t line )
-{
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
-
- /* Infinite loop */
- for (;;)
- {
- }
-}
-#endif
-
-
-// Специальные ф-ии FreeRTOS ------------------------------------------------ //
-void vApplicationMallocFailedHook ( void ) { for( ;; ); }
-void vApplicationStackOverflowHook ( TaskHandle_t pxTask, char *pcTaskName ) { for( ;; ); }
-void vApplicationIdleHook ( void ) { }
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/