


//инициализация дисплея LCD
InitLCD(ArrIntLCD);
/*
//включим курсор мограющий
DisplayOnOffLCD(1, 1, 1);
//вывод символов на экран
SendByte2LCD('A',1);
SendByte2LCD('B',1);
SendByte2LCD('C',1);
*/
print2LCD("Hello", 0, 5);
print2LCD("world", 1, 5);
while (1)
{
if(event_5s_flag==1)
{//наступило событие для тяжелой обработки - передачи в UAR
sprintf(str_out, "time event\r\n"); //строка послыки
Size_out = strlen(str_out); //размер строки
HAL_UART_Transmit(&huart2, str_out, Size_out, 10); //посылаем ответ в компьютер
event_5s_flag=0; //сбросим флаг - обработали событие
}

/*
* lcd.h
*
* Created on: 13 нояб. 2019 г.
* Author: Electronics_5
*/
#ifndef INC_LCD_H_
#define INC_LCD_H_
#include "stm32l4xx_hal.h"
void SendByte2LCD(uint8_t byte, uint8_t data_command);
void InitLCD(uint8_t *ArrIntLCD);
void ClearLCD(void);
void ReturnHomeLCD(void);
void EntryModeSetLCD(uint8_t I_D, uint8_t Shift);
void DisplayOnOffLCD(uint8_t D, uint8_t C, uint8_t B);
void CursorDisplayShiftLCD(uint8_t S_C, uint8_t R_L);
void FunctionSetLCD(uint8_t DL, uint8_t N, uint8_t F);
void SetDDRAMAddressLCD(uint8_t Address);
void SetCursorLCD(uint8_t row, uint8_t column);
void print2LCD(char * str, uint8_t row, uint8_t column);
//массив шаблонных кодов команд для инииализации LCD
uint8_t ArrIntLCD[]={0x33, 0x32, 0x08, 0x28, 0x06, 0x01, 0x0C};
#endif /* INC_LCD_H_ */




//событие "раз в 1 сек"
#define HTIM1_EVENT_1s 1000
volatile int32_t htim1_event_1s_count = HTIM1_EVENT_1s; //счетчик тиков таймера для полуения события раз в 1 с
volatile uint8_t event_1s_flag = 0; //флаг события - изначально событие не установленно
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1)
{//прерывание из таймера TIM1 - настроен на обновление раз в 1 мс

//генерируем событие на 1 секунд
htim1_event_1s_count--; //уменьшаем счетчик для события
if(htim1_event_1s_count==0)
{//счетчик достиг конуа - генерим событие
htim1_event_1s_count = HTIM1_EVENT_1s; //установим счетчик в изначальное состояние
event_1s_flag = 1; //установим флаг события
} 
while (1)
{
if(event_5s_flag==1)
{//наступило событие для тяжелой обработки - передачи в UAR
sprintf(str_out, "time event\r\n"); //строка послыки
Size_out = strlen(str_out); //размер строки
HAL_UART_Transmit(&huart2, str_out, Size_out, 10); //посылаем ответ в компьютер
event_5s_flag=0; //сбросим флаг - обработали событие
}
if(event_1s_flag==1)
{//наступило событие "раз в 1 сек"
sec_counter++ ; //считаем секунды
if(sec_counter>9999)
sec_counter=0; //превысили передел - счет сначала
/*
char str_sec[6];
sprintf(str_sec, "%04d", sec_counter);
print2LCD(str_sec, 1, 1);
*/
event_1s_flag=0; //сбросим флаг - обработали событие
}

if(event_1s_flag==1)
{//наступило событие "раз в 1 сек"
sec_counter++ ; //считаем секунды
if(sec_counter>9999)
sec_counter=0; //превысили передел - счет сначала
/*
char str_sec[6];
sprintf(str_sec, "%04d", sec_counter);
print2LCD(str_sec, 1, 1);
*/
event_1s_flag=0; //сбросим флаг - обработали событие
}
if(event_250ms_flag==1)
{//наступило событие "раз в 250 мс"
char str_sec[15];
sprintf(str_sec, "sec count=%04d", sec_counter);
if(column>0)
print2LCD(" ", 1, column-1);//запись пробела очистки в колонку перед выводом новой строки
print2LCD(str_sec, 1, column);//вывод новой строки
column++;//увеличиваем номер колонки
if(column>16)
column=0; //зацикливаем номер колонки
event_250ms_flag=0; //сбросим флаг - обработали событие
}
/*
if ( HAL_UART_Receive(&huart2, pData, Size, 10) == HAL_OK) // ждем пока не примем из UART Size-количество символов (один) блокирующий режим !!!!!
{// приняли байт
str_in[idx++]=pData[0]; //копируем вновь принятый символ в новое место входного буфера
if(idx==SIZE_INPUT-1) //если превысили размер входного буфера - то начнем с его начала
idx=0;
| Стартуем! |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Дальше |
| Проверить |
| Узнать результат |
| Пройти еще раз |
| Пройти еще раз |
| Пройти еще раз |