Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM8L - DISCOVERY
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > STM8
Kalyan
Добрый вечер! Вот суть проблемы...... Работаю в компиляторе IAR Embedded Workbench for STMicroelectronics STM8 1.20 Evaluation. Пытаюсь получить прерывание от таймера 4. В файлике iostm8.h нашел таблицу прерываний, но при подключении этого файлика возникают ошибки. Я вырезал оттуда табличку и создал новый заголовочный файлик - interrupt.h. Пишу следующий код:

#include <iostm8l152c6.h>
#include "interrupt.h"
#include "stm8l15x.h"

#pragma vector=TIM4_OVR_UIF_vector
__interrupt __root void tim4_Handler(void)
{
PC_ODR^=0x80;
TIM4_SR1=0x00;
}
int main( void )
{
PC_CR1=0x80; //0b10000000
PC_CR2=0x00;
PC_DDR=0x80; //0b10000000

PC_ODR=0x80; // засветил диод 0b10000000

CLK_CKDIVR=0x00; //поделю системную частоту на 1 тоесть частота будет 8 мегов.
CLK_PCKENR1=0x04; //включаем тактирование таймера 4 0в00000100
//TIM4_PSCR=0x00; //делим частоту
TIM4_IER=0x01; // использую прерывания
TIM4_CR1=0x81; // включаем таймер 0в10000001
enableInterrupts();
while (1)
{
};
}

Все компилируется без ошибок, но в обработчик прерывания не заходит! Что я неправильно делаю??? Помогите пожалуйста!!!
Transcend
А у меня тоже есть такая платочка.
Купил вчера к ней шнурок мини-USB, воткнул в комп, питание появилось, светодиодики заморгали, на индикаторе пишет не русским текстом, короче - все работает.
Теперь надо бы и мне на ИАРе тоже какой-нибудь "Демо_проектик" откомпилировать и запустить. biggrin.gif
Kalyan
Проблему решил, все работает!!! Не досмотрел файлик iostm8l152c6.h до конца - там есть таблица номеров векторов прерываний. Работающий код если кому интересно:

#include <iostm8l152c6.h>

#pragma vector=TIM4_UIF_vector
__interrupt void tim4_Handler(void)
{
PC_ODR^=0x80;
TIM4_SR1=0x00;
}

int main( void )
{
PC_CR1=0x80; //0b10000000
PC_CR2=0x00;
PC_DDR=0x80; //0b10000000
PC_ODR=0x80; // засветил диод 0b10000000
CLK_CKDIVR=0x00; //поделю системную частоту на 1 тоесть частота будет 8 мегов.
CLK_PCKENR1=0x04; //включаем тактирование таймера 4 0в00000100
TIM4_PSCR=0xFF; //делим частоту
TIM4_IER=0x01; // использую прерывания
TIM4_CR1=0x81; // включаем таймер 0в10000001
asm("rim"); // Enable interrupt

while (1)
{
};
}
_Bill
Цитата(Kalyan @ Mar 14 2011, 03:18) *
asm("rim"); // Enable interrupt

Вместо этого лучше использовать "встроенную" функцию __enable_interrupt. Или нет?
Kalyan
Цитата(_Bill @ Mar 14 2011, 20:00) *
Вместо этого лучше использовать "встроенную" функцию __enable_interrupt. Или нет?

Лучше или нет - не знаю. Я новичок в микроконтроллерах.. ))) Начал с mcs-51 на асемблере пол года назад. Теперь вот пытаюсь перейти на што-то посовременней и на С...
Transcend
Цитата(Kalyan @ Mar 15 2011, 00:09) *
Лучше или нет - не знаю. Я новичок в микроконтроллерах.. ))) Начал с mcs-51 на асемблере пол года назад. Теперь вот пытаюсь перейти на што-то посовременней и на С...

Это вы зря про mcs-51 так сказали. Не понимают многие эмбеддеры как можно использовать 51 ядро. Ну да это оффтоп конечно.
STM8L против современного МК с ядром 8052 - как запорожец против порше, хотя габариты близки, теже четыре колеса и движок ТОЖЕ сзади.... laugh.gif
Ну сразу пример захотите ведь, я вот на ЛЮБОМ МК серии 8052 смогу 2 мегабайта (и более) памяти програм и ОЗУ получить, в адресном пространстве МК - а кто сможет на любом другом восьмиразрядном МК так сделать? rolleyes.gif И есть 8052 у которых был 400 MIPS и более, не помню марку.
Смешным мне кажется четыре генератора тактовых сигналов - легко ведь сделать PLL от часового кварцевого генератора. А конденсаторы вокруг резонаторов - уже ни одна приличная фирма не ставит.
Вобщем STM8L это набор для того что бы я получал удовольствие по мере моего освоения "этого комплекта" - как много узнаю "нового" каждый день.
biggrin.gif
И особенно радует наличие ЦЕЛОГО программатора со SWIM технологией, хотя этот проц ВРОДЕБЫ штатно может грузится по UART.
И выпускают ТОЛЬКО в корпусах которые практически очень трудно запаять вручную.
Кстати, можно наладить производство переходника - печатной платы с выводами под DIP40 (или квадратную), на которую будет распаен STM8 пятивольтовой серии. Для школяров-студиусов с их утюжной технологией изготовления печатных плат + шнурок USB-UART + программа загрузчик по СОМ порту (эмулированного через USB), это просто клондайк будет.
Harbinger
2 мегабайта на 8052 - это очень здорово надо поизвращаться при ширине адресной шины в 16 разрядов... sm.gif К тому же не "на ЛЮБОМ" - у мелких 51 внешних шин вообще нет.
STM8 имеют адресное пространство 1 МБ (20 разрядов) на всё про всё, как для 8-битника - вполне нормально.
Корпусировка, да, неудобная. SSOP-20 слишком большой sm.gif, а в 14...16-выводных выпустить не удосужились. Придётся, наверное, к QFN привыкать.
Цитата
ВРОДЕБЫ штатно может грузится по UART.

Может, но не всякий. И программа-загрузчик на сайте есть. Flash_Loader_Demonstrator_v2.2.0. Если "flash is virgin", как в UM0560 выразились, прошьёт. Один раз. sad.gif
Что озадачило, так то, что для всякого периферийного узла тактирование нужно включать отдельно, помимо активации самого узла. И в RM эти моменты находятся очень далеко друг от друга.
Из плюсов - дешевизна и небольшое потребление.
Transcend
Цитата(Harbinger @ Mar 16 2011, 09:26) *
2 мегабайта на 8052 - это очень здорово надо поизвращаться при ширине адресной шины в 16 разрядов... sm.gif К тому же не "на ЛЮБОМ" - у мелких 51 внешних шин вообще нет.

Так то да...
НО, 8051 от 8052 должен же чем то отличаться, кроме номера.
Я так думаю, что в стандартном исполнении у 8052 должны быть в наличии 4 порта по 8 разрядов - если их ампутировали, то это уже даже не 8051, а 8051'
А то, что адресное пространство недостаточное, дык придумали банки адресов (страницы) там по 64К адресов может быть - от 16 (до 256 теоретически - а это 16 Мбайт). Я этим пользовался еще когда ДОС был в ходу (страшно сказать как давно это было). Были компиляторы языка Си фирмы ИАР под досом (где то уже говорил про это rolleyes.gif ). Там использование памяти на "Банках" было широко, через функцию - монитор. Операционные системы CP/M требовали память.
Но архитектура 8052 не устарела, (потому как даже сейчас многие не понимают всего там заложенного, пмсм). Если бы сейчас сделали внутреннюю память МК 8052 мегабайт в 16 и ОЗУ хотябы половину (фирма ADI, например), производительность 400 Mips давно уже не новость, с аналоговой переферией на борту - и цену в 3 бакса, я бы посмеялся тогда. rolleyes.gif Технологии то есть у них, думаю еще увидим падение некоторых "брендов".
Первый ПиСюк был 8-разрядный. Первый жесткий диск был 5 Мегабайт. Память была "полметра" роскошь. И как все там программное "летало"! rolleyes.gif
У меня на столе сейчас лежит SD карта - 32 гига. Скорость записи в нее 50 МГц что ли? Или даже выше? Ужас...

Цитата(Harbinger @ Mar 16 2011, 09:26) *
STM8 имеют адресное пространство 1 МБ (20 разрядов)


Это просто ТОЖЕ ампутированный вариант архитектуры. Типа 8051'
Использовать эти адреса вряд ли где можно будет.

Цитата(Harbinger @ Mar 16 2011, 09:26) *
Придётся, наверное, к QFN привыкать.


Корпуса типа UFQFPN32 паяются в ручную легко, кстати. Обычным китайским паяльником за 5 тыр.
А вот те что на плате стоят - типа LQFP32, вообще очень гемморойно. Даже под микроскопом. Только если трафаретом наносить паяльную пасту и феном припаивать. Тогда нужен станок для позицирования трафаретов и вообще это только в условиях производства оправдано.
Помните, я описание модуля блютуз выкладывал? Там контактные площадки формируются по периметру, путем фрезерования. На такую плату распаять этот МК, платочку стандартизовать - любой школьник сможет использовать.
В STM что ли письмо написать? Дык дебилом обзовут опять... Оне ж там типа умные все... biggrin.gif
Если бы денег заплатили - написал бы, а так пофиг.

Цитата(Harbinger @ Mar 16 2011, 09:26) *
Может, но не всякий. И программа-загрузчик на сайте есть.


Вот этого я не понимаю. В чем тут засада. Какой в этом умысел заложен? Думаете диверсия?
Надо бы разобраться с этим.
(Вчера платы мыл в кювете, полдня - спирта было 0.2 литра. Приходили мысли о странности проффессии ымбеддер. rolleyes.gif )

topkin
Не знаю в чем проблема, LQFP паяется на ура, во всяком случае у меня никогда проблем не было.
Transcend
Цитата(topkin @ Mar 16 2011, 13:47) *
Не знаю в чем проблема, LQFP паяется на ура, во всяком случае у меня никогда проблем не было.

А UFQFPN пробовали паять? rolleyes.gif

Цитата(Harbinger @ Mar 16 2011, 09:26) *
И программа-загрузчик на сайте есть. Flash_Loader_Demonstrator_v2.2.0. Если "flash is virgin", как в UM0560 выразились, прошьёт. Один раз.

Их поисковик не отдает этот докуиент. От какого это МК?

ukpyr
Цитата
Если бы сейчас сделали внутреннюю память МК 8052 мегабайт в 16 и ОЗУ хотябы половину (фирма ADI, например), производительность 400 Mips давно уже не новость, с аналоговой переферией на борту - и цену в 3 бакса, я бы посмеялся тогда.
нет смысла - где-то читал что ядро CortexM0/M3 чуть ли не проще чем 8051. Смысла в мегабайтах памяти на восьмибитнике нет - узкая шина данных съест всю производительность, для большинства задач 4..8Кб хватает с запасом
Цитата
И особенно радует наличие ЦЕЛОГО программатора со SWIM технологией, хотя этот проц ВРОДЕБЫ штатно может грузится по UART.
SWIM в первую очередь для отладки, никто не мешает вам грузиться по UART. И 7..10$ для полноценного отладчика - сущие копейки.
Transcend
Цитата(ukpyr @ Mar 16 2011, 15:34) *
нет смысла - где-то читал что ядро CortexM0/M3 чуть ли не проще чем 8051. Смысла в мегабайтах памяти на восьмибитнике нет - узкая шина данных съест всю производительность, для большинства задач 4..8Кб хватает с запасом


Ну как же нет, я вот ставил Windows 64 вместо 32 разрядной - кроме увеличения почти в 2 раза обьема всех программ занимаемых на жестком диске других особенностей не заметил.
А тут какой выигрышь? Команды для 8 битника ведь тоже короче. АЦП и ЦАП больше 16 бит - редкость. Переферия у МК тоже в основном 8 разрядов.
Разрядность реально нужна для обработки графики и для работы с плавающей точкой в реальном времени. Вот там где этого нет - 8 разрядные вполне еще поживут.
Да и наращивать производительность дешевле, чем разрядность, пмсм.
Насчет простоты CortexM0/M3 - не пробовал. Надо будет тоже купить стартовый набор и попробовать... rolleyes.gif

Цитата(ukpyr @ Mar 16 2011, 15:34) *
SWIM в первую очередь для отладки, никто не мешает вам грузиться по UART. И 7..10$ для полноценного отладчика - сущие копейки.

Не знаю почему, но никогда не пользовался отладчиками.
Возможно потому что не пишу на ассемблере?
Хотя дело не в этом.
Для загрузки программы удобнее использовать UART.
А в том, что они используют специальный программатор, меркантильный подход фирмы виден, однако.
Имеют право конечно, но желание держать всех на крючке - заметно невооруженным глазом.
ukpyr
Цитата
АЦП и ЦАП больше 16 бит - редкость.
ну вот сами назвали случай где 8 бит не хватает. А пересчитать АЦП в реальную величину, вывести на индикацию - там и 16 бит мало.
Цитата
Да и наращивать производительность дешевле, чем разрядность, пмсм.
сейчас вряд ли, 8-битники уперлись в потолок производительности с выходом 1-тактных 8051 и АВР.
Цитата
Не знаю почему, но никогда не пользовался отладчиками.
если архитектура знакомая и все глюки известны (8051,АВР) - да, с новой и сложной типа СТМ8 (руки бы поотрывать писателям документации) удобнее один раз пройтись отладчиком чем пол-дня тыкаться вслепую.
Цитата
А в том, что они используют специальный программатор, меркантильный подход фирмы виден
протокол открыт, появление еще более дешевых программаторов - вопрос времени. С заливкой по UART и сейчас проблем нет.
topkin
Цитата(Transcend @ Mar 16 2011, 15:22) *
А UFQFPN пробовали паять? rolleyes.gif


Их поисковик не отдает этот докуиент. От какого это МК?

Нет, не пробывал sm.gif

Ну а так, полностью подпишусь под словами товарища ukpyr
Transcend
Купил сегодня дисплей Nokia 6100 - решил глянуть цоколевку на разьем, а там чудеса какие то...
У всех "источников" разная цоколевка. biggrin.gif
Как то нужно выбрать правильную и подать напругу.
Harbinger
Цитата(Transcend @ Mar 16 2011, 14:22) *
А UFQFPN пробовали паять? rolleyes.gif
...
Их поисковик не отдает этот докуиент. От какого это МК?

QFN28 пробовал (CP2102). 5 минут ушло вместо 1 в случае SSOP-16 с шагом 0,65.
...
Поисковик там, мягко говоря, бестолковый. Если убрать номер версии и знаки подчёркивания, то отдаёт. Пишет, что для STM32, этому верить можно ровно наполовину. sm.gif

Цитата(ukpyr @ Mar 16 2011, 16:13) *
руки бы поотрывать писателям документации

Ага. sm.gif Но, поскольку это всё равно не поможет, приходится выворачивать мозги постигать загадочную логику их мышления. Она существует!
Transcend
Цитата(Harbinger @ Mar 17 2011, 06:48) *
Пишет, что для STM32, этому верить можно ровно наполовину.


Ага. Нашел. Ну, не знаю кто это программировал, но тот кто ТЗ составлял на сей продукт - трава у него забористая. Точно голландцы песали.
Не думаю, что они по недомыслию все так сделали. Примеров удобных лоадеров вокруг тьма. Тут какая то "задумка" есть. И она мне уже не нравится.
Почему можно прошить только один раз по UART?
Обычно те МК которые шьются по UART имеют специальный пин управления. А тут если этого пина нет, то настройки переводящие МК в режим загрузки с UART действовать будут одноразово. Этот режим выставляется по SWIM.
НО, если поставить проц который бы по нажатию кнопки, через SWIM, опрелял его тип, переключал бы МК в режим загрузки по UART, а потом отключался - и располагался на платке программатора.
Смысл загрузки по UART теряется и вобщем криво получается...
С STM вообще прикольные вещи случаются - я одну микросхему их фирмы год назад покупал в Митино за 40 р, а сейчас тот же продавец продает ее по 400 р. И если бы только он один так сделал, закономерность. Вот думаю, а может это маркетинг такой? Подсадят всех на дешевый проц, а потом тырц - и все в ауте...

Цитата(Harbinger @ Mar 17 2011, 06:48) *
QFN28 пробовал (CP2102). 5 минут ушло вместо 1 в случае SSOP-16 с шагом 0,65.

У меня почему то безвыводные легко получаются, а с выводными перемычки образуются.
А вы сколько спирта ложите в канифоль для флюса? biggrin.gif
ukpyr
Цитата
У меня почему то безвыводные легко получаются, а с выводными перемычки образуются.
нужен паяльник с тонким жалом http://www.e-voron.dp.ua/files/pic/proskit...g/sp-mini20.jpg
Transcend
Цитата(ukpyr @ Mar 17 2011, 10:30) *
нужен паяльник с тонким жалом http://www.e-voron.dp.ua/files/pic/proskit...g/sp-mini20.jpg

Под микроскопом однозначно все паяются. А вот безвыводные вообще просто - паяльником проводишь по всем контактам, а перемычки не образуются там почемуто. Дело вкуса конечно.

А у Cortex АЦП только 12 разрядов бывает? Маловато будет.
ukpyr
Цитата
А у Cortex АЦП только 12 разрядов бывает? Маловато будет.
если нужны разряды - то ADuC или Silabs, там есть и 24 бита, но медленные. Или внешний (ADS12xx/AD77xx/MCP355x), но дороже чем C8051F35х.
Transcend
Цитата(ukpyr @ Mar 17 2011, 13:08) *
если нужны разряды - то ADuC или Silabs, там есть и 24 бита, но медленные. Или внешний (ADS12xx/AD77xx/MCP355x), но дороже чем C8051F35х.

Непросто все с этими АЦП:
1. C8051F35х, 16р, до 1 кгц, Другие серии 10р, 200 кГц.
2. ADuC - 16 р - 1 кГц, реально меньше, 12р - 400 кГц. Но реально у всех меньше.
3. AD77xx - 16р такое же сигма-дельта АЦП как в ADuC.
Пошустрее и 16 разрядов, с малым потреблением, найти бы хорошее АЦП, желательно вместе с ядром проца в корпусе.

Однако, вопрос:
А что разве STM32F103C8 стоящая на плате STM8L-Discovery может загружаться через USB?
Или там тоже только через SWIM загружается программа?
Может быть ее перепаять на место STM8L, что бы доступ был к пинам - и грузить туда программы по USB? biggrin.gif

ЗЫ тут загрузчик лежит, непонятно только как он работает.
http://www.st.com/internet/mcu/product/164476.jsp
Transcend
Если отпилить часть STM8L с программатором - то им можно будет прошить такой МК как STM32F107RC?
Что то меня заинтересовал этот STM32... rolleyes.gif
AcidBurn
Цитата(Transcend @ Mar 16 2011, 20:35) *
Купил сегодня дисплей Nokia 6100 - решил глянуть цоколевку на разьем, а там чудеса какие то...
У всех "источников" разная цоколевка. biggrin.gif
Как то нужно выбрать правильную и подать напругу.


Так на всех картинках цоколевка одинаковая. Просто разъем повернут и ключ в другую сторону смотрит.
ukpyr
Цитата
им можно будет прошить такой МК как STM32F107RC?
видимо нет
Transcend
Цитата(AcidBurn @ Mar 22 2011, 12:36) *
Так на всех картинках цоколевка одинаковая. Просто разъем повернут и ключ в другую сторону смотрит.


Разьем отпаять придется совсем. Нету у меня отвтной части. Где то были 14 контактные с шагом 1.27 мм. Их наверное приделаю и к дисплею и к программатору.


Цитата(ukpyr @ Mar 22 2011, 13:26) *
видимо нет

На плате (bottom) зачем написано "PRG-32" белой краской, рядом с перемычками? Ошиблись они, думаете?
AHTOXA
Цитата(Transcend @ Mar 22 2011, 16:57) *
Разьем отпаять придется совсем. Нету у меня отвтной части.

Я как раз так и сделал.
Transcend
Цитата(AHTOXA @ Mar 22 2011, 15:09) *
Я как раз так и сделал.

Спасибо за ссылку. biggrin.gif
Да вы гуру в этом вопросе...
По шрифтам проблемка обязательно возникнет - немного позже. Хотя у меня тоже где то были свои программы по написанию и редактированию шрифтов. Раньше в компьютерах были VGA мониторы и в ПЗУ для них шрифты лежали. Где то должен быть у меня этот файл от их ПЗУ.
Harbinger
Цитата(Transcend @ Mar 22 2011, 13:57) *
На плате (bottom) зачем написано "PRG-32" белой краской, рядом с перемычками? Ошиблись они, думаете?

Там JTAG, насколько я понял - для программирования STM32F103 при производстве этих самых дискавери.
Вдогонку извиняюсь - насчёт адресного пространства STM8 зарапортовался. 24 бита, конечно.
Transcend
Цитата(Harbinger @ Mar 25 2011, 22:58) *
Там JTAG, насколько я понял - для программирования STM32F103 при производстве этих самых дискавери.
Вдогонку извиняюсь - насчёт адресного пространства STM8 зарапортовался. 24 бита, конечно.

Не думаю, что вы правы. Эти перемычки - или запаяны или отпаяны бывают. На плате они запаяны в режим "дефаулт".
Микросхемы в условиях производства на платах отладочных модулей не программируют.
Harbinger
Не поленился сопоставить схему дискавери с DS на STM32F103 - именно его JTAG туда и выведен!
Есть ещё один, обозначенный как T_JTDI и т.п. и никуда не выведенный; здесь T - не иначе как Target.
Ruslan-maniak
Приветствую. Дабы не создавать новую тему, задам вопрос в этой. Пытаюсь на Stm8l152c6 (тот что на Дискавери) смострячить будильник. Инициализирую часики от LSE:
Код
void InitRTC()
{
    CLK_CRTCR_bit.RTCSEL3 = 1;          // Выбор источника тактирования часов
    CLK_PCKENR2_bit.PCKEN22 = 1;        // Включение тактировандия часов
    
    RTC_WPR = 0xCA;                     // Снятие защиты от записи в регистры RTC
    RTC_WPR = 0x53;                     //
    
    RTC_ISR1_bit.INIT = 1;              // Включение режима настройки часов (они остановлены)
    while(RTC_ISR1_bit.INITF == 0);     // Ожидание включения режима настройки часов
    
    RTC_TR1_bit.ST = 0;                 // Настройка секунд
    RTC_TR1_bit.SU = 0;                 //
    
    RTC_TR2_bit.MNT = 3;                // Настройка минут
    RTC_TR2_bit.MNU = 3;                //
    
    RTC_TR3_bit.PM = 0;                 // 12 или 24 часа    
    
    RTC_TR3_bit.HT = 1;                 // Настройка часа    
    RTC_TR3_bit.HU = 7;                 //
    
    RTC_ISR1_bit.INIT = 0;              // Выключение режима настройки часов
}

Часики исправно работают.
Далее прикручиваю к ним аларм А.
Код
void InitAlarmRTC()
{
    RTC_CR2_bit.ALRAE = 0;                    // Отключение Аларма
    while(RTC_ISR1_bit.ALRAWF==0);      // Проверка возможности изменения регистров Аларма
    
    RTC_ALRMAR1_bit.MSK1 = 1;          
    RTC_ALRMAR1_bit.ALST = 0;           // Настройка секунд
    RTC_ALRMAR1_bit.ALSU = 5;           //
    
    RTC_ALRMAR2_bit.MSK2 = 1;
    RTC_ALRMAR2_bit.ALMNT = 3;          // Настройка минут
    RTC_ALRMAR2_bit.ALMNU = 3;          //
    
    RTC_ALRMAR3_bit.MSK3 = 1;
    RTC_ALRMAR3_bit.PM = 0;               // 12 или 24 часа  
    RTC_ALRMAR3_bit.ALHT = 1;           // Настройка часа    
    RTC_ALRMAR3_bit.ALHU = 7;
    
    RTC_CR2_bit.ALRAIE = 1;             // Включение прерывания
    RTC_CR2_bit.ALRAE = 1;              // Включение Аларма
}


Ну и далее по коду разрешаю прерывания. То есть другие прерывания работают: от АЦП, от ноги внешнее. А вот Аларм не срабатывает. Не из спящего режима, не во время работы. Видать где-то не воткнул битик. Хотя точно по реф.ману реализовал алгоритм. Подскажите кто знает, что я упустил?

Решение нашёл. Маска включается при бите равном нулю.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.