Danis 0 31 января, 2012 Опубликовано 31 января, 2012 · Жалоба в том то и дело, если передавать числа или любые другие символы в терминал идет те же самые "a" и "ь". Выводите в терминал данные в hex либо dec формате, у вас сейчас стоит Ascii или Ansi. Вот от сюда скачайте нормальный терминал: Serial Terminal: RealTerm Тогда сможете оценить правильность. На счет картинки, я имел ввиду что она слишком большая, хотя показываете всего одну строку. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrcrook 0 31 января, 2012 Опубликовано 31 января, 2012 · Жалоба ну окей, поставил другую терминалку на прием в виде хекс данных выдает "00E01CFCFC1CFCFCFCFCE0FCFC00E0FC00E01CE01CE0FC1CE0FC1CE0FC" а должен по я так думаю выдавать "48 69 5F 77 6F 72 6C 64 ......." или я заблуждаюсь? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Danis 0 31 января, 2012 Опубликовано 31 января, 2012 · Жалоба ну окей, поставил другую терминалку на прием в виде хекс данных выдает "00E01CFCFC1CFCFCFCFCE0FCFC00E0FC00E01CE01CE0FC1CE0FC1CE0FC" а должен по я так думаю выдавать "48 69 5F 77 6F 72 6C 64 ......." или я заблуждаюсь? Если желаете COM порт потестировать через терминал, лучше сделать эхо сервер на отладочной плате. Передаете из терминала произвольный байт или строку, ловите байт в прерывании Rx и оправляете по Tx обратно. Начните с передачи/приема всего одного байта. Если передаете из контроллера в ПК буфер данных (не строку), то не нужно пользоваться функцией print. То, что Вы показываете, похоже больше на «абро-кадабру», рекомендую начать с приема/передачи всего одного байта, без использования строк и строковых функций. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrcrook 0 31 января, 2012 Опубликовано 31 января, 2012 (изменено) · Жалоба Передаю FF получаю FC как так хрен знает. int main(void) { vUSART2_Init(); USART_SendData(USART2, 0xFF); while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) {} return 0; } видимо как то криво затактирован usart. потыкал скорости в терминале при 38400 бод все заработало. будем разбираться. Изменено 31 января, 2012 пользователем mrcrook Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Karloson 0 1 февраля, 2012 Опубликовано 1 февраля, 2012 (изменено) · Жалоба видимо как то криво затактирован usart. потыкал скорости в терминале при 38400 бод все заработало. будем разбираться. Чего тут думать, RCC ковыряй, да кварцы (источники частоты). Изменено 1 февраля, 2012 пользователем AndreyKar Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dezna 0 1 февраля, 2012 Опубликовано 1 февраля, 2012 · Жалоба точно. даже после убирания питания, закорачивания всех ног на землю и ожидания 10 минут, jtag отвечает на команды, но дальше дело не идет, проц не видится дебаггером(jlink в том числе) и жрет раза в 2 больше тока,чем когда работает. уже 2 таких камня лежит у меня примерно также было. не отвечал проц через дебаггер, после экспериментов с залочиванием. каким-то образом установилась защита от чтения (глубже не разбирался) решилось всё давольно просто - использованием штатного бутлоадера. BOOT0 и RESET симулировал ручками: BOOT - 10кОм на 3В, RESET - передёргивание питания. с помощью програмуль ничего не получилось, т.к. они хотят сами ресетом управлять и без этого никак команды слал из терминала (скорость значения не имеет, 8E1): 0x7F - контроллер настраивает скорость обмена (ответ был 0x79) зетем собственно сбрасываем защиту от чтения 0x92 0x6D (ответ 0x79 0x79) собственно и всё! после этого я спокойно залил программу через JTAG так что может у тебя такая же проблема. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 1 февраля, 2012 Опубликовано 1 февраля, 2012 · Жалоба не установлены параметры: старт-бит, стоп-бит. не затактирован AFIO. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrcrook 0 1 февраля, 2012 Опубликовано 1 февраля, 2012 · Жалоба не установлены параметры: старт-бит, стоп-бит. не затактирован AFIO. старт-бит, стоп-бит установлены по умолчанию в структуре USART_InitStructure так же как и бауд рейт. все остальные параметры шаблона меня устроили тоесть пакет 8 бит 1 стоп бит ну и т.д. поэтому изменял только бауд рейт. насчет AFIO не понял что вообще за зверь =) если можно поясните, в примерах не разу не встречалось вроде. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dezna 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба старт-бит, стоп-бит установлены по умолчанию в структуре USART_InitStructure так же как и бауд рейт. все остальные параметры шаблона меня устроили тоесть пакет 8 бит 1 стоп бит ну и т.д. поэтому изменял только бауд рейт. насчет AFIO не понял что вообще за зверь =) если можно поясните, в примерах не разу не встречалось вроде. AFIO нужен только если переназначаешь ноги перефирии на другие ноги проца, если используются по умолчанию - то он вообще не нужен. смотри внимательно настройку скорости обмена! там хитрый регистр BRR в котором старшие 12 бит мантисса (целое число), а младшие 4 бита - дробная часть. т.е. можно задавать делитель типа: 10.75 или 1200.5 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serj78 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба В 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мка) Кажется внешний - излишен. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба Написан PUTCHAR_PROTOTYPE, который по ITM посылает отладку в окно Debug (printf) Viewer в Keil. Можно ли как-то сделать, чтобы этот дебаг сразу логировался в файл? Похоже что нет. Я тоже сделал отладку в ITM согласно мануалу #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 никак)? Что не так? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrcrook 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба смотри внимательно настройку скорости обмена! там хитрый регистр 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 ); Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба благодарю, все запустилось как надо. 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. Мистика, не правда ли? Имеем: #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. Эти писатели документации просто вредители какие-то, если после их примеров получается такой код как ваш. А вы ленитесь осмыслить их пример, делаете тупо методом "цельнотянутости". Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба Эти писатели документации просто вредители какие-то, если после их примеров получается такой код как ваш. А вы ленитесь осмыслить их пример, делаете тупо методом "цельнотянутости". +1. Тоже читал их опус про целую и дробную часть и дивился искусности МК-строителей, пока не осознал, что нужно тупо записать в регистр Fbus/BaudRate. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrcrook 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 (изменено) · Жалоба Итого: BRR = 22*16 + 12 = 364. Две записи в регистр, одно чтение и операция "Или". (42e6 * 16)/(16*115200) = 42e6 / 115200 = 364. Мистика, не правда ли? в данный момент было не особо важно, а вот за пояснение спасибо действительно более понятно и просто, чем какие то манипуляции с калькулятором. Изменено 2 февраля, 2012 пользователем mrcrook Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться