Какой ужас!!!axillent писал(а):Собираю библиотеку универсальную под avr8/stm8/stm32.
Программирование STM8
"Я не даю готовых решений, я заставляю думать!"(С)
- Реклама
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Как-то это смахивает на не очень продуманное решение. Мало того, что это неоправдано-большое количество писанины, так из-за архитектурных отличий многие алгоритмы могут получится уж сильно не оптимальными для одной или другой платформы.axillent писал(а):Собираю библиотеку универсальную под avr8/stm8/stm32.
- Сообщения: 1040
- Зарегистрирован: Вс сен 25, 2011 19:09:33
2+2 будет по разному считаться?a5021 писал(а):так из-за архитектурных отличий многие алгоритмы могут получится уж сильно не оптимальными для одной или другой платформы.
общее в библиотеке будет уровень приложения, на этом уровне логика простая никак не завязанная на конкретную архитектуру
минимальное задействие физических интерфейсов выделено в отдельный уровень где под каждую архитектуру/МК своя писанина
но по теме я ответ уже получил, больше тему здесь предлагаю не развивать
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Мне показалось, что вы не за "2+2" переживали, когда насчет дифайнов с инклюдами спрашивали. Чтобы оптимально использовать ресурсы разных платформ, в какой-нибудь динамической индикации, например, вообще ведь ни одной общей строчки может не оказаться. Алгоритм разный получится. Механизм.axillent писал(а):2+2 будет по разному считаться?
- Сообщения: 29
- Зарегистрирован: Сб фев 06, 2016 14:26:07
Разбираюсь с таймерами STM8, но т.к. я пока еще нуб, то видимо делаю что-то не так...
В общем, есть МК STM8L151K6, на его ножку (PD0) поступают импульсы. Необходимо проверить само наличие импульсов на ножке (которые могут быть разной длительности, но сама длительность или частота, в данном случае, не интересуют). Пытаюсь настроить второй канал таймера (TIM3_CH2) на захват по заднему фронту, с попаданием в прерывание. Но видимо что-то не учитываю.
Суть проблемы в том, что в прерывание попасть не получается. Видимо ошибся с настройкой таймера, но не могу понять где именно. Заранее спасибо за помощь!
В общем, есть МК STM8L151K6, на его ножку (PD0) поступают импульсы. Необходимо проверить само наличие импульсов на ножке (которые могут быть разной длительности, но сама длительность или частота, в данном случае, не интересуют). Пытаюсь настроить второй канал таймера (TIM3_CH2) на захват по заднему фронту, с попаданием в прерывание. Но видимо что-то не учитываю.
Код: Выделить всё
void init(void){
GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Fast);
//Настройка ножки PD0 как входа таймера TIM3_CH2
GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_In_PU_No_IT);
//Настройка тактирования таймера
CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, ENABLE);
//Настройка TIM3_CH2 в режиме захвата-сравнения по заднему фронту
TIM3_TimeBaseInit(TIM3_Prescaler_64, TIM3_CounterMode_Up, 0xFFFF);
TIM3_ICInit(TIM3_Channel_2, TIM3_ICPolarity_Falling, TIM3_ICSelection_DirectTI, TIM3_ICPSC_DIV1, 10);
TIM3_SelectInputTrigger(TIM3_TRGSelection_TI1FP1);
TIM3_SelectSlaveMode(TIM3_SlaveMode_Reset);
//разрешаем прерывания
TIM3_ClearFlag(TIM3_FLAG_CC2);
TIM3_ITConfig(TIM3_IT_CC2, ENABLE);
TIM3_Cmd(ENABLE);
}
#pragma vector=0x18
__interrupt void TIM3_CAP_COM_IRQHandler(void){
GPIOB->ODR = 1;
TIM3_ClearFlag(TIM3_FLAG_CC2);
}
- Реклама
Убогая попытка решения задачи... аля ПЫХ-АВР... Если я всё правильно понял... то настройте один канал таймера на захват со сбросом... пример настройки есть в PWM Input... другой канал настройте на сравнение... с временем больше самого длинного возможного периода... Тогда у вас будет всего одно прерывание... по отсутствию импульсов... а не дрочня с прерываниями на каждом импульсе...
"Я не даю готовых решений, я заставляю думать!"(С)
- Сообщения: 4
- Зарегистрирован: Ср фев 24, 2016 08:24:34
Добрый день!
Подскажите, пожалуйста: имеется устройство, на плате которого стоит STM8L151c8t6. Требуется попытаться сохранить с него прошивку и записать ее на аналогичное устройство (обновить). Какое минимальное оборудование для этого потребуется? Достаточного ли такого свистка http://roboparts.ru/products/st-link-v2 ? Или что-то такое http://www.avrki.ru/articles/content/stlink/ или http://www.chipdip.ru/product/st-link-v2/ ?
Подскажите, пожалуйста: имеется устройство, на плате которого стоит STM8L151c8t6. Требуется попытаться сохранить с него прошивку и записать ее на аналогичное устройство (обновить). Какое минимальное оборудование для этого потребуется? Достаточного ли такого свистка http://roboparts.ru/products/st-link-v2 ? Или что-то такое http://www.avrki.ru/articles/content/stlink/ или http://www.chipdip.ru/product/st-link-v2/ ?
Первый не знаю, а вот последние два подойдут.
Я не волшебник, я только лечусь
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
А вопрос стоял о возможности технически считать прошивку. Если данный МК залочен, то уже никакими силами ее оттуда не вытащить. Конечно есть один способ, но его цена будет выше чем оплата программера который напишет новую прошивку с нуля.
Я не волшебник, я только лечусь
- Сообщения: 4
- Зарегистрирован: Ср фев 24, 2016 08:24:34
- Сообщения: 4
- Зарегистрирован: Ср фев 24, 2016 08:24:34
Добрый день! Еще вопрос в догонку, а можно ли использовать STM8SVL discovery http://www.chipdip.ru/product/stm8svldiscovery/ для STM8L с моими целями (прошивка-чтение) ?
Да, там уже разъём есть. Только отломай программатор.
- Сообщения: 25
- Зарегистрирован: Ср мар 02, 2016 09:07:19
Коллеги.
Не озарите отблеском мудрости?
Хочу программный эмулятор STM8
А то прикупил на мизер... ээ на алиэкспрессе 003их, а оно мало того, что теперь программатора жду, так ещё и число прошивок сильно ограничено
Нашёл модель для протеуса, но там эмулятора нет.
Не озарите отблеском мудрости?
Хочу программный эмулятор STM8
А то прикупил на мизер... ээ на алиэкспрессе 003их, а оно мало того, что теперь программатора жду, так ещё и число прошивок сильно ограничено
Нашёл модель для протеуса, но там эмулятора нет.
IAR прекрасно эмулирует STM8.
- Сообщения: 25
- Зарегистрирован: Ср мар 02, 2016 09:07:19
- Сообщения: 4
- Зарегистрирован: Ср фев 24, 2016 08:24:34
Я читал, по-моему, на этом форуме что хоть он для STM8S, но должен подойти и для STM8L . Но смутило, что в документации написано типа "use only with STM8S series" . У STM8L же напряжение питания ниже, нужно, видимо, и этот момент учесть?GARMIN писал(а):Да, там уже разъём есть. Только отломай программатор.
Не подскажете каким софтом проще всего воспользоваться для проверки возможности считать прошивку? А то я новичек в этом деле, уже голова пухнет от чтения. Простого FAQа/мануала не нашел..
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Не забивайте голову ерундой. Реальное число прошивок, много больше указанных цифр в даташите.esisl писал(а):А то прикупил на мизер... ээ на алиэкспрессе 003их, а оно мало того, что теперь программатора жду, так ещё и число прошивок сильно ограничено
Сам Labcenter эмуляторов для stm8 не делал, а кто-то другой вряд ли за это возьмется.Нашёл модель для протеуса, но там эмулятора нет.
Чего-то посмотрел на STM8, вот, думал, замена мегам
А посмотрел поближе - какой же это геморрой. Да хоть бесплатно они пусть будут. При таких заумностях и кривых средах под них - легче на мегах делать. Вот чего только стоит это - запись в EEPROM к примеру в IAR:
мега
__EEPUT(0x40,status.byte);
stm8
char *adress = (char *) 0x4000;
if (FLASH_IAPSR_DUL == 0)
{
FLASH_DUKR = 0xae;
FLASH_DUKR = 0x56;
while (FLASH_IAPSR_DUL == 0)
{
}
}
*address = status.byte;
FLASH_IAPSR_DUL = 0;
А сколько при этом сгенериться кода
И улетит туда вся флеш........ А сколько мороки с инитом другой периферии...... А новичку в STM вообще лучше не лазить - только голову сломать и расхотеть вообще контроллерами заниматься. Не знаю как в крупных кирпичах, а в мелких и средних STM Атмелу и Пику не конкурент ни разу (даже на горизонте не пробегал). Не даром за столько лет так толком и не появился в конструкциях. Протухнут чувствую у меня эти STM8S.... 
мега
__EEPUT(0x40,status.byte);
stm8
char *adress = (char *) 0x4000;
if (FLASH_IAPSR_DUL == 0)
{
FLASH_DUKR = 0xae;
FLASH_DUKR = 0x56;
while (FLASH_IAPSR_DUL == 0)
{
}
}
*address = status.byte;
FLASH_IAPSR_DUL = 0;
А сколько при этом сгенериться кода
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
eeprom в stm8 можно организовать просто (код для IARа - имхо самая правильная среда для stm8 и avr) :
чтение очень просто, занимает намного меньше чем в АВР - просто пересылка из области eeprom в память, все находится в едином адресном пространстве:
в листинге всего то две команды:
запись тоже несложно:
случайным процессом испортить eeprom stm8 практически невозможно, вот в АВР, бывало раньше, по адресу 0 eeprom портилась регулярно
А что за "морока с инитом другой периферии" - имхо периферия stm8 весьма проста, после прочтения документации, чуть поднавороченней чем в АВР, зато и возможностей намного больше. А программатор - отладчик копеечный? А цена в минимум в в 2 раза дешевле чем аналогичный АВР. После stm8 на avr и смотреть не хочется.
Код: Выделить всё
typedef struct Par_t
{
uint16_t temperature;
uint16_t time;
uint8_t gain;
}Par_t;
#pragma location=0x4000
__no_init Par_t Par;
#pragma required=ParКод: Выделить всё
uint16_t temperature, time;
temperature = Par.temperature;
time = Par.time;Код: Выделить всё
LDW X, L:0x4000
LDW L:temperature, X
...
LDW X, L:0x4002
LDW L:time, Xзапись тоже несложно:
Код: Выделить всё
mcu_eeprom_unlock();
Par.temperature = 560;
Par.time = time;
FLASH->IAPSR &= ~FLASH_IAPSR_DUL; //EEPROM lock
void mcu_eeprom_unlock(void) //Разблокировать EEPROM
{
FLASH->DUKR = ((unsigned char)0xAE);
FLASH->DUKR = ((unsigned char)0x56);
while (!(FLASH->IAPSR & FLASH_IAPSR_DUL));
}А что за "морока с инитом другой периферии" - имхо периферия stm8 весьма проста, после прочтения документации, чуть поднавороченней чем в АВР, зато и возможностей намного больше. А программатор - отладчик копеечный? А цена в минимум в в 2 раза дешевле чем аналогичный АВР. После stm8 на avr и смотреть не хочется.


