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

romas2010

Участник
  • Постов

    72
  • Зарегистрирован

  • Посещение

Весь контент romas2010


  1. Stm32F407 SPI+DMA

    Коллеги, приветствую. Столкнулся с таким явлением. Читаю АЦП при помощи DMA. Всё функции от HAL. Так вот, если выключаю прерывания и использую опрос, то по адресам 0х20000000..0х20000010 иногда появляются копии считанных байтов, причём хаотически в разных местах, но в пределах этих 16 байт. При включеном прерывании (имеется ввиду прерывание по данному каналу DMA) этот эффект уходит. Собственно говоря, вопрос-ответ что надо сделать, чтоб этого эффекта не было? P. S. В проекте получается более 10 источников прерываний, поэтому хочу некоторые источники опрашивать P. S. 2. Приём UART через DMA путём опроса работает корректно. Непонятно, в общем, что за петрушка
  2. Такая же петрушка. F407 проц. По неизвестным причинам стирается сектор с самим загрузчиком. Непонятно, что происходит, но факт на лице.
  3. Ну прекрасно, берете и добавляете свой код в этот колбэк
  4. Да, по ходу вы правы. Напортачено с разводкой. Взамен куплен шилд на ардуино, ибо надо отлаживаться. Но, собственно говоря 1) команда AT+CIICR. Отклик на неё приходит от 10сек( мегафон) до 1мин(билайн). Это реально у всех так? Делаю всё как в апноуте. 2) не хочется связываться с РРР, хотя, чую, придётся....
  5. Коллеги, приветствую всех. Описываю ситуацию. Модем включается, выдает стандартный отзыв "......Call Ready" далее +CREG:1 и через секунду +СREG: 3 На запросы AT+CREG выдает +СREG: 3 или +СREG: 4 Посылаю команду AT+GREG=1 . Ощущение, что он ничего не делает, ток потребления на источнике стоит без изменений (это к вопросу о 2-х амперном потреблении при поиске сети) Сила сигнала +CSQ 5,0 Вынимаю симкарту, вставляю в старенькую нокиа - все четко и мгновенно регистрирует. Что не так с модемом?
  6. Embedded assembler syntax in C

    struct _dev { u32 a; volatile u32 b; volatile u32 c[MAX_C_QNT]; u32 *d[MAX_D_QNT]; }Dev; __asm void func() { ...... ldr r3,[r1,#(__cpp(offsetof(Dev, d)))] } keil 5.23
  7. Добрый день! запустил сетевые службы, используя библиотеку Keil Middleware. Работает, UDP-коллбеки вызываются, TCP+FTP отлично. Но это на первый взгляд. Столкнулся с такой петрушкой- как только к сети подключались IP-камеры, FTP глючит. Ну наверное теряется пакеты. Поступил так- TCP в проекте отключил,написал на билдере "спамер" по UDP, в проекте подключил UDP, в коллбеке тупо считаю, сколько пакетов принялось, в вайршарке мне показывает сколько отправилось. В CMSISовском EMAC_STM32F4xx.c в функции ReadFrame тоже поставил счетчик принятых пакетов. В итоге на уровне драйвера потерь потери пакетов нет,вайршарковский счетчик и счетчик в ReadFrame совпадали, а в коллбеке счетчик стабильно был меньше, причем так сумасшедше меньше, на 20-25%. Причем не помогло ни увеличение количества приемных дескрипторов, ни увеличения Memory pool для библиотеки. Сталкивался ли кто с таким и какие меры приняли?
  8. вставил в проект файл С++. Определил класс в hpp файле, реализация методов в срр файле. Все отлично компилируется, но есть нюанс- компилятор не генерирует код на блоках try/catch . опция --exception добавлена. Как быть?
  9. stm32f4+adc+dma+tim

    У меня получалось так 1) перед каждым новым преобразованием я включаю бит ADC.CR2.DMA=1, конфигурация DMA для АЦП,запуск таймера 2) преобразовалось по флагу DMA_streamx.TCIF-> стоп таймер, ADC.CR2.DMA=0 то есть бит ADC.CR2.DMA переключать необходимо
  10. Keil 5.23

    Спасибо.Согласен...действительно, единицу к адресу вызова надо прибавлять... Тему считаю закрытой
  11. Keil 5.23

    Коллеги, приветствую!! Вопрос такой - как в кейле сделать чтобы константный массив представлялся не данными, а кодом то есть например const user_code[]={0x01,0xb5} дизассемблировалось в кейле на как DCW 0xb501 , а как push{r0,lr} Дело в том, что у меня имеется бинарный файл с неким набором процедур, которые вызываются из моего проекта. Я знаю как адреса размещения этих функций, так и их семантику..При отладке в кейле вызовы этих процедур естественно приводят к HardFault, так как встречается директива DCW, а не ассемблерная инструкция.
  12. Keil 5.23 ошибка L6971E

    Компилятор Keil не разрешает размещать данные в ОЗУ таким образом через __attribute,типа char lcdconf[20] __attribute(at(0x20000000)))..... видимо прихоть его разработчиков...Обхожу данный нюанс при помощи ассемблера AREA |.ARM.__AT_0x2000000|,DATA,READWRITE EXPORT lcdconf lcdconf space 20 в h-файле прописываете extern char lcdconf[20];
  13. Keil 4.50

    Ребят, ваши советы не подействовали,поэтому пришел к следующему:объявляю в программе следующие 3 строки const char button_not_pressed[]= #include "1.txt" ; содержимое файла 1.txt "Кнопка не нажата" Ну вот как-то так вот
  14. По хорошему надо бы ввести в архитектуру банки регистров, как в MIPS...тогда бы переключение контекста в многозадачности свелось бы к простому переключению нужного банка...все остальное-игрулечки-бирюлечки
  15. Тоже склоняюсь к этому мнению....Хоть и некоторым образом некошерно,но надежно...спасибо
  16. Всем доброго дня!! Народ, делал ли кто нибудь подключение нескольких SD-карт на одну шину? Если да,то можно ли ногу CMD в контроллере SDIO STM32 сконфигурировать как OPEN_DRAIN (по типу I2C) или все-таки надо ставить внешний демультиплексор для "chip select"? ответы в стиле "возьми SSD+cortex A7" неприемлемы из-за технико-финансовых ограничений проекта...проект-типа многоканальный аудиорегистратор с хранением фраз в течении года
  17. Я бы рискнул все-таки через БПФ, но при этом 1) 4096 выборок, соответственно дискрета по частоте 44100/4096 ~=11 Гц ОЗУ надо 32к (4096*(float Re+float Im)) 2) Табличный синус, а косинус-это синус,сдвинутый на pi/2, то есть на cos[x]=sin[x+1024] 3) бабочки БПФ написать на ассемблере с командами сопроцессора 4) DMA I2S не использовать,а вычитывать в каждом прерывании I2S выборку и сразу же кинуть в буфер отсчётов БПФ с бит-реверсией адреса(есть у М4 __rbit() intrinsic)+ экономия ОЗУ Хотя возникает вопрос- а какже на контроктаве и субконтроктаве, там дельта частот очень маленькая?
  18. Утилита для ULINK

    нет,не существует...пока через кейл
  19. Очень элегантно это будет сделать через DMA..необходимо задать в регистре последовательности SQR номера каналов,настроить DMA ну и собственно триггер старта-либо программно,либо по таймеру...в итоге надо будет проверять бит end transfer в DMA для определения окончания преобразования..завтра до работы дойду,вышлю пример расчета переменного напряжения,поступающего на каналы,с использованием БПФ по 256 точкам..Кстати,как мне кажется,analog watchdog штука хорошая,но по большому счету бессмысленная
  20. STM32F4: SPI2 через DMA

    1 ) Попробуйте DMA_PeripheralDataSize = DMA_PeripheralDataSize_Long. как пишут в даташите на STM,к регистрам периферии доступ по слову или по двойному слову 2) в DMA установить бит , отвечающий за flow control "dma".CR.PFCTRL=1;(по идее нужно устанавливать,но не факт) ну само собой буфер данных выровнен по 4 байтной границе
  21. STM32F107+uIP ICMP request

    Да,в IP пакетах надо CRC всегда считать...кстати STM аппаратно считает CRC этих пакетов установкой битов в дескрипторе передачи TDES0.CIC = 3
  22. STM32F429+KZS8864 MAC

    Привет всем!! Имеется MAC-выход коммутатора,подключенный непосредственно к STM. А как в таком случае инициализировать ethernet в STM,минуя "физику"?
  23. STM32F429 ethernet+PTP

    Форумчанам привет!! Возникла задача одновременно запустить на устройствах в сети измерения через АЦП..Частота дискретизации ~33 Hz..собственно говоря я не понял из описания PTP,как мне обеспечить одновременность..ну получаю я метку времени,и что дальше с ней делать?И вообще,поможет ли мне PTP в данном случае?
  24. А с чем связан такой,по моему неоднозначный,выбор среды разработки?
  25. Фишка вот в чем непонятно зачем кейл двигает указатель стека SP на FP в командах mov sp,fp sub sp,#const Если между этими командами возникнет прерывание,стек будет уже смещен,и контекст возникшего прерывания затрет контекст,сохраненный ранее при входе..я понимаю,мои объяснения звучат сумбурно,но возьмите лист бумаги,разрисуйте стек,идите по коду,там,где есть в командах использование sp и fp, то "разрисовывайте" эти регистры,и вы увидите....учитывайте,что стек растет ото дна stmdb sp!,{r0...lr} -> sp=sp-4;RAM[sp]=r0 и т.д. ldmia sp!,{r0..lr}-> r0=RAM[sp]; sp=sp+4 Я вам скажу,это реальный глюк..я в свое время неделю не мог понять,что с моей программой,а потом матерился на кейл десятиэтажным матом
×
×
  • Создать...