Top.Mail.Ru
Уведомления
Очистить все

[Закреплено] STM32 для начинающих

Страница 2 / 17
Aveal
(@aveal)
Top level Admin

@aleksej-6 Отлично! Рад, что все получилось )

ОтветитьЦитата
Создатель темы Размещено : 13.07.2022 14:15
(@nozyl)
Level 1

Доброго времени суток, решил перейти с arduino на stm32, и первое за что взялся сделать банальные часы.
Включил тактирование RTC, поставил вашу библиотеку segment_lcd. и пытаюсь вывести цифры часов:

HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
char str[DIGITS_NUM];
snprintf(str, DIGITS_NUM, "%d%d", sTime.Minutes, sTime.Seconds );
SEG_LCD_WriteString(str);

Проблема в том что sTime.Seconds имеет вид 1 2 3 4 (вместо 01 02 03 04) из за чего становился проблематично выводить их на прямую.
К тому же я не совсем понимаю как работает SEG_LCD_WriteString. Посоветуйте пожалуйста как привести строку к нужному виду, спасибо.

ОтветитьЦитата
Размещено : 16.08.2022 08:31
Aveal
(@aveal)
Top level Admin

@nozyl доброго! Вот набросал, дисплея нет под рукой проверить, но думаю, все нормально будет:

HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);

char str[DIGITS_NUM + 2];
snprintf(str, DIGITS_NUM + 2, "%02d.%02d", sTime.Minutes, sTime.Seconds);
ОтветитьЦитата
Создатель темы Размещено : 16.08.2022 10:50
(@nozyl)
Level 1

@aveal Большое спасибо, работает.
%02d означает "форматировать целое число с двумя цифрами, оставляя его заполнением нулями"
я этого не знал, теперь осталась прикрепить кнопку для настройки часов. Опять же воспользуюсь вашей библиотекой button.

ОтветитьЦитата
Размещено : 16.08.2022 11:09
Aveal
(@aveal)
Top level Admin

@nozyl button уже не моя, с сообщества ) Но там все четко, должно работать. Если что пиши, разберемся с проблемами 👍 

ОтветитьЦитата
Создатель темы Размещено : 16.08.2022 11:16
(@nozyl)
Level 1

Прикрепил кнопку вот таким образом, думаю что так не делать правильно, но она работает 😀. Не могу разобраться как в библиотеке segment_lcd заставить точку мигать.

if (BUTTON_GetAction(BUTTON_SETTINGS) == BUTTON_SHORT_PRESS)
{
	sTime.Seconds++;
	if(sTime.Seconds >=60)
	{
		sTime.Minutes ++;
		sTime.Seconds = 0;
	}
	HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
} 
ОтветитьЦитата
Размещено : 18.08.2022 08:27
(@nozyl)
Level 1

Вопрос с точкой решил... но максимально глупо =)

if(sTime.Seconds % 2 == 0)
{
	snprintf(str, DIGITS_NUM +2, "%02d%02d", sTime.Minutes, sTime.Seconds );
}
else
{
	snprintf(str, DIGITS_NUM +2, "%02d.%02d", sTime.Minutes, sTime.Seconds );
}
ОтветитьЦитата
Размещено : 18.08.2022 12:45
Aveal
(@aveal)
Top level Admin

@nozyl Можно независимо от формирования строки принудительно гасить сегмент точки, когда она не нужна.

ОтветитьЦитата
Создатель темы Размещено : 18.08.2022 13:52
(@aleksej-6)
Level 3

Здравствуйте !

Ни как не могу разобраться. Хочу организовать структуру для хранения данных (с датчика).

В main.c написал :

struct // создаём ярлык
{
uint16_t angle_z, height_901;
} struct_wt_901;

 

В main.c могу и записать в неё и прочитать.  

struct_wt_901.angle_z = angle;  // структура

angle= struct_wt_901.angle_z ;

 

Вопрос:

Не могу сделать видимой эту структуру во всей программе. 

Определение extern не помогает ...

Может надо структуру по другому организовывать ? Или определение в заголовочном файле (*.h) писать.

Как только не пробовал делать не выходит .

 

ОтветитьЦитата
Размещено : 21.08.2022 12:12
(@eduard)
Level 4 Moderator

По моему так:

struct wt_901
{
  uint16_t angle_z, height_901;
} ;

struct  wt_901 struct_wt_901;

В другом файле

extern struct wt_901 struct_wt_901;

 

 

ОтветитьЦитата
Размещено : 21.08.2022 14:22
(@aleksej-6)
Level 3

@eduard 

Прошу прощения за мою безграмотность, а что бы прочитать или записать в эту структуру в другом файле как надо написать?

 

В другом файле:

extern struct wt_901 struct_wt_901;

а дальше, что бы прочитать: 

uint16_t temp = struct_wt_901.angle_z; - так ошибку пишет 

 

 

ОтветитьЦитата
Размещено : 21.08.2022 15:22
(@eduard)
Level 4 Moderator

@aleksej-6 А какая ошибка?

ОтветитьЦитата
Размещено : 21.08.2022 15:43
(@aleksej-6)
Level 3

@eduard 

invalid use indefinite type "struct_wt_901"

ОтветитьЦитата
Размещено : 21.08.2022 15:51
(@eduard)
Level 4 Moderator

@aleksej-6 Вот эта строка где написана?

struct  wt_901 struct_wt_901;

Она не видидит это определение. Значит оно находится где то не там.

ОтветитьЦитата
Размещено : 21.08.2022 16:00
(@aleksej-6)
Level 3

@eduard 

Да, похоже на то ..

 

В main.c :

/* USER CODE BEGIN PV */

extern struct wt_901 struct_wt_901;

 

Пробовал и в не только в этом месте..

Чего то у меня не то в моей программе, наверное. 

(пол второго ночи, завтра дальше надо будет думать, Спасибо! ) 

ОтветитьЦитата
Размещено : 21.08.2022 16:32
Страница 2 / 17
Поделиться: