summaryrefslogtreecommitdiff
path: root/Project/src
diff options
context:
space:
mode:
Diffstat (limited to 'Project/src')
-rw-r--r--Project/src/main.c134
1 files changed, 86 insertions, 48 deletions
diff --git a/Project/src/main.c b/Project/src/main.c
index bc9c4ac..2132d87 100644
--- a/Project/src/main.c
+++ b/Project/src/main.c
@@ -61,6 +61,7 @@
#include "indicate_modes_task.h"
#include "tsl_user.h"
#include "time.h"
+#include "stm32f0xx_usart.h"
/* Private typedefs ----------------------------------------------------------*/
@@ -70,75 +71,112 @@
// Задаем размеры кучи для каждой задачи отдельно
// - как правильно определить необходимый минимум для кучи задачи?
-#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 )
+#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 )
+#define STACK_SIZE_LED_DRIVER ((unsigned short) 70)
#endif
-#define STACK_SIZE_INDICATE_MODES ( (unsigned short) 250 )
+#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 usart1_init = {0};
+ usart1_init.USART_BaudRate = 115200;
+ usart1_init.USART_WordLength = USART_WordLength_8b;
+ usart1_init.USART_StopBits = USART_StopBits_1;
+ usart1_init.USART_Parity = USART_Parity_No;
+ usart1_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
+ usart1_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_Init(USART1, &usart1_init);
+ USART_Cmd(USART1, ENABLE);
+}
// ----------------------------------------------------------------------------
// Инициализация до создания задач
// ----------------------------------------------------------------------------
void InitAll ( void )
{
- SystemInit();
- InitLTimers ();
- NixieDriverInit ();
- LightSensorInit();
+ SystemInit();
+ USART1Init();
+ InitLTimers();
+ LightSensorInit();
+#if 0
+ NixieDriverInit();
+ HeadTaskInit();
+ IndicateModesInit();
+#endif
#ifdef LED_DRIVER
- LED_DriverInit ();
+ LED_DriverInit();
#endif
- TSL_user_Init ();
- TimeInit ();
- HeadTaskInit ();
- IndicateModesInit ();
- ButtonInit ();
+ TSL_user_Init();
+ TimeInit();
+ ButtonInit();
}
-BaseType_t TaskSuccess = NULL;
+static void TestUart(void *arg)
+{
+ (void) arg;
+ while (1) {
+ if (USART1->ISR & USART_ISR_FE) {
+ USART1->ICR &= USART_ICR_FECF;
+ }
+ if (USART1->ISR & USART_ISR_RXNE) {
+ const uint16_t data = USART_ReceiveData(USART1);
+ USART_SendData(USART1, data);
+ }
+ }
+}
+
+BaseType_t TaskSuccess;
// Главный цикл ------------------------------------------------------------- //
int main ()
{
- InitAll ();
-
- // Создаем задачи FreeRTOS ----------------------------------------------- //
-
- // ВНИМАНИЕ !!!
- // Необходимо проверять кучу при создании задачи! ( и очереди )
-
- // Если в программе используется подключаемая библиотека, которая использует
- // ОСРВ, то задача должна там и создаватья. То есть это нужно оформить в
- // в виде специальной функции
-
- 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 ( 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 );
-
- TaskSuccess = xTaskCreate ( NixieDriver_Task, "NixieDriver_Task", STACK_SIZE_NIXIE_DRIVER, NULL, tskIDLE_PRIORITY + 2, NULL );
- configASSERT( TaskSuccess );
-
+ 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 );
+ TaskSuccess = xTaskCreate(LED_Driver_Task, "LED_Driver_Task", STACK_SIZE_LED_DRIVER, NULL, tskIDLE_PRIORITY + 2, NULL);
+ configASSERT(TaskSuccess);
#endif
-
- vTaskStartScheduler (); // И запускаем диспетчер задач ( он же планировщик )
-
+ TaskSuccess = xTaskCreate(TestUart, "TestUart", 200, NULL, tskIDLE_PRIORITY + 2, NULL);
+ configASSERT(TaskSuccess);
+ vTaskStartScheduler(); // И запускаем диспетчер задач ( он же планировщик )
} // end of main