27.02.2013, 13:42
|
|
Частый гость
Регистрация: 08.10.2009
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: FAQ по STM8
Подскажите пожалуйста, как так прошить STM8L151, чтобы не потерять заводской bootloader?
Сейчас после включения питания, в течении 1 секунды я могу "войти" в bootloader, но как только я зашиваю в чип прошивку, повторно войти в бутлоадер уже не удаётся. Если верить TN0189 то надо записать в Option Bytes значение 0x55AA. В "чистом" чипе было только 0xAA, я дописал туда 0х55. Попробовал записать моргалку светодиодом, и всё. Бутлоадера не стало. Стираем чип через SWIM и снова всё работает.
Можно как-то исключить в будущем это?
|
|
|
|
27.02.2013, 15:07
|
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: FAQ по STM8
|
|
|
|
03.03.2013, 12:40
|
|
Частый гость
Регистрация: 15.11.2009
Сообщений: 28
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Hi all!
Проблема заключается в том, что компилятор космик устанавливает бит который не нужно устанавлитвать.
Пример программы:
#include ‹STM8S105C6.h›
#define TEST 2
main()
{
PB_DDR = 255;//здесь порт настраивается на выход
PB_CR1 = 255;
PB_ODR = (TEST‹‹1);// Мы устанавливает "1" на вывод 2 порта В
//И она уставливается
PB_ODR = (TEST‹‹0);//Мы устанавливает "0" на вывод 2 порта В
//И он устанавливается. А вот тут самое интересное. Которое заключеется в том, что на выводе 1, который в
//этой программе не задействован, устанавливается "1"
while (1)
{
_asm("nop");//А тут просто брейкпойнт
}
}
На что отладчик в окне дизассемблер заявляет:
0x80ce ‹main› 0x35FF5007 MOV 0x5007,#0xff MOV _PB_DDR,#0xff
main.c:6 PB_CR1 = 255;
0x80d2 ‹main+4› 0x35FF5008 MOV 0x5008,#0xff MOV _PB_CR1,#0xff
main.c:7 PB_ODR = (TEST‹‹1);
0x80d6 ‹main+8› 0x35045005 MOV 0x5005,#0x04 MOV _PB_ODR,#0x04
main.c:8 PB_ODR = (TEST‹‹0);
0x80da ‹main+12› 0x35025005 MOV 0x5005,#0x02 MOV _PB_ODR,#0x02
main.c:12 _asm("nop");
0x80de ‹main+16› 0x9D NOP NOP
0x80df ‹main+17› 0x20FD JRT 0x80de JRT 0x80de
rupt_vector.c:17 return;
То есть компилятор самовольно устанавил бит (номер 2) в регистре периферии (PB_ODR).
Это баг компилятора? Или я неправильно понял ситуацию и что-то не так сделал?
И можно ли какими-то путями (например, опциями компилятора) гарантировано исключить подобные ситуации?
|
|
|
|
04.03.2013, 09:15
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: FAQ по STM8
PB_ODR = (TEST‹‹1);// Мы устанавливает "1" на вывод 2 порта В
2‹‹1=4
PB_ODR = (TEST‹‹0);//Мы устанавливает "0" на вывод 2 порта В
2‹‹0=2
Может так:
PB_ODR |= (1‹‹2);// Мы устанавливает "1" на вывод 2 порта В
PB_ODR &= ~(1‹‹2);//Мы устанавливает "0" на вывод 2 порта В
|
|
|
Сказали "Спасибо" oleg110592
|
|
|
04.03.2013, 20:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от operator
|
PB_ODR = (TEST‹‹0);//Мы устанавливает "0" на вывод 2 порта В
|
Это ошибка. Попробуйте такой код:
Код:
|
#define Pin5 5
#define Pin7 7
printf("Pin %d mask-0 is: %d\n",Pin5,(Pin5‹‹0));
printf("Pin %d mask-0 is: %d\n",Pin7,(Pin7‹‹0));
printf("Pin %d mask-1 is: %d=n",Pin5,(Pin5‹‹1));
printf("Pin %d mask-1 is: %d\n",Pin7,(Pin7‹‹1)); |
и посмотрите, каков результат в двоичном представлении.
Ох, уж эти, компиляторы!
__________________
There's always more than one way to skin a cat.
|
|
|
Сказали "Спасибо" tempora
|
|
|
05.03.2013, 18:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от operator
|
Hi all! Проблема ...
|
Ну как, задышал компилятор?
__________________
There's always more than one way to skin a cat.
|
|
|
|
05.03.2013, 18:45
|
|
Частый гость
Регистрация: 15.11.2009
Сообщений: 28
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: FAQ по STM8
Да задышал вроде. ![Улыбка](images/smilies/icon_smile.gif)
Сейчас пытаюсь аппартный SPI запустить.
|
|
|
|
05.03.2013, 20:25
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от operator
|
Сейчас пытаюсь аппартный SPI запустить.
|
Куда ? В космос ?
__________________
Осторожно , злой кот
|
|
|
|
16.03.2013, 18:41
|
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: FAQ по STM8
На рутрекере появился IAR for STM8 V1.40.1
и его похоже научили работать с битами.
__________________
Не ошибается лишь тот, кто ни чего не делает!
Последний раз редактировалось woroba; 16.03.2013 в 18:50.
|
|
|
|
16.03.2013, 19:47
|
|
Временная регистрация
Регистрация: 08.02.2010
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 14 раз(а) в 12 сообщении(ях)
|
Re: FAQ по STM8
зато разучились показывать навигацию по проекту - в правом верхнем углу
есть значек показать все функции пректа - там пусто. И еще одна полезность пропала, раньше можно было щелкнуть правой кнопкой мыши по функции и перейти к ее определению - теперь то же нет.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:36.
|
|