Jump to content

    

Alex_Golubev

Участник
  • Content Count

    584
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Alex_Golubev

  • Rank
    Знающий

Recent Profile Visitors

2957 profile views
  1. Может есть кто работал с stm32 hal драйвером USB - CDC и может подсказать. Когда происходит дисконект USB CDC - VCP в момент передачи данных повторное подключение невозможно выдается ошибка (Код 29). "Устройство отключено, так как управляющая микропрограмма устройства не получила затребованные ресурсы от системы. (Код 29)". В момент повторного подключения переменная (((USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData)->TxState не равен нулю. параметр hUsbDeviceFS.dev_state равно USBD_STATE_CONFIGURED
  2. Вот простейший код работы с spi через dma. Зависает на проверки флага конца передачи DMA TC. Хотя первый пакет передает корректно. Получается счетчик dma NDTR зависает на значение 4 и счетчик spi4 -> SR.CTSIZE зависает на отметки 4. И данные не передаются. Система весит и ждет когда установится флаг TC в DMA. А он не установится так как DMA NDTR не равен нулю. Пошел по старинке и сделал управление NSS в виде программного дерганья ножки. Зависание больше нет проходит все этапы работы. Но почему не работала аппаратная NSS я не понял. SPI просто зависал и не передавал данные.
  3. Ну вот если смотреть по TC от DMA. То программа зависает, когда хочешь передать повторно.
  4. Пытаюсь включить SPI --- DMA в микроконтроллере STM32H7. Как понял из даташита на stm32h743 при передачи данных из ОЗУ в SPI данные пишутся в буфер FIFO - SPI. Получается что возможно установка флага конца передачи DMA до момента конца передачи. И теперь непонятно когда можно формировать следующие посылку для передачи данных. В общем как понять что передача данных завершена и можно передавать новые данные?
  5. Может кто решал задачу с вычислением загрузки ЦПУ на stm32. И может подсказать как это делать.
  6. нули достаются. Мне подсказали что нужно делать вот так: Вроде помогло. Еще не до конца проверил. Но пока работает.
  7. В регистре CR1 установка битов OPS и URS В регистре DIER установка прерывания по перезагрузки.
  8. пробовал все равно ложное срабатывание.
  9. Бит URS тоже не дал результата (. Прерывание вызывается ложно в регистре sr бит TIM_SR_UIF установлен в '1'. Вот код : Не понимаю почему происходит установка бита 'TIM_SR_UIF'.
  10. Я установил 'TIM_CR1_UDIS' и у меня вызов прерываний пропал. Когда заносишь число ну например 100 в регистр cnt то прерывание вызывается не сразу а через какое то время. Ну например для cnt = 100 время выхода составляет по осциллографу 225 мкС. Для сnt = 1 пример 1 мкС. Сброс делаю регистра sr TIM16->SR = 0; TIM16->SR &= ~TIM_SR_UIF; Изменение регистра CCR не на что не влияет. Почему при cnt = 100 время ложного 225 мкС не знаю.
  11. Еще проблема таймер при первом включение имеет ложное срабатывания. То есть когда только проинициализировал и сделал включение 'TIM16->CR1 |= TIM_CR1_CEN' таймер сразу вызывает прерывании и устанавливает бит 'TIM_DIER_UIE'. Далее все нормально по крайней мере не заметил. Проверил осциллографом перед включение ставлю 1 после отключения 0 на порту.
  12. Входная 120 МГц. Нет множителя. не нашел множитель шина на 2 в stm32h743.
  13. Чета не смог понять в чем может быть дело. Период вызова вектора прерывания 500 мкС. Должно быть 960 мкС. Входная частота 120 МГц. 120 *10^6/5730 = 20945 1/20945 = 47 *10^-6 47 *10^-6 * 20 = 954 *10^-6 Вот код: Посмотрите где я ошибся.
  14. Запретить глобально или локально в регистре таймера TIM16->DIER &= ~TIM_DIER_UIE.