Перейти к содержанию
    

STM32 – вопросы – проблемы - решения.

Итого: BRR = 22*16 + 12 = 364. Две записи в регистр, одно чтение и операция "Или".

(42e6 * 16)/(16*115200) = 42e6 / 115200 = 364. Мистика, не правда ли?

...

Одна запись в регистр. Не трогая калькулятор. И если скорость или частоту изменить понадобится - тоже калькулятор не понадобится, не говоря уже о том, чтобы внимательно просматривать весь исходник в поисках таких магических цифр как ваши 22 и 12.

Есть тонкость, связанная с нецелым делением частоты на скорость. Я тоже делил просто:

USART2->BRR = (36000000 / 57600);

Получалось число без остатка (625), все работало идеально.

Но когда пришлось делить 32000000 на 57600, получилось 555,555... И это число желательно округлить до 556, тогда ошибка будет меньше. Делаю так (прибавляю 0,5 к результату, потом дробную часть теряю):

USART1->BRR = (((32000000<<1) / 57600) + 1)>>1;

В результате загружается 556 = 0x22C. В мануале RM0038 на STM32L151 именно это число, разбитое на 0x22 (37) и 0xC (0,75), показано в таблице 129.

Вашему числу, кстати, тоже единички недостает. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда уж лучше так:

USART2->BRR = (36000000 + 57600 / 2) / 57600;

Нагляднее, мне кажется.

А вообще разница между 555 и 556 настолько мала, что и говорить не о чем :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда уж лучше так:

А вообще разница между 555 и 556 настолько мала, что и говорить не о чем :-)

Да, пожалуй. А разница разнице рознь. :) На высоких скоростях при малых частотах уже может быть заметно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Говорят на сайте производителя должна быть библиотека и примеры для STM32L151 . Даёте пожалуйста ссылку по которой её можно скачать.

В гугле по запросу "standard peripheral library stm32" нашёл вот это

http://62.193.238.133/inchtml.php?fdir=pag...p;fnam=stm32lib

Но скачать не могу , говорит "Not Autorized" , хотя я зарегистрировался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MiklPolikov Попробуй тут поискать. http://www.st.com/internet/mcu/family/141.jsp
Изменено пользователем Murk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл, спасибо.

 

 

Ещё вопрос : выполнил какой-то код, который видимо изменил настройки тех пинов на которых jtag . И при попытке прошить по jtag стала вылезать ошибка jtag comunication failure .

В прошлые разы получалось сбросить питание и сделать FLASH > ERASE . А сейчас всё равно говорит jtag comunication failure .

Как вернуть процессор в рабочее состояние ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там от состояния выводов BOOT0 и BOOT1 все зависит.

 

У меня BOOT0 на земле, а BOOT1 висит в воздухе. Это означает Main Flash memory is selected as the boot space . А что ещё делать с BOOT , что бы работать по jtag ?

 

И ещё попрос : почему процессор STM32L151CBU6 вылетает из отладки и keil начинает ругатся на jtag communication falure после вот этой строчки , которая не влияет на пини jtag ?

Все остальные подобные строчки проходятся.

 

GPIOA->BSRRL=GPIO_BSRR_BS_2 ;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ткнул тестером - оказалось процессор держит NRST в низком уровне. Хотя только что работал . Что с ним случилось ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делаю первые отладки на IAR EWARM v6.21 для STM32F105BG

Вопрос по отладке с помощью Simulator

Не получается запустить счетчик (TIM2 и др.пробовал).

На "живом" CPU ч/з SWD - все работает , счетчик считает отлично. Т.е. TIM2_CNT при каждой остановке показывет насчитананное.

Перехожу на отладку симулятором IAR. Счетчик стоит как замороженный.

Пробовал примеры из библиотеки, а также просто вызовами ф-ций станд.периф. библиотеки. Не хочет считать!

Теперь упростил до минимума- все равно не считает!

Вот упрощенный до предела кодик:

 

int main(void){

 

RCC->APB1ENR |= (uint32_t)0x00000001;

TIM2->CR1 |= (uint32_t)0x00000001;

while (1) { }

 

}

 

TIM2_CNT не хочет изменяться, стоит на 0.

 

Подскажите пжста в чем загвоздка?

:(

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня BOOT0 на земле, а BOOT1 висит в воздухе. Это означает Main Flash memory is selected as the boot space . А что ещё делать с BOOT , что бы работать по jtag ?

Да, я ошибся. На счет ресета, так он может быть подкорочен внутренним транзистором. А условия для внутреннего сброса смотрите в контексте Вашей ситуации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос по отладке с помощью Simulator

Не получается запустить счетчик (TIM2 и др.пробовал).

.....

Подскажите пжста в чем загвоздка?

Загвоздка в том, что вы поленились прочитать документацию на симулятор IAR (C-SPY). В ней английским по белому написано, что симулятор симулирует только ядро, и никак не симулирует периферию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Загвоздка в том, что вы поленились прочитать документацию на симулятор IAR (C-SPY). В ней английским по белому написано, что симулятор симулирует только ядро, и никак не симулирует периферию.

 

Спасибо!

 

Хотя это несколько не ожиданно!

Это резко затрудняет отладочный процесс. Особенно при отсутствии рабочей платы

 

C-Spy читал , но повидимому не достаточно внимательно. Не ожидал такого подхода со стороны IAR!

:-(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Загвоздка в том, что вы поленились прочитать документацию на симулятор IAR (C-SPY). В ней английским по белому написано, что симулятор симулирует только ядро, и никак не симулирует периферию.

 

Для того, чтобы разобраться взял "C-SPY® Debugging Guide"

В нем, в разделе "The IAR C-SPY Simulator - FEATURES" стр.38 четко написано:

 

"...In addition to the general features in C-SPY, the simulator also provides:

...

Peripheral simulation (using the C-SPY macro system in conjunction with immediate breakpoints).

.."

 

Не смогли бы Вы мне уточнить, где же написано про отсутствие поддержки периферии в Simulator?

Буду Вам благодарен!

 

:-)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для того, чтобы разобраться взял "C-SPY® Debugging Guide"

В нем, в разделе "The IAR C-SPY Simulator - FEATURES" стр.38 четко написано:

 

"...In addition to the general features in C-SPY, the simulator also provides:

...

Peripheral simulation (using the C-SPY macro system in conjunction with immediate breakpoints).

.."

Вот именно. Если вы прочитаете описание этой macro system, то поймете, что вам предлагается использовать макросы C-SPY чтобы самому этими макросами описать поведение вашей периферии. И что же вы будете отлаживать - свою программу или свою модель периферии процессора из этих макросов? Это если у вас хватит терпения описать на этих макросах хотя бы один периферийный модуль.

Не смогли бы Вы мне уточнить, где же написано про отсутствие поддержки периферии в Simulator?
Как раз в отцитированном вами фрагменте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...