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

Vladimir_T

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о Vladimir_T

  • Звание
    Vladimir_T
  1. stm32f407 SPI обнаружил косяк

    Уважаемые коллеги, прочел материалы по данной теме SPI в STM32F4xx, но прежде все "неточности" работы SPI обнаружил у себя на MCU STM32F410. Мастером является STM32F405 , а ведомым STM32F410. На обоих процессорам обмен производится через прерывания. У мастера обмен: прием/передача без ошибок. А ведомый ведет себя так: принимает без ошибок, а вот передает - с ошибками! Но главное, что пока идет прием одного байта, он умудряется несколько раз вызвать прерывание по опустошению буфера TX. Код обработчика простой, инициализация также. Может будут какие-либо мысли - поделитесь со мной, пожалуйста. Идея обмена проста. В фоновом режиме получаем последовательность и в также заполняем буфер передатчика: опустел буфер, взвелся флаг TXE в SPI->SR, вырабатывается прерывание и в буфер передатчика заносим очередное значение. Но когда начинается обмен, то флаг TXE появляется чаще RXNE, хотя они должны следовать один после другого. Потому тестовые счетчики Cnt1 и Cnt2. SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //Config SPI Protocol SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; // SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // High SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // 16 SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); SPI_CalculateCRC(SPI1, DISABLE); SPI_SSOutputCmd(SPI1, DISABLE); Cnt_Tx = Cnt_Rx =0; SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, ENABLE); /***************************************************************************** SPI1_IRQHandler (); ******************************************************************************/ TControl *pCtrl = &Control; u32 Cnt1 =0, Cnt2=0, Cnt3=0; __irq void SPI1_IRQHandler(void) { if (SPI_I2S_GetITStatus(SPI1, SPI_IT_TXE)) { SPI1->DR = *pOut_Buff++; if (++Cnt_Tx == Cnt_Pack) { Cnt_Tx = 0; Cnt1 ++; // For Test pOut_Buff = (u8*)&SPI_USonic_Out; // Init pointer } } if (SPI_I2S_GetITStatus(SPI1, SPI_IT_RXNE)) { *pIn_Buff++ = SPI1->DR; if (++Cnt_Rx == Cnt_Pack) { Cnt_Rx = 0; Cnt2++; // For Test pCtrl-> Link_SPI = True; // Link is Ready pIn_Buff = (u8*)&SPI_USonic_In; // Init pointer } } } // SPI1_IRQHandler ();
  2. Про HardFault

    Спасибо Всем за помощь! Дело было в настройках размеров ОЗУ. Scatter load пытал инициализировать массив, размер которого для 405 был уже предельным, а для 410 совсем запредельный!
  3. Про HardFault

    Здравствуйте, уважаемые программисты, подскажите где мне искать решение? Как написано в описании STM32F410R8 программно абсолютно совместим с STM32F405RGT8, на котором успешно работает проект. Но когда этот же проект из Keil 4.70 загружаю d STM32F410, после запуска процессор улетает на HardFault из Startup. Все проверил карты памяти одинаковы, стеки настроены. В отладчике ловлю-ловлю вижу, что LR = 0xFFFFFFF9, почему так? Может для STM32F410 нужен другой Startup, тогда где его взять?
  4. Вопрос о программировании Flash STM32F405

    Сигнал NRST формируется автоматически из программатора ULink. Огромное вам спасибо! Долго бы еще копался без вашей помощи! Интуитивно я клацал этими флажками, но бессистемно, потому ничего не получалось!
  5. Вопрос о программировании Flash STM32F405

    С сигналом NRST стал процессор программироваться всегда, но отладчик не стартует, дает такое сообщение Keil: Cannot access Memory *** error 57: illegal address (0x08000000) К сожалению у меня в наличии платы, которые были до этого запрограммированы через BootLoader в цехе. Не пойму, что такое с ними произошло, что SWD с этими процессорами не дружит... Был ли у кого-либо опыт программирования поочередно: когда через BootLoader, а когда через SWD?
  6. Вопрос о программировании Flash STM32F405

    Подскажите, пожалуйста, сигнал NRST сброса процессора обязательно нужно задействовать при использовании SWD? Или можно без него, т.е. обойтись минимально возможным количеством сигналов: SWDIO, SWCLK, GND? Вопрос возник из-за того, что часто от Keil имею ошибку доступа в Flash/
  7. Вопрос о программировании Flash STM32F405

    Утилитой STMFlashLoader (ST) снял все защиты: чтение/запись. И все заработало! Спасибо всем за полезные советы!
  8. Вопрос о программировании Flash STM32F405

    Проверил, все выводы настроены по умолчанию, на SWD. SDK Keil, программатор Ulink 2 (фирменный), сообщение при загрузки: ULINK: Flash Timeout.Reset Target and try it again. uVision: Error.Flash DownLoaded Error Подключил программатор JLink 7, тот же самое - не программируется. Пробовал найти на сайте Segger утилиту JFasher, но для JLink 7 не нашел.
  9. Вопрос о программировании Flash STM32F405

    Действительно, этот момент нужно тщательнее просмотреть!
  10. Вопрос о программировании Flash STM32F405

    Здравствуйте, уважаемые коллеги, может кто-либо сталкивался с такой ситуацией. Процессор STM32F405 отлично программируется посредством BootLoader, но мне необходимо сделать доработки в программе и отладку новой версии. Как я не бьюсь, но по SWD не удается запрограммировать FLash, из среды Keil, при ее программировании получаю сообщение: истек таймаут при обращении к Flash-памяти. Никакие ключи для защиты Flash-памяти в BootLoader не устанавливал. Заметил, что когда процессор был чистым, он поддерживал SWD, но стоило один раз запрограммировать его через BootLoader, он перестал программироваться через SWD. Keil процессор на SWD-интерфейсе обнаруживает, но запрограммировать на может из-за таймаута. Такое подозрение, что автоматически установилась защита Flash-памяти, но я не устанавливал защиту. Уважаемые, коллеги, если кто-то знает в чем тут дело, подскажите, пожалуйста. В литературе и мануалах, не нашел ответа на свой вопрос, к сожалению. Заранее благодарен.
  11. Цитата(alex_bface @ Sep 11 2017, 12:38) , мой вам совет - ни когда не меняйте в списке слоёв тип с nc на graphic. Формирование композитов, это не единственная проблема с которой вы столкнётесь в таком случае. По вашему вопросу: Если вы хотите сделать композит из слоёв графики и сверловки, нужно сначала преобразовать нужные слои сверловки в слои графики. Это можно сделать перейдя в режим NC (закладка окна редактора) далее Utilities -> NC data to gerber и создаёте новые гербер-слои из слоёв сверловки. Далее возвращаетесь с САМ режим (закладка окна редактора) и составляете нужный композит Tables -> composites (указываете нужным слоям нужные полярности). Далее можно получившийся композит экспортировать или преобразовать в новый гербер-слой командой Utilities -> composite to gerber и работать с ним как с обычным слоем графики. Ваша ошибка была в изменении типа NC в списке слоёв. Спасибо вам огромнейшее! Не могу сказать, что уже все получилось, но принцип я понял и есть результат. Часто бывает ошибки из-за единиц- вроде устанавливаю всегда идентичные единицы, а САМ не отображает или отображает какую-то часть гербера. Шалит он, видимо!? Жаль что не удалось найти мне книгу по САМ350. Получил нужный мне гербер и фотошаблон для односторонней ПП с центрами в контактных площадках.
  12. Цитата(Mef @ Sep 11 2017, 11:16) Тогда скопируйте сверловку в графический слой и потом с этим слоем делайте композицию. В списке слоев я поменял для слоя сверловки тип с NC Primary в Graphic, после чего в списке для композиции появились все слои, включая сверловку. Но композиция все равно не идет! Я не вижу в композиции сверловкию
  13. Цитата(Mef @ Sep 11 2017, 09:57) Где Вы это пытаетесь сделать? Я в теме про CAM350 создал тему, а она оказалась не там!? Прошу извинить меня за оплошность.
  14. Здравствуйте, поскажите пожалуйста, почему не получается создать в CAM350 V10 слой композитный со свеловкой ? Все герберы импортируются, сверловка drl (текстовый файл) импортируется, но когда пытаюсь создать композитный слой, то в списке доступных для композиции слоев есть все, кроме сверловки. Почему так? Мне нужно затем вывести композитный слой на пленку на принтере.
  15. Я пытаюсь схемный фрагмент растиражировать на листе через команду Snippets и этому фрагменту имеется кусочек ПП, который тоже добавляю через Snippets. Когда на схеме есть десять однотипных узлов A1...A10 и на плате десять однотипных узлов, то остается установить соответствующие Component Links, чтобы затем перенести NetList из общей схемы. Когда сам Altium переносит элементы из общей схемы на плату, то он всем дизигнаторам добавляет префикс _Аn, где n - номер узла. Получается, чтобы меня понял Altium, я должен на плате в пределах каждого печатного узла добавить этот префикс? Я выделяю группы элементов для одного узла, через инспектор пытаюсь добавить *_A1 (например, для первого узла), а Altium все выделенные элементы переименовывает в *_A1... Почему не понимает мою нативную форму? Ну, конечно такие дизигнаторы, например R1_A1, D1_A1 и тп не годятся, планирую после окончательной трассировки убрать через инспектор эти префиксы _An.