Зарегистрирован: Вт сен 15, 2009 16:23:06 Сообщений: 692 Откуда: Москва
Рейтинг сообщения:0
Я вкурсе что надо при первой прошике надо запрограмировать биты отвечающие за работу bootlader. Тут на сайте в статье "Измеритель параметров Тиля-Смолла на МК"http://www.radiokot.ru/circuit/digital/measure/87/ написано как это сделать.
Кстае может мне кто прояснить что к чему. В статье написано в что готовый фаил прошивки в конце добовляется строка S105487E55AA35. Я понимаю что 487Е это адрес байтов отвечающих за загрузчик, 55AA это значение для записи, но что значит S105 и 35.
_________________ Только абсолютная пустота бездны принесёт мне покой.
Други, подскажите, существует ли описание стандартной библиотеки работы с периферией на STM8L. А то библиотека есть, а описание нигде не могу найти. В апноутах привязка идёт к регистрам а не функциям либы. А вот что бы как на STM32 было описалово неужели нет?
Уважаемые, вопрос дилетанта, как настроить прерывание на STM8S? Есть такой код (собственно учебный): Спойлер/*---------- (Тестовая программа для STM8S103F2P6) PC7(p13) и PC4(p14) инверсный - земля(GND),светодиоды анодом к VCC(+3.3V), PD2 (p19), PD4 (p1) (подтяжка через 24кОм на VCC(+3.3V)
----------*/ #include "iostm8s103f2.h" // подключение заголовочного файла с объявлениями регистров, масок и битов
#define STRINGVECTOR(x) #x //как я понял, здесь берется прерывание (вектор)? #define ISR( a, b ) \ _Pragma( STRINGVECTOR( vector = (b) ) ) \ __interrupt void (a)( void )
//Задержка на цикле. Примерно 3 секунды. Знаю, что быдлокод, таймеры ещё не осилил... void SomeDelay() { for (unsigned long delay_count=0; delay_count<300000; delay_count++); };
ISR(Pin2_interrupt, EXTI6_vector) //Собственно, здесь мне и не понятно, как сделать прерывание по пину PD2? { while (PD_IDR_bit.IDR2 == 0) { PC_ODR_bit.ODR7 = 0; //Подтянем пин к земле - светодиод горит PC_ODR_bit.ODR4 = 0; //Подтянем пин к земле - светодиод горит SomeDelay(); };
EXTI_SR1_bit.P2F = 1; //Перед выходом из прерывания необходимо вручную сбросить флаг, //Иначе тут-же вернемся обратно в обработчик. };
int main( void ) {
PC_DDR_bit.DDR7 = 1; // Ножка PC7 конфигурируется на вывод PD_CR1_bit.C17 = 1; // Выход типа Push-pull PD_CR2_bit.C27 = 1; // Скорость переключения - до 10 МГц.
PC_DDR_bit.DDR4 = 1; // Ножка PC4 конфигурируется на вывод PC_CR1_bit.C14 = 1; // Выход типа Push-pull PC_CR2_bit.C24 = 1; // Скорость переключения - до 10 МГц.
PD_DDR_bit.DDR2 = 0; // Ножка PD2 конфигурируется на ввод PD_CR1_bit.C12 = 0; // Выход плавающий - установлен подтягивающий резистор PD_CR2_bit.C22 = 1; // Прерывание ВКЛючено
PD_DDR_bit.DDR4 = 0; // Ножка PD4 конфигурируется на ввод PD_CR1_bit.C14 = 0; // Выход плавающий - установлен подтягивающий резистор PD_CR2_bit.C24 = 0; // Прерывание отключено
//Настраиваем оба прерывания на срабатывание по спаду напряжения (задний фронт) EXTI_CR2_bit.P2IS = 2;
asm("RIM"); //Глобально разрешаем прерывания
while (1) //В цикле будем переключать светодиоды { if (PD_IDR_bit.IDR4 == 0) // Проверяем состояние кнопки { PC_ODR_bit.ODR7 = 0; //Подтянем пин к земле - светодиод горит PC_ODR_bit.ODR4 = 1; //Подтянем к +VCC - светодиод погас SomeDelay(); // ждем 3 секунды } else if (PD_IDR_bit.IDR4 == 1) // Проверяем состояние кнопки { PC_ODR_bit.ODR7 = 1; //Подтянем к +VCC - светодиод погас PC_ODR_bit.ODR4 = 0; //Подтянем пин к земле - светодиод горит SomeDelay(); // ждем 3 секунды } } } Прерывание "стянутое" с примера STM8L, не работает, значит, если мыслить логически, на "S" оно реализуется другим способом? Просьба не отправлять в мануалы (я там уже был ), а если не трудно, привести пример практической работы с прерыванием по входам. Заранее спасибо. P.S. JAR 1.40.1, хидер от него же...
Где: <номер прерывания> - номер прерывания в hex формате. Берется значение из даташита на микроконтроллер и к нему прибавляется 2. <имя прерывания> - любое имя, понятное вам.
oleg110592, спасибо вам, добрый человек, начал потихоньку вникать, вопрос возник такой, возможно ли в прерывании (либо в цикле основной программы) оперативно переключать порты на ввод/вывод, ну что-то типа этого (пример компилируется на JAR 1.4 без ошибок, мк не прошивал, как-то боязно спалить): Спойлер
Код:
#pragma vector = 8 //вектор прерывания для порта D (6+2(RST&TRAP без номера)JAR обрабатывает, даже если число в десятичном формате!) __interrupt void Pin2_interrup (void) { while (PD_IDR_bit.IDR2 == 0) //Пока PD2=0 выполняем цикл... { PD_DDR_bit.DDR2 = 1; // Ножка PD2 конфигурируется на вывод (выдет или нет???) PD_CR1_bit.C12 = 1; // Выход типа Push-pull PD_CR2_bit.C22 = 1; // Скорость переключения - до 10 МГц.
PD_ODR_bit.ODR2 = 1; //Подтянем пин к VCC(+3.3V)(ничего не сгорит?) PC_ODR_bit.ODR7 = 0; //Подтянем пин к земле - светодиод горит PC_ODR_bit.ODR4 = 0; //Подтянем пин к земле - светодиод горит SomeDelay(); // ждем 3 секунды } EXTI_CR1_bit.PDIS = 1; //Перед выходом из прерывания необходимо вручную сбросить флаг, //Иначе тут-же вернемся обратно в обработчик.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения