Программирование STM8
- Сообщения: 718
- Зарегистрирован: Сб апр 14, 2012 16:11:35
a5021, спасибо, включение тактирования AWU помогло. Регистр стал записываться!! Причём, сначала его нужно сбросить, а потом записать в нужное состояние. Бипер заработал.
- Реклама
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
У меня с этим бипером другой феномен -- работает без всякого шаманства с флешем и переопределением альтернативных функций, хотя вроде не должен. Так и не разобрался с этим. Работает, ну и хорошо.
- Сообщения: 1
- Зарегистрирован: Пн дек 09, 2013 23:26:21
Уже несколько недель пытаюсь разобраться с данным микроконтроллером, но пока что всё безуспешно.
Может кто подсказать, как подключить к ней что-нибудь( моторчик, или еще один диод...) в простейшем случае.
Нашел в инете много на эту тему, но опыта работы с микроконтроллерами нет вообще. Я всего-лишь программист:(
Если можно -самый простой пример. Допустим моторчик, один контакт - к 32-му порту, второй - к 48-ому.
И какой будет минимальный код на IAR-е, чтобы он закрутился. Буду очень благодарен!
Может кто подсказать, как подключить к ней что-нибудь( моторчик, или еще один диод...) в простейшем случае.
Нашел в инете много на эту тему, но опыта работы с микроконтроллерами нет вообще. Я всего-лишь программист:(
Если можно -самый простой пример. Допустим моторчик, один контакт - к 32-му порту, второй - к 48-ому.
И какой будет минимальный код на IAR-е, чтобы он закрутился. Буду очень благодарен!
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Вы задаете вопрос о подключение моторчика к сферическому МК в вакууме. Для программиста такая постановка вопроса не характерна.
Почему? Как раз таки для программиста вполне характерно. Виртуальный моторчик и методы работы с ним на виртуальном МК. Всякая фигня типа мощности, напряжения питания и прочая не существенны. Мы же программируем интерфейс!
- Реклама
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
В принципе, да! Тогда вот этот код будет точно работать. 
===
motor->run(FORWARD);
motor->run(BACKWARD);
motor->brake();
motor->stop();
===
И скажите, что нет еще.
===
motor->run(FORWARD);
motor->run(BACKWARD);
motor->brake();
motor->stop();
===
И скажите, что нет еще.
- Сообщения: 718
- Зарегистрирован: Сб апр 14, 2012 16:11:35
Даже на этом сайте есть схемы на СТМ-8, например, не для рекламы, моя первая работа с этим контроллером http://radiokot.ru/circuit/digital/measure/87/
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
И добротная работа, надо заметить. Я про нее впервые узнал вообще на стороннем ресурсе, т.ч. можно сказать, что вас активно цитируют. 
- Сообщения: 3
- Зарегистрирован: Сб дек 21, 2013 22:21:38
Коллеги! Расшарьте пожалуйста STVD и STVP, если у кого есть.
На ST проблемы с серваком - скачать их там не получается crying.gif
На ST проблемы с серваком - скачать их там не получается crying.gif
Посмотрите плз. где туплю???
Счетчик считает, флаг прерывания ставится, в прерывание не попадаю.
Через какое-то время перезагружается.
Прерывания от таймера разрешил
stm8_interrupt_vector.c
main.c
Счетчик считает, флаг прерывания ставится, в прерывание не попадаю.
Через какое-то время перезагружается.
Прерывания от таймера разрешил
stm8_interrupt_vector.c
Спойлер
Код: Выделить всё
/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices
* Copyright (c) 2007 STMicroelectronics
*/
typedef void @far (*interrupt_handler_t)(void);
struct interrupt_vector {
unsigned char interrupt_instruction;
interrupt_handler_t interrupt_handler;
};
@far @interrupt void NonHandledInterrupt (void)
{
/* in order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction
*/
return;
}
extern void _stext(); /* startup routine */
//extern @far @interrupt void TIM4_IRQ_handler (void);
extern @far @interrupt void TIM4_IRQ_handler(void);
struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap */
{0x82, NonHandledInterrupt}, /* irq0 */
{0x82, NonHandledInterrupt}, /* irq1 */
{0x82, NonHandledInterrupt}, /* irq2 */
{0x82, NonHandledInterrupt}, /* irq3 */
{0x82, NonHandledInterrupt}, /* irq4 */
{0x82, NonHandledInterrupt}, /* irq5 */
{0x82, NonHandledInterrupt}, /* irq6 */
{0x82, NonHandledInterrupt}, /* irq7 */
{0x82, NonHandledInterrupt}, /* irq8 */
{0x82, NonHandledInterrupt}, /* irq9 */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, NonHandledInterrupt}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, NonHandledInterrupt}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, NonHandledInterrupt}, /* irq20 */
{0x82, NonHandledInterrupt}, /* irq21 */
{0x82, NonHandledInterrupt}, /* irq22 */
//{0x82, NonHandledInterrupt}, /* irq23 */
{0x82, TIM4_IRQ_handler}, /* irq23 - tim4*/
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};main.c
Спойлер
Код: Выделить всё
/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include <iostm8s105.h>
unsigned int i;
@far @interrupt void TIM4_IRQ_handler(void)
{
TIM4_SR=~TIM4_SR;
if (PD_ODR == 0)
PD_ODR = 0xFF;
else PD_ODR = 0x00;
TIM4_SR = 0x00;
return;
}
main()
{
PD_DDR = 0xff; //all line for out
PD_CR1 = 0x01;
PD_CR2 = 0x01;
PD_ODR = 0x00;
//********************TIM4- init**********************
//TIM4 control register
//ARPE - Autoreload preload register 0
//reserved
//reserved
//reserved
//OPM - One pulse mode 0
//URS - Update request Source 1
//UDIS - Update disable 0
//CEN - Counter enabled 1
TIM4_CR1 = 0x05;
//TIM4_IER interrupt enable register
//reserved
//reserved
//reserved
//reserved
//reserved
//reserved
//reserved
//UIE - update interrupt enable
TIM4_IER = 0x01;
//clear counter register
TIM4_CNTR = 0x00;
//TIM4_PSCR - prescaler register
//reserved
//reserved
//reserved
//reserved
//reserved
//PSC2
//PSC1
//PSC0
TIM4_PSCR = 0x00; //no prescaling
//TIM4_ARR - autoreload register
TIM4_ARR = 0x15;
//clear interrupt flag
TIM4_SR = 0;
while (1)
{
i = 0xFFFF;
while(i) {
i--;};
//PD_ODR = 0x00;
// i = 0xFFFF;
//while(i) {i--;};
// PD_ODR = 0xFF;
};
}
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
может надо добавить (interrupt_handler_t), так работало:
Код: Выделить всё
.....
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, (interrupt_handler_t)TIM2_UPD}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
.....Неа, не пашет.
Уже задолбался. Может еще что то в проекте ставить нужно для разрешения прерываний?
Уже задолбался. Может еще что то в проекте ставить нужно для разрешения прерываний?
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
А пошаговая отладка что показывает? Адрес обработчика точно прописан в таблице векторов? Кажется мне что где-то промахнулся с адресами и векторами, и последующая перезагрузка говорит именно об этом.
как то так

- Вложения
-
- stm_vect.jpg
- (241.77 КБ) 1247 скачиваний
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Все, победил. Думаю же должно же быть еще что то вроде #asm sei 
#asm
rim
#endasm
#asm
rim
#endasm
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
- Сообщения: 718
- Зарегистрирован: Сб апр 14, 2012 16:11:35
Я как-то напоролся на интересный момент при инициализации прерываний.
Сейчас рабочий фрагмент кода в main такой (IAR):
Но когда размещал __enable_interrupt(); в конце init_irq();, что в принципе логично, то прерывания не включались.
Чудеса.
Сейчас рабочий фрагмент кода в main такой (IAR):
Код: Выделить всё
...
init_lcd();
init_irq();
__enable_interrupt();
...
Чудеса.
Вероятно, никаких чудес. Перед инициализацией прерываний вероятно сохраняется состояние прерываний и прерывания принудительно гасятся чтобы во время настройки ничто не помешало даже если вызвать процедуру посреди работающего кода, а перед выходом состояние восстанавливается в том виде как было на входе - т.е. прерывания запрещены. Попробуйте пройтись отладчиком внимательно наблюдая за признаком разрешения прерываний.
а есть компилер C для stm8? *ну вы поняли*
хочу несколько проектов сравнить скорость/размер на AVR8/STM8
а то assembler навивает грусть-тоску
хочу несколько проектов сравнить скорость/размер на AVR8/STM8
а то assembler навивает грусть-тоску
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Ну Cosmic и кто то уже даже сравнивал, по моему на easyelectronix
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
лучше ссылку на сравнение.
Я в инетах видал примерно такое:
АВР 350 Дмипс
СТМ 439 Дмипс
Но дристоны от жизни сильно оторваны )
Я в инетах видал примерно такое:
АВР 350 Дмипс
СТМ 439 Дмипс
Но дристоны от жизни сильно оторваны )
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ


