Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 – вопросы – проблемы - решения.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
ELEKTROS
посмотрел, я также делаю всё, вставил ваш код, не работает, что еще на таймер 1 влиять может?
Danis
Цитата(ELEKTROS @ Dec 8 2011, 23:04) *
Как правильно запустить ШИМ на базе TIM1 в STM32f, а то перепробывал кучу разных вариантов даже готовые какието кем то деланные, но всёравно не работает.


Ну, как-нибудь локализуйте проблему. Что там в этим ШИМ особенного то? У вас именно с Т1 не получатся или вообще с любым другим таймером? Попробуйте задействовать другие таймеры, каналы. Запускал ШИМ на разных таймерах, все работало как задумано. Наверное, где то ляп у Вас в программе.
ELEKTROS
на 2, 3, 15 пробую всё работает, а на 1-м не в какую.
AHTOXA
Последнюю строчку из моего примера точно не просмотрели?
Код
    TIM1->BDTR |= TIM_BDTR_MOE; // Специальная фишка у T1 и T8 - Main Output Enable

ReRayne
Ребят, привет!

Имеется STM32F217ZG + 512Kb SRAM.
Среда разработки Keil uVision 4.

Два вопроса, помогите, пожалуйста:
1. В прошивке очень много статических данных, которые вынесены в SRAM. При старте прошивки в main SRAM поднимается функцией из примера с st.com. Далее функция инициализации переменных все данные инициализирует в SRAM. Очень неудобно дописывать каждый раз при добавлении переменной функцию. Можно как-то сделать, чтобы SRAM монополизировался до старта имеджа прошивки?
2. Можно как-то в Keil прикрутить auto complete кода или к Eclipse CDT прикрутить компилятор Keil?

За ссылки буду очень-очень благодарна =)
scifi
Цитата(ReRayne @ Dec 12 2011, 15:09) *
При старте прошивки в main SRAM поднимается функцией из примера с st.com. Далее функция инициализации переменных все данные инициализирует в SRAM.

Криво. Это от незнания так сделано.

Цитата(ReRayne @ Dec 12 2011, 15:09) *
Можно как-то сделать, чтобы SRAM монополизировался до старта имеджа прошивки?

Очевидно, имеется в виду до старта main(), и не монополизировался, а инициализировался :-) Не только можно, но и нужно. Следует подправить startup файл. У меня он называется STM32F10x.s, к примеру. В нём перед переходом в __main следует "поднять SRAM".
Serj78
Цитата(ELEKTROS @ Dec 9 2011, 11:05) *
посмотрел, я также делаю всё, вставил ваш код, не работает, что еще на таймер 1 влиять может?


Если вы пользуйтесь кейловским визардом- там есть ошибка- - он не выставляет бит MOE в BTDR , выставляйте руками после этого индусского визарда.
ELEKTROS
Цитата(Serj78 @ Dec 12 2011, 17:43) *
Если вы пользуйтесь кейловским визардом- там есть ошибка- - он не выставляет бит MOE в BTDR , выставляйте руками после этого индусского визарда.

я iar пользуюсь и библиотеками к нему, но когда быстродействие нужно то с регистрами работаю. Пробывал и на прямую в регистры писать, без толку.
wedmeed
?Что будет если:
1) Включить для ноги альтернативные функции
2) Включить на эту ногу все возможные альтернативные функции (USART, EINT,ADC,PWM и т.д.)
В чем идея - на одну ножку приходится больше двух альтернативных функций (по крайней мере в STM32F100). Если бы их было хотя бы 2, причем одна на вход, другая на выход - то понятно, заработала бы та, в соответствии с которой настроена нога. В настройках ноги включается только то что это альтернативная функция, а какая - нигде не указывается.

пример: PA2
USART2_TX/ ADC1_IN2/
TIM2_CH3 / TIM15_CH1
scifi
Цитата(wedmeed @ Dec 22 2011, 10:18) *
В настройках ноги включается только то что это альтернативная функция, а какая - нигде не указывается.

Внимательнее читайте даташит:
Цитата
If several peripherals share the same I/O pin, to avoid conflict between these alternate functions only one peripheral should be enabled at a time through the peripheral clock enable bit (in the corresponding RCC peripheral clock enable register).
Flexz
Включите и увидите sm.gif
Вообще размещению альтернативных функций посвящен солидный раздел ерраты F1. Вот в F2 переключение функций наконец-то сделано по-человечески, на каждую ножку есть регистр выбирающий какую именно функцию выводить.
wedmeed
Цитата(scifi @ Dec 22 2011, 11:12) *
If several peripherals share the same I/O pin, to avoid conflict between these alternate functions only one peripheral should be enabled at a time through the peripheral clock enable bit (in the corresponding RCC peripheral clock enable register).

То-есть по-хорошему если я буду пользовать TIM2, то USART2 мне даже тактировать нельзя?
Flexz
эм.. не совсем так. Коммент мозговыносной. Просто нельзя одновременно включать линии периферии использующие данные ножки.
scifi
Цитата(wedmeed @ Dec 22 2011, 11:54) *
То-есть по-хорошему если я буду пользовать TIM2, то USART2 мне даже тактировать нельзя?

Если есть конфликт на ножке, то нельзя. Но в ряде случаев конфликт убирается при помощи remap.
Tahoe
Хочу попробовать работать с USB, используя HSI в качестве опоры PLL. Разумеется, будет предусмотрена подстройка частоты HSI от часового кварца. Вопрос простой, кто-нить уже так делал? Насколько стабильно работает?
НА данный момент камень STM32F103, но не думаю, что это принципиально.
EvilWrecker
Добрый день!

У меня совсем ламерский вопрос- но по причине впадания в бред изза долгого тупления в документацию и вообще усталости, не могу сообразить biggrin.gif

Имеется таймер(пусть общего назначения)- который считает до некоторого значения, по достижению которого формируется прерывание.Есть ли способом принудительного рестарта(что то типа RessetTIM_counter,RestartTIM- ну ви понимаете) каунтера до достижения этого значения?(кроме как,видимо, вырубить а потом врубить таймер)Интересует именно принудительный рестарт таймера.

Естественно хотелось что либо в духе функций из CMSIS но что то не видно- а интуиция подсказывает что такой ход(принудительный рестарт) должен существовать.

AHTOXA
TIMx->CNT = 0;
ну, или
TIM_SetCounter(TIMx, 0)
EvilWrecker
Уважаемый АНТОХА разрешите уточнить?

TIMx->CNT = 0

Где можно взять описание этого регистра?
Читаю http://www.st.com/internet/com/TECHNICAL_R.../CD00246267.pdf (балуюсь с дискавери малость) но нигде не вижу про него(а читаю очень долго maniac.gif )

TIM_SetCounter(TIMx, 0)

В STM32F10x Standard Peripherals Firmware Library в списке функий таймеров не могу найти ее- не могли бы вы сказать, откуда она взята?

Собственно то что вы написали - самый лучший вариант, но где можно посмотреть про это? wacko.gif
aT-DeviLru
Reference manual -> General-purpose timers (TIM2 to TIM5) -> TIMx2 to TIM5 registers -> TIMx counter (TIMx_CNT)
AHTOXA
Цитата(EvilWrecker @ Dec 24 2011, 18:41) *
Читаю http://www.st.com/internet/com/TECHNICAL_R.../CD00246267.pdf (балуюсь с дискавери малость) но нигде не вижу про него(а читаю очень долго maniac.gif )

Значит, ещё недостаточно долгоsm.gif. Там он называется TIMx_CNT (уже сказали).
Цитата(EvilWrecker @ Dec 24 2011, 18:41) *
В STM32F10x Standard Peripherals Firmware Library в списке функий таймеров не могу найти ее- не могли бы вы сказать, откуда она взята?

Собственно, я там особо не ориентируюсь, но находится она в файле stm32f10x_tim.c, а её объявление -- в stm32f10x_tim.h.
kan35
Цитата(Tahoe @ Dec 24 2011, 15:22) *
Хочу попробовать работать с USB, используя HSI в качестве опоры PLL. Разумеется, будет предусмотрена подстройка частоты HSI от часового кварца. Вопрос простой, кто-нить уже так делал? Насколько стабильно работает?
НА данный момент камень STM32F103, но не думаю, что это принципиально.

Тоже таким вопросом задавался. Примеры из IAR при комнатной температуре на HSI даже без калибровки по LSE работают вполне. Думаю, если калибровать то проблем уж точно не будет.
EvilWrecker
Цитата(AHTOXA @ Dec 24 2011, 20:36) *
Значит, ещё недостаточно долгоsm.gif. Там он называется TIMx_CNT (уже сказали).

Собственно, я там особо не ориентируюсь, но находится она в файле stm32f10x_tim.c, а её объявление -- в stm32f10x_tim.h.



Спасибо за наводку- сам долго тупил beer.gif
Danis
совместно CAN + USB на STM32F205 возможно ли? кто нить использовал? Сам не сталкивался, но помню, что то читал
о невозможности использования в STM32F103 серии из за совместных буферах, что ли.....
scifi
Цитата(Danis @ Dec 25 2011, 16:34) *
совместно CAN + USB на STM32F205 возможно ли? кто нить использовал? Сам не сталкивался, но помню, что то читал о невозможности использования в STM32F103 серии из за совместных буферах, что ли.....

В серии STM32F2xx в этом смысле всё нормально: мультиплексирование периферии на ножки сделано по-человечески. А вот в STM32F1xx сделано убого.
Danis
Цитата(scifi @ Dec 25 2011, 16:43) *
В серии STM32F2xx в этом смысле всё нормально: мультиплексирование периферии на ножки сделано по-человечески. А вот в STM32F1xx сделано убого.


ага, scifi, Спасибо Вам. Порылся в reference для F1 и F2, семейства.

В Reference manual для
STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx
and STM32F107xx advanced ARM-based 32-bit MCUs

Note: In low, medium-, high- and XL-density devices the USB and CAN share a dedicated 512-
byte SRAM memory for data transmission and reception, and so they cannot be used
concurrently (the shared SRAM is accessed through CAN and USB exclusively). The USB
and CAN can be used in the same application but not at the same time.

Память не подвела. Для F2 ничего подобного пока не вижу.
BOKEN
Добрый день! У меня вопрос по STM32F2XX. Подскажите пожалуйста на какой максимальной "реальной" скорости удается запустить порт SPI(и вроде бы совмещенный с ним I2S). Интересует скорость SPI порядка 60Мбит - достижима ли она с STM32F2XX?
Заранее благодарю!
scifi
Цитата(BOKEN @ Dec 27 2011, 13:37) *
Добрый день! У меня вопрос по STM32F2XX. Подскажите пожалуйста на какой максимальной "реальной" скорости удается запустить порт SPI(и вроде бы совмещенный с ним I2S). Интересует скорость SPI порядка 60Мбит - достижима ли она с STM32F2XX?

Даташит в помощь: SPI clock frequency - 30 MHz max.
BOKEN
Цитата(scifi @ Dec 27 2011, 12:51) *
Даташит в помощь: SPI clock frequency - 30 MHz max.

Спасибо! Читаю, есть еще режим I2S(в одном блоке с SPI) где clock внешний (стр. 676) - можно ли его использовать для построения SPI подобного интерфейса?
scifi
Цитата(BOKEN @ Dec 27 2011, 14:10) *
Спасибо! Читаю, есть еще режим I2S(в одном блоке с SPI) где clock внешний (стр. 676) - можно ли его использовать для построения SPI подобного интерфейса?

Наверное, можно. Но внешний клок не позволит увеличить частоту: она по-прежнему 30 МГц макс.
vlad_new
Кто нибудь мерил потребление VBAT с полностью выключенным STM32F1XX и без внешнего 32кГц кварца. По сути меня интересует, как долго не разрушится бекапная SRAM, если ее подпитывать от конденсатора, ионистора, ну или в крайнем случае, самой маленькой батарейкой.
PS: В даташитах указан ток ~1мкА, но с включенным внутреннем RC осциллятором.
Сергей Борщ
В цельнотянутом из scmRTOS файле startup.c в описании таблиц векторов последним словом в таблице (фактически, оно попадает на первое слово за таблицей) встречается магическое число (intfunc)0xF1E0F85F. Поиск в гугле показывает, что это число широко используется в стартапе stm32, но нигде нет ни единого упоминания - что это за число и нафига его туда вставили?
scifi
Цитата(Сергей Борщ @ Jan 2 2012, 16:19) *
В цельнотянутом из scmRTOS файле startup.c в описании таблиц векторов последним словом в таблице (фактически, оно попадает на первое слово за таблицей) встречается магическое число (intfunc)0xF1E0F85F. Поиск в гугле показывает, что это число широко используется в стартапе stm32, но нигде нет ни единого упоминания - что это за число и нафига его туда вставили?

Гугл в помощь. Вот тут есть правдоподобное объяснение:
Цитата
When you boot from RAM (via the BOOTx pins) the execution address is fixed (processor dependent), and not pulled from the +4 vector address.

As I recall the hex code placed by GCC effectively calls the correct address.

000001E0 F85F F1E0 ldr.w pc, [pc, #-480] ; $000004

This behaviour has been discussed on the forum before, but I don't remember seeing any explicit documentation. It suggests the processor is running something else first, but without some hardware trace it's hard to tell what.
Сергей Борщ
QUOTE (scifi @ Jan 2 2012, 17:07) *
Гугл в помощь.
Видать гугл у меня неправильный:
Нажмите для просмотра прикрепленного файла
Если "повторить поиск, включив опущенные результаты", то будет 3 таких же результата. Странно, что из дома дает 2 и 8 страниц ссылок, но содержание примерно такое же.


QUOTE (scifi @ Jan 2 2012, 17:07) *
Вот тут есть правдоподобное объяснение:
Спасибо. То есть поскольку в таблице находится не команда перехода, а абсолютный адрес, то отладчику непонятно, с какого адреса начинать выполнение. Поэтому добавляется фиктивная команда перехода по адресу из вектора сброса. Адрес этой команды известен и можно натравливать отладчик на эту команду. Сомнительное решение, учитывая что MSP из таблицы таким образом не инициализируется, только вручную в коде повторять то, что при нормальном запуске проц делает сам. Можно оба действия сделать в скрипте отладчика... Впрочем, отладчики бывают разные.
Но получается, что конкретно код 0xF1E0F85F будет работать с таблицей размером 480/4 = 120 векторов, а для таблиц другого размера код должен будет быть другим... Присмотрелся - действительно, код для таблиц разных семейств отличается, встречаются и ошибки копипаста:
CODE
    (intfunc)0xF108F85F /* @0x01CC */  <----------
#elif defined(STM32F10X_HD_VL)
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0
    (intfunc)0xF108F85F /* @0x1E0 */       <---------
#elif defined(STM32F10X_HD) || defined(STM32F10X_XL)
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0,0, 0,0,0,0,
    0,0,0,0,
    (intfunc)0xF1E0F85F  /* @0x1E0 */
Понятно, почему дома получал другое количество результатов - вероятно, искал по коду для другого семейства.
Теперь мучает другой вопрос: для чего они "добивают" таблицу нулями до размера, явно большего описанной в даташитах таблицы? А... кажется понял: "the execution address is fixed (processor dependent)". Вот чтобы попасть в этот адрес и добавляются лишние нули. Вычеркиваю. Проще сбросить проц.

P.S. В Ref. Manual-е от STM32F100x про этот fixed execution address не упоминается, отсюда и непонятки возникли.
scifi
Цитата(Сергей Борщ @ Jan 2 2012, 21:51) *
Видать гугл у меня неправильный:

"Вы просто не умеете его готовить" :-)
Тыц
AndreyKar
Народ, чего-то я совсем запутался(.
Подскажите про bit-band и extern.
Создаю main.h файл со структурой bit-band:
Код
typedef struct {
    unsigned bTime0            : 1;
}DispatcherTask __attribute__((bitband));

extern DispatcherTask Task;

Главный файл с мейн такой:
Код
DispatcherTask Task __attribute__((at(0x20000000)));
extern void Test(void);

int main(void){
    Task.bTime0 = 0;
    Test();
}
в нем все работает правильно, т.е. адресация Task.bTime0 на 0x22000000

Есть ещё один файл *.с:
Код
#include "main.h"

void Test(){
    Task.bTime0 = 0;
}

И вот в этой ф-ции начинаются траблы: адресация Task.bTime0 на 0x20000000((
Как это победить?

ЗЫ: Среда Keil 4.23


Всё, разобрался)). Надо было в *.h файле экстерн прописывать вместе с адресом:
extern DispatcherTask Task __attribute__((at(0x20000000)));
Почему вдруг так - загадка?
ReRayne
Написан PUTCHAR_PROTOTYPE, который по ITM посылает отладку в окно Debug (printf) Viewer в Keil. Можно ли как-то сделать, чтобы этот дебаг сразу логировался в файл?
lexatagan
Доброго времени суток. Собрал свою платку на STM32F103R6. И она не заработала, хотя предыдущая аналогичная плата работала. Нет связи по SWD. J-Flash ARM ведет себя так, как будто ничего не подключено кроме Target Vdd. И возник вопрос - какие условия необходимо соблюсти по минимому, чтобы какмень определился по SWD? Ну понятно подключить все Vdd, Vss, подключить к отладчику SWDIO, SWDCLK, Vdd Target, землю. Кварц вроде необязателен, но если он подключен и неисправен то проблема возникнет? Что еще должно быть обязательно подключено?
controller_m30
У меня STM32F217 подключен по SWD к плате stm32vldiscovery. 4 провода: GND, Vcc, SWDclk, SWDio.
В обвязке процессора: питание 3V с конденсаторами 0,1mf на каждом пине питания, и подтягивающий резистор 10к на Reset (хоть в даташите и указан встроенный подтягивающий резистор на Reset - но на всякий случай поставил внешний).
Кварц не используется. На ножке BOOT0 - GND.
Больше никаких навесок и подключений на процессоре не делал. Программа ST-LINK_Utility нормально определяет процессор, так-же быстро как и установленный на stm32vldiscovery STM32F100.
lexatagan
У меня аналогично все подключено, только кварц внешний, и периферия разная еще - LCD, RS485 приемник... Плата самодельная, так что конечно возможны соплии или непропаи, но все важные пины я проверил. Интересно, что предыдущую версию платы я не смог подключить по JTAG, после чего перешел на SWD, после чего проблем не наблюдалось. А вот эта версия заточена уже под SWD, но не работает.
AndreyKar
В 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)." Уж не знаю, как строго надо этого придерживаться, но я не его не ставлю (внутреннего хватает).
ЗЫ: народ, какие разъемы ставите на этот интерфейс?
Danis
Цитата(AndreyKar @ Jan 23 2012, 10:06) *
ЗЫ: народ, какие разъемы ставите на этот интерфейс?



Для программирования хватает 4-ре металлизированных отверстия на печатной плате |*...* * * |, с шагом 2,54. Одно пропущено, чтоб программатор зеркально не сконнектить. Для отладки запаиваю туда PLS-5 вилку, с отсутствующим (2-м пином).
lexatagan
Цитата(lexatagan @ Jan 22 2012, 14:37) *
Доброго времени суток. Собрал свою платку на STM32F103R6. И она не заработала, хотя предыдущая аналогичная плата работала. Нет связи по SWD. J-Flash ARM ведет себя так, как будто ничего не подключено кроме Target Vdd. И возник вопрос - какие условия необходимо соблюсти по минимому, чтобы какмень определился по SWD? Ну понятно подключить все Vdd, Vss, подключить к отладчику SWDIO, SWDCLK, Vdd Target, землю. Кварц вроде необязателен, но если он подключен и неисправен то проблема возникнет? Что еще должно быть обязательно подключено?

Вобщем выпаял контроллер из платы и на весу распаял ножки VDD, VSS, VDDA, VSSA, SWDIO, SWCLK. Сеггеровские утилиты распознали камень без всяких прелюдий. После запаивания процессора обратно в плату с отключенной уже периферией, связь опять пропала. Вскоре слетела еще и прошивка клона J-Linka и на этом эксперименты кончились.
mrcrook
Ковыряю STM32F4 DISCOVERY, пытаюсь наладить работу USART. Но столкнулся с проблемой.
Отправляю "Hi_world!!!/r/n", а выдает такую картинку


Код
#include "stm32f4xx.h"
uint8_t CHAR_ID;

void vUSART2_Init( void ) {
    USART_ClockInitTypeDef USART_ClockInitStruct;
    USART_InitTypeDef USART_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // Enable needed clocks for uart.
    RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );
    RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE );

    // Make sure you use 'GPIO_PinSource2' and NOT 'GPIO_Pin_2'.  Using the
    // latter will not work!
    GPIO_PinAFConfig( GPIOA, GPIO_PinSource2, GPIO_AF_USART2 );
    //GPIO_PinAFConfig( GPIOA, GPIO_PinSource3, GPIO_AF_USART2 );

    // Setup Tx / Rx pins.
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;            // Tx Pin
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_Init( GPIOA, &GPIO_InitStructure );
    //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;            // Rx Pin
    //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    //GPIO_Init( GPIOA, &GPIO_InitStructure );

    // Make sure syncro clock is turned off.
    USART_ClockStructInit( &USART_ClockInitStruct );
    USART_ClockInit( USART2, &USART_ClockInitStruct  );

    // Setup transmit complete irq.
    //USART_ITConfig( USART2, USART_IT_TC, ENABLE );

    // Use defaults (except baud rate).
    USART_StructInit( &USART_InitStructure );
    USART_InitStructure.USART_BaudRate = 115200;
    USART_Init( USART2, &USART_InitStructure );

    USART_Cmd( USART2, ENABLE );

    /*NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);*/
}

void Delay(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}

void print(const char* str)
{
    int i = 0; while(str[i]) {
        USART_SendData(USART2, (uint8_t) str[i]);
        CHAR_ID = str[i]; i++;
        while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) {}
    }
}

int main(void)
{

        vUSART2_Init();

        print("Hi_world!!!/r/n");
        while(1)
        {
;;
        }
}

Помогите разобраться в чем может быть дело. Проблемы с преобразователем интерфейсов uart-rs232 и настройки порта на компе можно исключить. так как демо проект работает нормально.
Danis
Цитата(mrcrook @ Jan 31 2012, 18:24) *
Помогите разобраться в чем может быть дело. Проблемы с преобразователем интерфейсов uart-rs232 и настройки порта на компе можно исключить. так как демо проект работает нормально.


Кодировки строк могут отличаться, попробуйте передавать просто числа.
Скорости принимающей и передающей стороны должны быть одинаковые. Проконтролируйте это.
Картинку с терминалом отредактируйте. У вас одна строка на весь экран.
mrcrook
Цитата
Кодировки строк могут отличаться, попробуйте передавать просто числа.
Скорости принимающей и передающей стороны должны быть одинаковые. Проконтролируйте это.
Картинку с терминалом отредактируйте. У вас одна строка на весь экран.

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


Выводите в терминал данные в hex либо dec формате, у вас сейчас стоит Ascii или Ansi.
Вот от сюда скачайте нормальный терминал: Serial Terminal: RealTerm
Тогда сможете оценить правильность.
На счет картинки, я имел ввиду что она слишком большая, хотя показываете всего одну строку.
mrcrook
ну окей, поставил другую терминалку на прием в виде хекс данных выдает "00E01CFCFC1CFCFCFCFCE0FCFC00E0FC00E01CE01CE0FC1CE0FC1CE0FC" а должен по я так думаю выдавать "48 69 5F 77 6F 72 6C 64 ......." или я заблуждаюсь?
Danis
Цитата(mrcrook @ Jan 31 2012, 22:27) *
ну окей, поставил другую терминалку на прием в виде хекс данных выдает "00E01CFCFC1CFCFCFCFCE0FCFC00E0FC00E01CE01CE0FC1CE0FC1CE0FC" а должен по я так думаю выдавать "48 69 5F 77 6F 72 6C 64 ......." или я заблуждаюсь?


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

        vUSART2_Init();

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

        return 0;
}



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

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

Чего тут думать, RCC ковыряй, да кварцы (источники частоты).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.