Jump to content

    

inventor

Свой
  • Content Count

    665
  • Joined

  • Last visited

Community Reputation

0 Обычный

About inventor

  • Rank
    Знающий
  • Birthday 02/18/1969

Контакты

  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

4978 profile views
  1. очень забавная ситуация, есть 2 проекта для двух процов: 432 и 496 студия одна и таже, есть функция записи в spi которая выглядит в 496 так: u8 spi1_write_read(u8 w) { u8 read, write = w; HAL_SPI_TransmitReceive(&hspi1, (u8 *) & write, (u8 *) &read, 1, 100); return read; } в 496 работает, в 432 вылетает в хардфолт если исправляю так: то все работает u8 spi1_write_read(u8 w) { u32 read, write = w; HAL_SPI_TransmitReceive(&hspi1, (u8 *) & write, (u8 *) &read, 1, 100); return read; } почему такое странное поведение?
  2. такая проблема, квыряюсь с этим модулем уже пару дней, работает и компас и акселерометр, меняются показания, можно определить и магнитные поля а акселерометром как плату накренил а с гироскопом какая то беда, разные настройки пробую, и как плату не кручу - показания не меняются. И lsm - овский модуль использовал и свой написал , НИЧЕГО... может есть какой то трюк работы с ним, что я не знаю. подскажите?
  3. В понедельник попробую. В принципе можно сделать фоэункцию Задачную и для работы без оси. Тока мне вот и надо определить когда ось считается запущенной.
  4. ок, вопрос по пробую по другому, не косноязычно. ось выставляет задачи на исполнение, с 1-й по 10-ю ДО момента когда они начинают крутится все вместе в бесконечном цикле, можно использовать семафоры или не?
  5. словил такой баг, который валивает прогу в хардфолт есть несколько задач и при своем старте они пишут сообщения: Я задача номер ... функция печати реализована т.о.: void log_printf(const char *tag, const char *msg, ...) { xSemaphoreTake(log_mtx, portMAX_DELAY); va_list list; /* Got time and str time &date */ rtc_get_str_time(str_arr); xputs(str_arr); xputs(tag); /* Copy tag */ xputs(": "); va_start(list, msg); xvfprintf(uart_putc, msg, list); va_end(list); xSemaphoreGive(log_mtx); } а любая задача например стартует так: void StartHearbeatTask(void const * argument) { static const char *tag = "Hearbeat"; log_printf(tag,"START\r\n"); Heatbeat_task(); } Заметил такую вещь, если скорость порта будет очень низкая или в функции печати что то долгое, то происходит вот что, предположим стартуют 10 задач, первая задача написала: Я задача номер 1 вторая: я-задача номер 2 третья: я зада.... потом пытается четвертая - и вылет в хардфолт насколько я понял, при начальном старте задача берет семафор печатает, но не успевает это доделать, на исполнение ставится другая задача, которая никогда семафора не дождется. Когда Ось запущена, то все хорошо работает , вне зависимости от времени занятия этих семафоров, проблема при старте оси, вот как это можно избежать
  6. Российские то же самое делают и предлагают или скорость или высоту.
  7. не пойдет. просто может кто с прошивками этих модулей возился и знает как это устранить
  8. проблема такая, ВСЕ без исключения производители gps модулей лочат их чтобы модуль не показывал скорости больше какого то числа, предположим 2 км/с и какой то высоты разговоры с производителями которые велись свелись к тому, что могут дать разлоченной или скорость или высоту но не одновременно. модуль нужно воткнуть на студенческий микроспутник, там и высота > 500 км и скорости на уровне первой космической как бы выйти из этого трудного положения, может кто занимался чем нибудь подобным?
  9. не вызываетса ни програмно ни проводом с 3.3 вольт
  10. STM32H743. Это другой процессор. на 103 у меня тоже работает а на L432 не хочет
  11. функции __HAL_AFIO_REMAP_SWJ_DISABLE() для L432 нет, сделал по примитивному просто кинул проводок на другую ногу и там сделал внешнее IRQ настраивал этот порт SWDIO на выход - меандр дает, а вот прерывания по входу никак не получаются. просто вывод в uart порт а есть разница если это просто на этапе отладки или какой нить неизвестный мне программистский талмуд это запрещает делать? в мануале и errate не нашел ничего
  12. Внешнее прерывание заведено на ногу SWDIO, поэтому отладчик не получается использовать контроллер stm32l432, 13 нога на PORTA #define RFM69_ISR_PIN_Pin GPIO_PIN_13 #define RFM69_ISR_PIN_GPIO_Port GPIOA #define RFM69_ISR_PIN_EXTI_IRQn EXTI15_10_IRQn #define RFM69_ISR_PIN_EXTI_IRQHandler EXTI15_10_IRQHandler void beacon_task_isr_init(void) { GPIO_InitTypeDef gpio = { 0 }; __HAL_RCC_GPIOA_CLK_ENABLE(); /* Это для "средней" и совсем новой платы */ gpio.Pin = RFM69_ISR_PIN_Pin; gpio.Mode = GPIO_MODE_IT_RISING; gpio.Pull = GPIO_NOPULL; HAL_GPIO_Init(RFM69_ISR_PIN_GPIO_Port, &gpio); HAL_NVIC_SetPriority(RFM69_ISR_PIN_EXTI_IRQn, 5, 1); HAL_NVIC_EnableIRQ(RFM69_ISR_PIN_EXTI_IRQn); В прерываниии поставил печать, но ничего, ...пытаюсь просто подавать проводком 3.3 вольта на эту ногу и никакой реации. Кто делал внешнее прерывание на служебные ноги, может там еще надо какие то телодвижения в коде сделать? Что то очень давно помню что как то нужно JTAG ремапить, НО КАК это сделать с этим процом я не знаю.
  13. В общем такой лоховский вопрос: для чего так делать? Обратил внимание, на некоторых платах от разных производителей линии MISO MOSI и CS подтянуты на некоторых нет, подтяжка это обязательное условие или нет? и если нет поддяга, то достаточно ли это сделать программно. GPIO PULL_UP ?
  14. так и сделано, но плата уже в производстве, свой PPS я на другой выход подаю а надо на обычный, для других потребителей