реклама на сайте
подробности

 
 
33 страниц V  « < 22 23 24 25 26 > »   
Closed TopicStart new topic
> STM32 – вопросы – проблемы - решения.
Danis
сообщение Jan 31 2012, 17:52
Сообщение #346


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(mrcrook @ Jan 31 2012, 21:23) *
в том то и дело, если передавать числа или любые другие символы в терминал идет те же самые "a" и "ь".


Выводите в терминал данные в hex либо dec формате, у вас сейчас стоит Ascii или Ansi.
Вот от сюда скачайте нормальный терминал: Serial Terminal: RealTerm
Тогда сможете оценить правильность.
На счет картинки, я имел ввиду что она слишком большая, хотя показываете всего одну строку.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
mrcrook
сообщение Jan 31 2012, 18:27
Сообщение #347





Группа: Участник
Сообщений: 13
Регистрация: 31-01-12
Из: Новоуральск
Пользователь №: 69 990



ну окей, поставил другую терминалку на прием в виде хекс данных выдает "00E01CFCFC1CFCFCFCFCE0FCFC00E0FC00E01CE01CE0FC1CE0FC1CE0FC" а должен по я так думаю выдавать "48 69 5F 77 6F 72 6C 64 ......." или я заблуждаюсь?
Go to the top of the page
 
+Quote Post
Danis
сообщение Jan 31 2012, 18:40
Сообщение #348


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(mrcrook @ Jan 31 2012, 22:27) *
ну окей, поставил другую терминалку на прием в виде хекс данных выдает "00E01CFCFC1CFCFCFCFCE0FCFC00E0FC00E01CE01CE0FC1CE0FC1CE0FC" а должен по я так думаю выдавать "48 69 5F 77 6F 72 6C 64 ......." или я заблуждаюсь?


Если желаете COM порт потестировать через терминал, лучше сделать эхо сервер на отладочной плате. Передаете из терминала произвольный байт или строку, ловите байт в прерывании Rx и оправляете по Tx обратно. Начните с передачи/приема всего одного байта. Если передаете из контроллера в ПК буфер данных (не строку), то не нужно пользоваться функцией print. То, что Вы показываете, похоже больше на «абро-кадабру», рекомендую начать с приема/передачи всего одного байта, без использования строк и строковых функций.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
mrcrook
сообщение Jan 31 2012, 19:09
Сообщение #349





Группа: Участник
Сообщений: 13
Регистрация: 31-01-12
Из: Новоуральск
Пользователь №: 69 990



Передаю FF получаю FC как так хрен знает.
Код
int main(void)
{

        vUSART2_Init();

        USART_SendData(USART2, 0xFF);
        while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) {}

        return 0;
}



видимо как то криво затактирован usart. потыкал скорости в терминале при 38400 бод все заработало. будем разбираться.



Сообщение отредактировал mrcrook - Jan 31 2012, 19:10
Go to the top of the page
 
+Quote Post
AndreyKar
сообщение Feb 1 2012, 04:47
Сообщение #350


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 17-01-07
Пользователь №: 24 508



Цитата(mrcrook @ Jan 31 2012, 22:09) *
видимо как то криво затактирован usart. потыкал скорости в терминале при 38400 бод все заработало. будем разбираться.

Чего тут думать, RCC ковыряй, да кварцы (источники частоты).

Сообщение отредактировал AndreyKar - Feb 1 2012, 04:48
Go to the top of the page
 
+Quote Post
dezna
сообщение Feb 1 2012, 05:11
Сообщение #351


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(brag @ Jun 9 2011, 13:40) *
точно. даже после убирания питания, закорачивания всех ног на землю и ожидания 10 минут, jtag отвечает на команды, но дальше дело не идет, проц не видится дебаггером(jlink в том числе) и жрет раза в 2 больше тока,чем когда работает. уже 2 таких камня лежит

у меня примерно также было. не отвечал проц через дебаггер, после экспериментов с залочиванием.
каким-то образом установилась защита от чтения (глубже не разбирался)
решилось всё давольно просто - использованием штатного бутлоадера.
BOOT0 и RESET симулировал ручками: BOOT - 10кОм на 3В, RESET - передёргивание питания.
с помощью програмуль ничего не получилось, т.к. они хотят сами ресетом управлять и без этого никак
команды слал из терминала (скорость значения не имеет, 8E1):
0x7F - контроллер настраивает скорость обмена (ответ был 0x79)
зетем собственно сбрасываем защиту от чтения
0x92 0x6D (ответ 0x79 0x79)
собственно и всё!
после этого я спокойно залил программу через JTAG
так что может у тебя такая же проблема.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Feb 1 2012, 12:13
Сообщение #352


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



не установлены параметры: старт-бит, стоп-бит. не затактирован AFIO.
Go to the top of the page
 
+Quote Post
mrcrook
сообщение Feb 1 2012, 12:38
Сообщение #353





Группа: Участник
Сообщений: 13
Регистрация: 31-01-12
Из: Новоуральск
Пользователь №: 69 990



Цитата(smalcom @ Feb 1 2012, 18:13) *
не установлены параметры: старт-бит, стоп-бит. не затактирован AFIO.

старт-бит, стоп-бит установлены по умолчанию в структуре USART_InitStructure так же как и бауд рейт. все остальные параметры шаблона меня устроили тоесть пакет 8 бит 1 стоп бит ну и т.д. поэтому изменял только бауд рейт.

насчет AFIO не понял что вообще за зверь =) если можно поясните, в примерах не разу не встречалось вроде.
Go to the top of the page
 
+Quote Post
dezna
сообщение Feb 2 2012, 03:57
Сообщение #354


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(mrcrook @ Feb 1 2012, 16:38) *
старт-бит, стоп-бит установлены по умолчанию в структуре USART_InitStructure так же как и бауд рейт. все остальные параметры шаблона меня устроили тоесть пакет 8 бит 1 стоп бит ну и т.д. поэтому изменял только бауд рейт.

насчет AFIO не понял что вообще за зверь =) если можно поясните, в примерах не разу не встречалось вроде.

AFIO нужен только если переназначаешь ноги перефирии на другие ноги проца,
если используются по умолчанию - то он вообще не нужен.
смотри внимательно настройку скорости обмена! там хитрый регистр BRR в котором старшие 12 бит мантисса (целое число), а младшие
4 бита - дробная часть. т.е. можно задавать делитель типа: 10.75 или 1200.5
Go to the top of the page
 
+Quote Post
Serj78
сообщение Feb 2 2012, 04:32
Сообщение #355


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Цитата(AndreyKar @ Jan 23 2012, 10:06) *
В Reference manual в п.31.8.1 SW protocol introduction сказано: "For SWDIO bidirectional management, the line must be pulled-up on the board (100 KΩ
recommended by ARM)." Уж не знаю, как строго надо этого придерживаться, но я не его не ставлю (внутреннего хватает).
ЗЫ: народ, какие разъемы ставите на этот интерфейс?


А вот в RM008 сказано, (пункт 31.4.3)

"To avoid any uncontrolled I/O levels, the STM32F10xxx embeds internal pull-ups and pulldowns
on JTAG input pins:
● NJTRST: Internal pull-up
● JTDI: Internal pull-up
● JTMS/SWDIO: Internal pull-up
● TCK/SWCLK: Internal pull-down"

Этот резистор составляет ~30к ( ток ноги на землю 100мка)

Кажется внешний - излишен.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 2 2012, 06:39
Сообщение #356


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ReRayne @ Jan 20 2012, 18:20) *
Написан PUTCHAR_PROTOTYPE, который по ITM посылает отладку в окно Debug (printf) Viewer в Keil. Можно ли как-то сделать, чтобы этот дебаг сразу логировался в файл?

Похоже что нет.
Я тоже сделал отладку в ITM согласно мануалу
CODE
#define itm_port8(n) (*((volatile uint8_t *)(0xE0000000+4*(n))))
#define itm_port16(n) (*((volatile uint16_t*)(0xE0000000+4*(n))))
#define itm_port32(n) (*((volatile uint32_t*)(0xE0000000+4*(n))))
#define DEMCR (*((volatile uint32_t*)(0xE000EDFC)))
#define TRCENA 0x01000000
//=========================================================================
#define dputchar(x) \
do \
{ \
if (DEMCR & TRCENA) \
{ \
while (itm_port32(0) == 0) \
{ \
; \
} \
\
itm_port8(0) = (x); \
} \
} \
while (0)
Включил TRACE в опциях отладчика согласно мануалу.
Включил ITM порт.
Но ничего не выходит. Виснет на while (itm_port32(0) == 0) {;}
Может отладчик не тот JLINK8, может он только с ULINK2 может?
Работает ли эта фишка при отладке по SWD (у меня подключены лишь SWDIO SWCLK и шьется и дебажится нормально, а вот с ITM никак)?
Что не так?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
mrcrook
сообщение Feb 2 2012, 12:28
Сообщение #357





Группа: Участник
Сообщений: 13
Регистрация: 31-01-12
Из: Новоуральск
Пользователь №: 69 990



Цитата(dezna @ Feb 2 2012, 09:57) *
смотри внимательно настройку скорости обмена! там хитрый регистр BRR в котором старшие 12 бит мантисса (целое число), а младшие
4 бита - дробная часть. т.е. можно задавать делитель типа: 10.75 или 1200.5

благодарю, все запустилось как надо.
Код
    // Скорость 115.2 kbps. USARTDIV=FSYS(не частота процессора а частота порта)/(16*baud) = 42e6/(16*115200) = 22,75.
    USART2->BRR=(22<<4); // Целая часть коэффициента деления USART1.
    USART2->BRR|=12; // Дробная часть*16 = 0,75*16 = 12 (окр).

    USART_Cmd( USART2, ENABLE );
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 2 2012, 14:26
Сообщение #358


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (mrcrook @ Feb 2 2012, 14:28) *
благодарю, все запустилось как надо.
CODE
    42e6/(16*115200) = 22,75
    USART2->BRR=(22<<4); // Целая часть коэффициента деления USART1.
    USART2->BRR|=12; // Дробная часть*16 = 0,75*16 = 12 (окр).

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

(42e6 * 16)/(16*115200) = 42e6 / 115200 = 364. Мистика, не правда ли?
Имеем:
CODE
#define F_SYS          42000000UL
#define BAUDRATE   115200

    // USARTDIV=FSYS(не частота процессора а частота порта)/(16*baud)
    // USART_BRR = USARTDIV * 16
    USART2->BRR = F_SYS / BAUDRATE;

    USART_Cmd( USART2, ENABLE );

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

Эти писатели документации просто вредители какие-то, если после их примеров получается такой код как ваш. А вы ленитесь осмыслить их пример, делаете тупо методом "цельнотянутости".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 2 2012, 14:54
Сообщение #359


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Feb 2 2012, 18:26) *
Эти писатели документации просто вредители какие-то, если после их примеров получается такой код как ваш. А вы ленитесь осмыслить их пример, делаете тупо методом "цельнотянутости".

+1. Тоже читал их опус про целую и дробную часть и дивился искусности МК-строителей, пока не осознал, что нужно тупо записать в регистр Fbus/BaudRate.
Go to the top of the page
 
+Quote Post
mrcrook
сообщение Feb 2 2012, 16:04
Сообщение #360





Группа: Участник
Сообщений: 13
Регистрация: 31-01-12
Из: Новоуральск
Пользователь №: 69 990



Цитата(Сергей Борщ @ Feb 2 2012, 20:26) *
Итого: BRR = 22*16 + 12 = 364. Две записи в регистр, одно чтение и операция "Или".

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

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

Сообщение отредактировал mrcrook - Feb 2 2012, 16:04
Go to the top of the page
 
+Quote Post

33 страниц V  « < 22 23 24 25 26 > » 
Closed TopicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01504 секунд с 7
ELECTRONIX ©2004-2016