Easyelectronics.ru

Электроника для всех
Текущее время: 05 окт 2022, 21:09

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 538 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 22  След.
Автор Сообщение
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 12 мар 2016, 18:09 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
ShadS писал(а):
В проектах, в которых хочу заменить ATmega8A на STM8S103F3, у меги более 50% ног не используются... так что это даже лучше, т.к. корпус будет меньше места занимать

Кстати не упусти из виду, что у stm пины не одинаковые. Привычный push-pull, pull-up и high sink которые есть на любом пине атмела у stm есть не везде и в разных комбинациях
Развел три схемы, но все никак к этому не привыкну, все время приходится сверяться и пока чудом не ошибся. Ведь банальный светодиод на пине без пуш-пула не заработает если его цеплять к GND. Как бы не проблема, но надо перестроиться


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 15:05 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
написал несколько программ используя регистры и RM
сейчас надо копать глубже, задумался, все таки делать дальше ручками по RM или осваивать SPL?

кто проходил через этот выбор, поделитесь соображениями и своим выбором


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 15:29 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
Что копать, куда копать? Изучите периферию и вам на ненужна будет SPL'ная галиматья ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 15:52 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2014, 18:09
Сообщения: 773
Откуда: Мать городов Русских
Даташита вполне достаточно. Просто добавляете в файл stm8s.h недостающие дефайны битов по ходу дела и всё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 17:00 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
SOVA писал(а):
Даташита вполне достаточно. Просто добавляете в файл stm8s.h недостающие дефайны битов по ходу дела и всё.

Вы за SPL?
В даташите биты не описаны, не понимаю чем он поможет в програмировании. В даташите лишь указано чего нет из переферии в конкретном чипе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 17:03 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
dosikus_2 писал(а):
Что копать, куда копать? Изучите периферию и вам на ненужна будет SPL'ная галиматья ...


Тоже на это ориентировался, это привычно по avr. Даже само st в аннотации к spl пишет "библиотека не оптимальна, если нужен оптимальные код используйте библиотеку только как пример"

Но вот читаю uart. Очень большой раздел, довольно не просто сходу разобраться во всех ньюансах


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 17:24 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2258
Откуда: Нальчик
dosikus_2 писал(а):
Что копать, куда копать? Изучите периферию и вам на ненужна будет SPL'ная галиматья ...
тогда для какой породы программеров предназначен SPL ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 18:09 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
Для вечных нубов-аурдинщиков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 19:22 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
соглашусь насчет галиматьи...
попробовал настроить uart через SPL
не смотря на примеры кода и документацию все настолько мутно
что зачем делается нифига не понятно
еще эта дурацкая манера когда надо все или почти все файлы библиотеки скопировать себе в проект и еще часть из них поправить под свои нужды

в итоге нашел пример простого кода и посматривая на RM запустил

связала через RS485 stm8s и atmega
кстати вот сходу, почему на 4800 и 9600 работает, а на 2400 нет?
когда stm8 шлет на 2400 мега выдает мусор


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 19:31 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 8095
"почему на 4800 и 9600 работает, а на 2400 нет?"
Если это не программные заморочки, то кабель - его сигнал "звенит" по фронтам и UART принимает много мусора. Соедините короткими отдельными проводами, с качественным соединением по земле.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 20:56 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
Разве с падением скорости помехи не должны влиять меньше?
Провода и так короткие, 30см витой пары и еще 20см. Пока отладка все на одном столе
А земля причем? Rs485 разве требует землю?
Она по факту соеденена, но если я верно понял для передачи достаточно двух проводов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 21:19 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
axill, где-то было уже -для 2400 не верно BRR значения воспринимает. Вопрос в другом -накуа нужна 2400?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 21:37 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
dosikus_2 писал(а):
axill, где-то было уже -для 2400 не верно BRR значения воспринимает. Вопрос в другом -накуа нужна 2400?

причина глупая) лень
у меня на этом уарт стоит мультиплексор/демультиплексор и я на нем буду как по rs485 сенсоры опрашивать так и по rs232 пару ИБП от APC
так вот у последних скорость интерфейса как раз 2400
лень при переключении перестраивать скорость, но видимо придется
для опроса сенсоров мне в общем то скорость все равно какая

есть решение по BRR?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 21:40 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
axill, что именно из stm8s? Имею 208s6 и 105s6. Завтра проверю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 22:04 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
у меня stm8s003f3

2400 заработало. подставил значения BRR1/BRR2 из примера в RM для моих 16мгц
в отладчике вижу, что целочисленная арифметика для автоматического вычисления этих значений дает ошибку


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 22:09 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
Ну и чудно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 22:48 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2010, 16:57
Сообщения: 2258
Откуда: Нальчик
axill писал(а):
в отладчике вижу, что целочисленная арифметика для автоматического вычисления этих значений дает ошибку
А покажи само выражение дающее ошибку, плз...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 21 мар 2016, 23:40 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
вот этот пример и формула там же в функции инициализации http://hamlab.net/mcu/stm8/uart.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 22 мар 2016, 10:29 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
axill, попробуй для вычислений сие :

Код:
#define FMASTER 16000000UL
#define BAUDRATE 2400UL
  BRR =(FMASTER+BAUDRATE/2)/BAUDRATE;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 22 мар 2016, 13:43 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
dosikus_2 писал(а):
Код:
#define FMASTER 16000000UL
#define BAUDRATE 2400UL
  BRR =(FMASTER+BAUDRATE/2)/BAUDRATE;


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

столкнулся с двумя неприятностями в сравнении с AVR. Первое - привычная мне sprintf в IAR отжирает раза в два больше флэш нежели в avr-gcc. То есть даже на 8к почти 4к отдать под sprintf - не вариант, а на меге часто применяю
Второе - в IAR нет 64 битных целых. Если в AVR есть long Long, то здесь это синоним long

Show


для 64 бит надо ручками? Или может кто подскажет другой вариант пересчета миллибар в мм ртутного столба для bmp085?
сейчас так, но без 64 бит дает ошибку:
Код:
return ((uint64_t)pressurePA * 152000UL) / 20225UL;


Shads, так понимаю осваиваем в параллель. Готов делиться. Хоть такую идею многие снобы критикуют, но я для себя делаю библиотечку примитивов универсальную с точки зрения логики применения как на AVR8 так и STM8 и позже STM32
в основном на макросах все разруливаю чтобы не раздувать код. Мне так проще.

Вот пример заголовка программы для STM8:
Код:
#define STM8S003
#include <stavrcomlib/stavrcomlib_gpio.h>
#define UART1
#include <stavrcomlib/stavrcomlib_uart.h>
#include <stavrcomlib/stavrcomlib_i2c.h>
#include <stavrcomlib/stavrcomlib_bmp085.h>

//----------------------------------------------------------------------------------
// определение пинов ввода/вывода
STAVR_define_io_functions(rs485_rw, C, 6)      // режим передачи rs485
STAVR_define_io_functions(bmp085_eoc, D, 3)    // bmp085 EOC


для AVR будет выглядеть так:
Код:
#include <stavrcomlib/stavrcomlib_gpio.h>
#define UART0
#include <stavrcomlib/stavrcomlib_uart.h>
#include <stavrcomlib/stavrcomlib_i2c.h>
#include <stavrcomlib/stavrcomlib_bmp085.h>

//----------------------------------------------------------------------------------
// определение пинов ввода/вывода
STAVR_define_io_functions(rs485_rw, C, 6)      // режим передачи rs485
STAVR_define_io_functions(bmp085_eoc, D, 3)    // bmp085 EOC


а вызовы функций практически одинаково:
Код:
uart1_init(UART_BAUD_RATE_DIV(F_MASTER, UART_BAUD_RATE));
  // i2c
  i2c_init(I2C_BITRATE_DIV(F_MASTER, I2C_BITRATE));

  // bmp085
  bmp085_Init();
  bmp085_registerEOCCallBack(bmp085_eoc_clbk);


и

Код:
uart0_init(UART_BAUD_RATE_DIV(F_MASTER, UART_BAUD_RATE));
  // i2c
  i2c_init(I2C_BITRATE_DIV(F_MASTER, I2C_BITRATE));

  // bmp085
  bmp085_Init();
  bmp085_registerEOCCallBack(bmp085_eoc_clbk);


пока все в черновиках, но сама структура уже проверена и устоялась, осталось добивать переферию и править поддержку отдельных МК. Конечно претендовать на весь спектр MCU не буду, только то, чем сам пользуюсь


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 22 мар 2016, 13:58 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
axill писал(а):
поясните логику, для меня выглядит как шаманство) подогнать конкретный результат не проблема,


Сие "шаманство" регулярно используется для STM32, не вижу ни каких препятствий юзать и для STM8.
Просто проверь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 22 мар 2016, 14:00 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
dosikus_2 писал(а):
Сие "шаманство" регулярно используется для STM32, не вижу ни каких препятствий юзать и для STM8.
Просто проверь...

что где то используется это конечно аргумент
а вот проверить для всех возможных значений F_MASTER и BAUD_RATE накладно по времени
чисто для 2400 прописать константы - нет ничего проще и надежнее
а вот в качестве универсальной формулы надо или понимать логику или проверять все


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 22 мар 2016, 14:03 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5538
гы... туплю
это же просто - в формуле идет добавка 0.5 только в целочисленном варианте, так, чтобы было "округление" результата


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 22 мар 2016, 14:04 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5896
Ну дык.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM8 Самое начало
СообщениеДобавлено: 22 мар 2016, 14:47 
Старожил
Аватара пользователя

Зарегистрирован: 15 фев 2011, 22:21
Сообщения: 230
Я лично юзаю свой макрос для BRR
среда STVP (STM IDE viewtopic.php?f=33&t=16460),
который выверен многократно и + - 0.5 округления делает в "правильную" сторону для BRR`ов.
Для STM8 с тактотовой 16 мгц для 2400 бод вызов имеет вид: CalcSpeedUART 16, 2400
а полный инит UART будет так, например: InitUART 2400, 8, N, 1

Код:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  Макросы для UART модуля
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CalcSpeedUART MACRO MHz, Rate
BRR2     CEQU  {{{{{{MHz*10000000/Rate}+14}/10} SHR 8} AND 240} OR { {{ {MHz*10000000/Rate}+14}/10} AND 15}}
BRR1     CEQU  {{{{{MHz*10000000/Rate}+14}/10} SHR 4} AND 255}
         MEND

InitUART MACRO RATE, LenData, Parity, Stop
         #IFIDN Parity NONE
            ;настроим длину и стопы
            #IFIDN LenData 9
               bset  UART1_CR1, #M
            #ELSE   
               #IFIDN Stop 2
                  bset  UART1_CR3, #5
               #ENDIF
               #IFIDN Stop 1p
                  bset  UART1_CR3, #4
                  bset  UART1_CR3, #5
               #ENDIF
            #ENDIF
         #ELSE   
            #IFIDN LenData 8
               #IFIDN Parity ODD
                  mov   UART1_CR1, #{{1 SHL M} OR {1 SHL PCEN} OR {1 SHL PS}}
               #ENDIF
               #IFIDN Parity EVEN
                  mov   UART1_CR1, #{{1 SHL M} OR {1 SHL PCEN}}
               #ENDIF
            #ELSE
               #IFIDN Parity ODD
                  mov   UART1_CR1, #{{1 SHL PCEN} OR {1 SHL PS}}
               #ENDIF
               #IFIDN Parity EVEN
                  bset  UART1_CR1, #PCEN
               #ENDIF
            #ENDIF
         #ENDIF         
         mov   UART1_BRR2, #{{{{{{FCLK*10000000/RATE}+14}/10} SHR 8} AND 240} OR { {{ {FCLK*10000000/RATE}+14}/10} AND 15}}
         mov   UART1_BRR1, #{{{{{FCLK*10000000/RATE}+14}/10} SHR 4} AND 255}
      MEND


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 538 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 22  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB