![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
adnega
-
Постов
3 603 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные adnega
-
-
Спасибо за очень, очень дельный совет, но аутсорс - это то, чего мы "нахавались" за последние 2 года по горло. Нет.
Есть риск, что удовольствие от рассматриваемых выпускников ВТУЗов без огромного опыта может оказаться мнимым.
ЗП ниже, так и производительность не удовлетворительная.
В "нашей деревне" найти хорошего спеца было не возможно. Всех кого брали (с головой и руками) после некоторого времени уходили "в лучшие места".
Это в тот самый момент, когда работник начинал довоть результат. Отношения в некоторых фирмах сейчас выстраиваются так, что держать дорогого
специалиста фирма не может, а хороший специалист уходит туда, где более востребован или на аутсорс.
Чем Вы сможете удержать хорошего специалиста?
С другой стороны, напрасно Вы так про фрилансеров и аутсорс. Наличие негативного опыта вовсе не доказывает, что явление плохое само по себе.
"Тысячи их" фрилансеров и фирм, которые пользуются аутсорсом - и, поскольку я сам из тех и этих, знаю - при хорошем Исполнителе и адекватном
Заказчике все стороны довольны. "Вы не любите кошек? Да, вы их просто не умеете готовить!". Может, стоит пересмотреть свое отношение к проблеме?
Можете высказать свои опасения, а мы попробуем их развеять...
И еще один момент: поскольку Вам нужен специалист по LPC и STM32 (а это довольно слабые по современным меркам камушки), то и задачи не сильно
сложные - их с успехом можно оформить в виде ТЗ, найти хорошего исполнителя и сэкономить не только время.
-
Почему? RCC->AHB1ENR, бит CCMDATARAMEN включает ее, reset value = 0
Упс. Начальное значание как раз 1 (смотрю для f407 в частности).
Значит просто записать в SP адрес конца CCM сразу после сброса или в нулевое слово таблицы векторов.
-
После RESET она не работает, нужно дополнительно включать (видимо, до main).
-
Кто-нибудь чего-нибудь может добавить....
Для RS-485 лог "1" - это A=5В, B=0; лог "0" - A=0, B=5В.
Для CAN лог "1(рецессив)" - это Z-состояние H=L(=2.5В); лог "0(доминант)" - H=5В, L=0В.
Можно предположить, что соединение RS485_A=CAN_L, RS485_B=CAN_H даст работоспособный лог "0".
И есть надежда на лог "1", если приемник RS485 воспринимает равенство A=B за лог "1"(скорее всего или может быть вылечено растяжками) и приемник CAN воспринимает H=0, L=5В за лог "1" (возможно, если нет условия доминант, значит рецессив).
-
Может, проще сделать свой usb-cdc. Там скорость обмена чисто информационный характер несет - чтоб железо могло знать нужную скорость.
Реально на USB-FS можно получить поток под мегабайт, а это гораздо больше 2 Мбит.
Исходники на форуме (для stm32f103) я выкладывал.
-
Эксперименты в таком деле не лучший путь. Чувствую, что самый простой и правильный способ - спросить Инкотекс Наверное начну с этого в понедельник.
http://www.incotexcom.ru/faqmercury/viewto...hp?f=5&t=63
Протоколов передачи данных счётчиков "Меркурий" на сайте нет. Для получения надо прислать запрос на имя начальника отдела техподдержки Марова В.Н. Запрос оформить на фирменном электронном бланке вашего предприятия. -
О! Давно хотел решить аналогичную задачу. Можем попробовать вместе. Из документации есть что-нить? У меня где-то были протоклы, но, вроде, для RS485. Использование CAN, как Вы его описали, довольно странное. От CANа тут только физика получается.
-
Я пользуюсь :)
На чистом C или с ASM-вставками?
В Keil или GCC?
Может и правильнее, но в документации Cortex оно называется SVC (SuperVisor Call). :)Насколько я понял, разработчики Cortex-M изменили название инструкции (сохранив числовое значение) при переходе с ARM7,
чтобы программист, который портирует код уделил внимание особенностям новой системы исключений.
-
Хорошо бы примерчик взаимной блокировки от KnightIgor. Это ведь главное (ключевое) отличие Вашего подхода?
Мол, конкурирующий запрет привел к блокировке, а конкурирующее разрешение нет.
И еще: кто-нить пользуется SVC? Может, лучше через SVC, раз "лишние" прерывания KnightIgor не напрягают?
-
Как это RESET на PA14? Там же SWCLK по схеме?
Должно быть так:
7 - NRST - RESET
124 - PA13 - SWDIO
137 - PA14 - SWCLK
+ VCC и GND
-
TIM_OCMODE_PWM2
-
Подключаетесь с через Reset?
-
давайте аккаунт, хоца посмотреть в чем косяг.. по идее падать не должно статически собираю....
Отправил в личку
-
Попробовал в виртуалке (ubuntu 12.10) - с последней версий все собирается. На железном сервере (ubuntu 13.10) - уже писал, что нет (internal compiler error).
Могу дать удаленный доступ к "плохой" ubunte, но к сожалению, по личным причинам сейчас не до экспериментов (жена и дочка в больницу попали).
Сам второй-третий год собираюсь с windows "спрыгнуть". Уже все компы, включая нетбук и десктоп жены, перевел на linux - остался последний ноутбук-кормилец (нужен для работы). Нашел HDD для ноутбука - попробую временно на нем развернуть все необходимые инструменты.
Итого: если у меня одного проблемы, то беру таймаут на их разрешение + сделаю тестовый проект.
Если, klen, есть желание и возможность поразбираться с internal compiler error, то могу дать учетку для удаленного подключения (ssh).
-
adnega@NEWSRV:~/temp/test_nand$ ~/temp/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc --version arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform. << PROCYON >>) 4.9.0 20140224 (experimental) Copyright © 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. adnega@NEWSRV:~/temp/test_nand$ make all compile main.o ~/temp/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -fpack-struct -Wpadded -g -Os -I . -I ./inc -gdwarf-2 -c main.c -o main.o main.c: In function ‘main’: main.c:174:2: internal compiler error: Недопустимая инструкция volatile float x = 3.14f; ^ Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. make: *** [main.o] Ошибка 1
Под
Distributor ID: UbuntuDescription: Ubuntu 13.10
Release: 13.10
Codename: saucy
На той же системе с другой версией собирается.
root@NEWSRV:/home/adnega/temp/test_nand# /home/adnega/temp/arm-kgp-eabi-20130623/bin/arm-kgp-eabi-gcc --versionarm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform. << Fedor Konyukhov / Antarctica Cup Race Track 2008 >> ) 4.9.0 20130622 (experimental)
Copyright © 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
давайте начнем с того что линеру не будем передавать опцию с путем до системных либ - это не нужно и вредно поскольку комбинация ключей позволяет ему самому решить где брать libc libm libgcc и тд.
удалите в опциях линкера -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f
косяг в том что происходит попытка слинковать объектники и либы собранные под разные fpu, осталось понять как у линкера возникло такое желание
еще гипотеза - если я при сборке архива накасячил то возможно папка -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f пуста и в током случае линкер вынужден брать либы из корня d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib а там либы собранные бе поддержки фпу.
в понедельник решим эту беду. подождите сутки.
Пути убрал - ничего не поменялось.
Меня больше напрягает: "error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not".
Это как понимать: "*.elf не использует"?
Видно, что до библиотек дело не доходит. Там бало бы что-то типа "failed to merge target specific data of file d:/gcc/arm-kgp-eabi-x86_64/arm-kgp-eabi/lib/thumb/cortex-m3\libc.a(lib_a-__call_atexit.o)".
Вот еще пример, с одной из предыдущих версий умышленно линкуемых с либами для М3: "error: test_fp_v1.ite2.elf uses VFP register arguments, d:/gcc/arm-kgp-eabi-x86_64/arm-kgp-eabi/lib/thumb/cortex-m3\libc.a(lib_a-__call_atexit.o) does not".
Теперь *.elf использует, а либа правильно не использует. У меня же наооборот)
Думаю, не хватает чего-то, что заставит линкер ипользовать fpu-шные регистры при сборке. Я могу ошибаться, но может линкер "нерабочий", а не библиотеки? Ради эксперимента подсунул новые либы старому компилятору - вроде скомпилировался проект и даже работает.
Со старым (рабочим) компилятором я получаю аналогичную ошибку, если указываю -mcpu=cortex-m3 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb. Странно, что компилируется все без ошибок, но линкер выдает: "error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not". Причем, можно компилятору указать M3, а линкеру М4 - все собирется и будет работать.
До понедельника доживу. Я бы и не стал переходить на новую сборку, если бы не обнаружил, что в старых при записи, например, USART1->DR = x вместо операции "запись" происходит "чтение-запись". Причем, это самое чтение сбрасывает флаги в регистре статуса (у STM32).
DR объявлен как vu16, если заменить на vu8, то лишнего "чтения" не происходит. В новой версии поведение правильное, поэтому и решился.
-
Попробовал arm-kgp-eabi-mingw64-20130224-PROCYON.7z
Не собирается(
compile. main.o d:/gcc/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -fpack-struct -Wpadded -g -Os -I . -I d:/gcc/lib/stm32/inc -gdwarf-2 -c main.c -o main.o linker.. d:/gcc/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--gc-sections,-Map=test_fp_v1.ite2.elf.map,-cref,-u,Reset_Handler -I . -I d:/gcc/lib/stm32/inc -L . -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f -T STM32F407VG.ld main.o --output test_fp_v1.ite2.elf d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/../../../../arm-kgp-eabi/bin/ld.exe: error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/../../../../arm-kgp-eabi/bin/ld.exe: failed to merge target specific data of file main.o
Не подскажите, что мы обычно делаем в таком случае?
-
Как уже рекомендовали MOXA NPort 51xx.
Использовали повсеместно, где нужно решить задачу проброса rs232/rs485 через существующую сеть Ethernet.
Варианта решения два:
1. Можно купить два преобразователя и спарить их. Получается RS232 на входе и на выходе, а посередине Ethernet.
2. Если софт на ПК, то можно купить один преобразователь и подключить его по Ethernet к ПК.
На ПК ставится драйвер, и в системе появляется еще один com-порт, через который софт может рулить камерой.
-
Да это частота внешнего кварца. Библиотечный файл можно и не править, достаточно объявить это определение, например так:
#ifndef __GLOBALS_H #define __GLOBALS_H #define HSE_VALUE ((uint32_t)4096000) #include "stm32f10x.h" #include "stm32f10x_conf.h"
Объявить в каком файле?
В stm32f10x_conf.h (любом .h-файле, вызаваемом из stm32f10x_conf.h) или в совершенно произвольном месте?
А может в ключах компилятора?
А если у меня частота кварца 12МГц, то какая будет частота PLL? А если мне нужна другая частота PLL?
Спрошу по-другому: можно ли библиотеке указать частоту кварца 12МГц и частоту PLL 72МГц? И чтоб при этом все делители для UART рассчитывались правильно.
-
Нет, HSE_VALUE я установил 4096000
#if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)4096000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */ #endif /* HSE_VALUE */
Это частота внешнего кварца, а не частота с PLL. Точно.
Т.е. Вы поправили библиотечный файл?
-
Господа программисты, особенно начинающие, обратите серьезное внимание на решение от Ксении.
Хватит уже думать на уровне инструкций, переходите на уровень управления данными!
union и struct позволяют сделать код в разы "читабельней" и "управляемей".
Завтра вместо DS18B20 возьмете DS1820 и будете по всему коду искать сдвиги и прогие логические операции?!
uint16_t temp_18b20() { union { unsigned char byte[2]; uint16_t word; struct { uint16_t ds18b20_f:4; uint16_t ds18b20_i:8; }; struct { uint16_t ds1820_f:1; uint16_t ds1820_i:8; }; struct { uint16_t ds_uni_f:N // ваше число бит для дробной части uint16_t ds_uni_i:8; // целая часть температуры } } temp; ... temp.byte[1] = TD_receive_byte(); temp.byte[0] = TD_receive_byte(); ... return temp.ds_uni_i; }
Меняете в одном месте N и все!
-
Если оно не соответствует Вашему кварцу, то и расчет будет не верным. У меня кварц на 4096000, что отличается от дефолтного в 2 раза, вот тут то и были грабли.
Т.е. Вы задали HSE_VALUE = 36864000 ?
Фиксированный умножитель на 9 Вас устраивает?
В моем случае 12МГц умноженые на 9 давали не работоспособные 108 МГц и правка HSE_VALUE = 108000000 не спасала((
-
В прочем с этим я разобрался. :)
И какое же правильный ответ?
Определить HSE_VALUE?
1. По поводу OVER8.
В других МК он есть на месте 15 бита. В F100 он жестко обнулен, что соответствует 16 выборкам.
Позицию бита можно было узнать из RM на дригие МК или по маске из библиотеки.
В RM на ваш МК можно найти фразу, что начиная с 14 бита по 31 в регистре CR1 железные нули.
2. По поводу HSE_VALUE.
Я не фанат стандартной библиотеки, но когда только она появилась и долгое время после имел
некоторые проблемы как раз с HSE_VALUE. Дело в том, что для внешнего кварца у STM приняты
стандартные значения в 8 или 25 МГц, а я (уж так сложилось исторически) применяю кварцы на
12 МГц. Делители библиотека рассчитывает исходя из заданного HSE_VALUE и стандартного для
указанного семейства кварца. Я правил код библиотеки под себы, но это великое зло.
Интересно, это до сих пор так? (вопрос разобравшемуся человеку :))
-
Кто объяснит, где в регистре USART_CR1 бит (CR1_OVER8) ???
Reference manual только и объяснит. Читали?
usb cdc stm32
в RS232/LPT/USB/PCMCIA/FireWire
Опубликовано · Пожаловаться
Пройдитесь поиском по форуму. Я выкладывал usb_cdc для stm32 (http://electronix.ru/forum/index.php?showtopic=111955&st=15).