STM32F103 & Arduino IDE

nik182
Offline
Зарегистрирован: 04.05.2015

Я с 1602 столкнулся в начале изучения stm. С тех пор много воды утекло. А ты, как всегда, только словеса развешиваешь ни листинга в доказательство, ни схемы. Можешь хотя бы сформулировать в чем я не прав? Конкретно так. Без эмоций. За точным определением атомарности можешь в wiki сходить или куда ещё, если сам не знаешь что такое атомарность. По крайней мере там смысл атомарности не далеко от того что я описал. Так и с остальным. Напиши несколько строк атомарной установки нулевых битов порта?   

ssss
Offline
Зарегистрирован: 01.07.2016

nik182 пишет:

Я с 1602 столкнулся в начале изучения stm. С тех пор много воды утекло.

Не смеши... что в них изменилось за это время???

Я их цеплял ещё на ПИК16... если знаешь что это такое...

Цитата:

А ты, как всегда, только словеса развешиваешь ни листинга в доказательство, ни схемы.

В доказательство чего... что ты облажался??? )))))))

Вот оно мне так надо... это тебе надо...

Цитата:

Можешь хотя бы сформулировать в чем я не прав? Конкретно так. Без эмоций.

Скажи честно... ты мои посты ваще не читаешь??? А то ты по своему унылому троллингу и до 0 лэвэла не дотягиваешь...

Цитата:

За точным определением атомарности можешь в wiki сходить или куда ещё, если сам не знаешь что такое атомарность. По крайней мере там смысл атомарности не далеко от того что я описал.

Не важно что ты описал и как... важно что ты понял и как это применил... Это хоть не подлежит обсуждению??? Не???

nik182
Offline
Зарегистрирован: 04.05.2015

Опять одни слова. На пике у меня есть прибор, который в реестр средств измерения включен ещё в 98 году. Там тоже 1602 стоит. 

tesak47
Offline
Зарегистрирован: 22.01.2015

Здравствуйте уважаемые форумчане!

Работаю учителем. С ребенком готовим проект bluetooth часы - будильник на stm32f103. С этой платкой познакомился месяц назад. С ардуино уверенно обращаюсь. Так вот никак не могу запустить на ней RTC. В смысле они работают, только отстают неприлично много. Подключал батарею, прошивал пример от встроенной библиотеки <RTClock.h>... результата нет.

Часы то тикают то не тикают, если поднести руку к плате или дотронусь до кварца то начинают идти.

Почитав форум нашел похожую проблему. Но хочется убедиться что все делаю правильно. Очень прошу друзья залить скетч на плату и проверить ход часов.

#include <EEPROM.h>
#include <RTClock.h>
#define LED_PIN PC13
#define ALARM_LED PA7
#define BUTTON PA9

RTClock rt (RTCSEL_LSE);
unsigned int alarmSet, sunsetSet, pwmSet, inData;
unsigned long prevTime, timeSet;
byte h, m, s, hS, mS, sS, checker, c;
byte hA = 8;
byte mA = 30;
byte sA = 0;

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  Serial.println();
  Serial.println("HELLO");
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON, INPUT_PULLDOWN);
  digitalWrite(LED_PIN, 1);
  pinMode(ALARM_LED, PWM);
  pwmWrite(ALARM_LED, 0);
  rt.attachSecondsInterrupt(blink);
}

void loop() {
  if (Serial2.available() > 0) {
    Serial2.setTimeout(10);
    String str = Serial2.readString();
    str.trim();
    checker = str.substring(0, 1).toInt();
    str = str.substring(1);
    inData = str.toInt();
    if (inData > 500000) {
      return;
    }
    Serial.print("incoming data: ");
    Serial.print(str);
    Serial.print(", ");
    if (checker == 1) {
      rt.setTime(inData);
      h = inData / 3600;
      m = (inData - h * 3600) / 60;
      s = inData - h * 3600 - m * 60;
      Serial2.print(h);
      Serial2.print(":");
      Serial2.print(m);
    }
    if (checker == 2) {
      hA = inData / 3600;
      mA = (inData - hA * 3600) / 60;
      sA = inData - hA * 3600 - mA * 60;
      Serial.print("alarm is set: ");
      Serial.print(hA);
      Serial.print(":");
      Serial.println(mA);
    }
    if (checker == 3) {
      hS = inData / 3600;
      mS = (inData - hS * 3600) / 60;
      sS = inData - hS * 3600 - mS * 60;
      Serial.print("sunset is set: ");
      Serial.print(hS);
      Serial.print(":");
      Serial.println(mS);
    }
    if (checker == 4) {
      pwmSet = inData;
      pwmWrite(ALARM_LED, pwmSet);
      Serial.println(inData);
    }
  }
}
  
void rtc() {
  h = rt.hour();
  m = rt.minute();
  s = rt.second();
  if (h == hA && m == mA) {
    Serial.println("alarm!!!");
    for (pwmSet; pwmSet < 65535; pwmSet++) {
      pwmWrite(ALARM_LED, pwmSet);
      if (digitalRead(BUTTON) == 1) {
        pwmSet = 0;
        pwmWrite(ALARM_LED, pwmSet);
        break;
      }
      delay(1);
    }
  }
  if (h == hS && m == mS && pwmSet > 0) {
    Serial.print("sunset!!!");
    for (pwmSet; pwmSet > 0; pwmSet--) {
      pwmWrite(ALARM_LED, pwmSet);
      if (digitalRead(BUTTON) == 1) {
        pwmSet = 0;
        pwmWrite(ALARM_LED, pwmSet);
        break;
      }
      delay(1);
    }
  }
}
void blink () {
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));
  rtc();
  Serial.print(h);
  Serial.print(":");
  Serial.print(m);
  Serial.print(":");
  Serial.println(s);
}

А это пример из родной библиотеки:

#include <RTClock.h>

RTClock rt (RTCSEL_LSE); // initialise
uint32 tt; 

#define LED_PIN PB1

// This function is called in the attachSecondsInterrpt
void blink () 
{
 digitalWrite(LED_PIN,!digitalRead(LED_PIN));
}

void setup() 
{
  pinMode(LED_PIN, OUTPUT);
  
  rt.attachSecondsInterrupt(blink);// Call blink
}



void loop() 
{
  
  if (rt.getTime()!=tt)
  {
    tt = rt.getTime();
    
    Serial.print("time is: ");
    Serial.println(tt);
  }
}

 

 

b707
Онлайн
Зарегистрирован: 26.05.2017

tesak47 пишет:

Часы то тикают то не тикают, если поднести руку к плате или дотронусь до кварца то начинают идти.

раз реагируют на руку - проблема не программная, а аппаратная. У меня на двух платах из шести было ровно то же самое. Оказалось, был не пропаян часовой кварц , вот он:

просто аккуратно паяльником пропаиваете его 4 ножки - и часы пойдут

nik182
Offline
Зарегистрирован: 04.05.2015

А у меня пришло 5 штук и у всех не работали часовые кварцы. Пришлось подпаивать свои кварцы прямо по верх на ноги. 

b707
Онлайн
Зарегистрирован: 26.05.2017

nik182 пишет:

А у меня пришло 5 штук и у всех не работали часовые кварцы. Пришлось подпаивать свои кварцы прямо по верх на ноги. 

а точно они не работали? - может просто не припаяны, как у меня?

nik182
Offline
Зарегистрирован: 04.05.2015

Точно. Первым делом пропаял. Выпаять не смог. Подлезть паяльником сразу к четырём ногам не получается. Подпаял просто круглые бочёнки часовых кварцев к ногам и положил сверху. Теперь красивая композиция из двух кварцев разных типоразмеров. И что то мне говорит, что в тех, что на плате были изначально, в корпусах вообще не было кварцев. После подпайки второго работает совершенно штатно, не мешает. Такой китайский экономичный вариант. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А чо, на BluePill есть RTC встроенный?  Прям с кварцем? 

b707
Онлайн
Зарегистрирован: 26.05.2017

DetSimen пишет:

А чо, на BluePill есть RTC встроенный?  Прям с кварцем? 

да, и вполне работает.

Я его использую в часах в моем единственном проекте на Амперке - "Офисные часы на матрицах"

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

О_О  пора доставать из пыльного мешка свои STM-ки да щюпать как следовает, а не наскоками. 

nik182
Offline
Зарегистрирован: 04.05.2015

И даже нога (крайняя) под батарейку литиевую выведена. Я тут из стола как то достал платку к которой примерно пол года литиевая батарейка была подключена. Время убежало секунд на 30. Не так плохо за пол года, но тут вопросы к кварцу. Ещё RTC содержит 42 16-битных регистра, которые можно использовать как память, которая сохраняется, пока батарейка подключена. Не eeprom конечно, но что то хранить можно.  

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

nik182 пишет:

Ещё RTC содержит 42 16-битных регистра, которые можно использовать как память, которая сохраняется, пока батарейка подключена.

Да ты прям для меня открываешь неизведанные горизонты. О_О   Спасибо.  

b707
Онлайн
Зарегистрирован: 26.05.2017

nik182 пишет:

Не eeprom конечно, но что то хранить можно.  

ну. с еепром-то на СТМ никаких проблем нет - библиотека ЕЕПРОМ эмулируется через флеш, места навалом

nik182
Offline
Зарегистрирован: 04.05.2015

Извини, я не хотел горизонты. RTC в stm32f1 сильно кастрированный. Практически только секунды считает. Всё остальное самому приходится пересчитывать.  

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

nik182 пишет:

Извини, я не хотел горизонты. RTC в stm32f1 сильно кастрированный. Практически только секунды считает. Всё остальное самому приходится пересчитывать.  

Дак вот вапще ничего страшного.  Я вообще даже не знал, что и это возможно.  Наерна, засяду за книшки по STM, самому аш интересно стало.  Благодарю.  

ВН
Offline
Зарегистрирован: 25.02.2016

 С полгода назад ST начала свободно распространять STM32CubeIDE, в сети сейчас вроде уже достаточно материала про это дело.

 

 

nik182
Offline
Зарегистрирован: 04.05.2015

Книжки конечно хорошо. Только вот индийцы уже практически всё написали. Всю инициализацию периферии можно просто по умолчанию доверить им. Если конечно каких то уж совсем тонкостей душа захочет, то придётся по мануалам полазить. А так поставить stm32cubemx, выбрать процессор, среду, периферию с режимами и нажать кнопку генерация кода. Получим несколько файлов проекта, где в main останется дописать свой функционал. Тулчейн от http://www.stm32duino.com/ кушает нормально эти файлы. 

 После установки stm32cubemx в папке юзера открывается папка c:\Users\*****\STM32Cube\Repository\STM32Cube_FW_F1_V1.8.0\  в которой много интересного. В частности примеры использования периферии в конкретных задачах. Например c:\Users\*****\STM32Cube\Repository\STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Examples\UART\ пример как заставить printf печатать в uart.    

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ВН пишет:

 С полгода назад ST начала свободно распространять STM32CubeIDE, в сети сейчас вроде уже достаточно материала про это дело.

была 1.0, сейчас вроде 1.2 и кайло не нужен, ограничений по коду нет )))

(st-stm32cubeide_1.2.0_5034_20200108_0926_x86_64.exe)

ВН
Offline
Зарегистрирован: 25.02.2016

ua6em пишет:

была 1.0, сейчас вроде 1.2 и кайло не нужен, ограничений по коду нет )))

(st-stm32cubeide_1.2.0_5034_20200108_0926_x86_64.exe)

Это да, и stm32cubemx, о котором выше писал nik182, туда уже интегрирован + библиотека HAL.

 

mixail844
Offline
Зарегистрирован: 30.04.2012

Имхо, лучше пользоваться связкой CubeMX32 + Atollic True Studio 9.3, шустрее и стабильнее работает в дебаге чем cubeide 1.0 (1.2 не пробывал, но по release notes там нет удобных плагинов для работы с freertos из коробки, так же встроенный в cubeide генератор как то хуже работает - если помню правильно: перезаписывает файлы самого проекта тем самым удаляя вручную добавленные папки в include directories)

nik182
Offline
Зарегистрирован: 04.05.2015

mixail844 пишет:
Имхо, лучше пользоваться связкой CubeMX32 + Atollic True Studio 9.3, шустрее и стабильнее работает в дебаге чем cubeide 1.0 (1.2 не пробывал, но по release notes там нет удобных плагинов для работы с freertos из коробки, так же встроенный в cubeide генератор как то хуже работает - если помню правильно: перезаписывает файлы самого проекта тем самым удаляя вручную добавленные папки в include directories)

Поддерживаю про связку CubeMX32 + Atollic True Studio 9.3. В таком варианте сразу получаем рабочий выходной файл. В кубеиде ни разу не смог скомпилировать с первого раза. Приходилось с бубном лезть в дебри настроек. Приходилось отключать опции, которые у меня не использовались, но давали ошибки компиляции в глубине CMSIS, что для меня было удивительно - как в отлаженной системе SMSISа можно сгенерить ошибку. Это ж как можно сделать в официальной среде?