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

Vertual2001

Новичок
  • Постов

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

  • Посещение

Репутация

0 Обычный
  1. STM32H7 Таймеры

    Страшнее документации от СТМ только их ХАЛ 🙂 HAL_TIM_OnePulse_Start_IT(&htim4, TIM_CHANNEL_1); HAL_TIM_OnePulse_Start_IT(&htim1, TIM_CHANNEL_1); while (1) { HAL_Delay (10); GPIOC->BSRR=GPIO_BSRR_BS13; //вкл бортовая лампочка TIM4->CR1|=TIM_CR1_CEN; TIM1->CR1|=TIM_CR1_CEN; HAL_Delay (90); GPIOC->BSRR=GPIO_BSRR_BR13; //выкл бортовая лампочка } Так работает. Без _IT не работает. Задуман был таймер 8, канал 3 - H7 HW1.9 его не хочет делать выходом. Точнее хочет, но не делает. Аналогично еще с пачкой таймеров. Через ГПИО как тот светик работают, а когда должно стать выходом таймера, то скорее всего становится входом. автозагрузка на время отладки стоит ну и вот такой отклик... синий луч - от светодиода для синхронизации желтый луч что уже пришло с таймера где counter period - через сколько отсчетов закончить работу pulse - через сколько времени от запуска изменить уровень т.е. для такого применения длительность импульса counter perion - pulse, задержка срабатывания pulse
  2. STM32H7 Таймеры

    Приветствую всех. Столкнулся с такой проблемой, нужно управлять в импульсном режиме светодиодом, попадая в ранги АЦП +/- смещение когда включится и когда выключится. Сейчас программа по событию от третьего таймера запускает конверсию в АЦП (аппаратно) и автомат состояний (у него сверх критичное время выполнения и оно не постоянно). т.е. запуски каждую 1мс, автомат состояний может отработать за 50мкс, а может и за 500мкс... АЦП работает в инжектед режиме, причем у 3х ацп задействованы 3 ранга. Сами исполнители командуются через внешний АЦП. Т.е. можно и логический уровень подать (вкл/выкл), или через внешний АЦП выставить нужное значение. Казалось бы просто, назначить ноги или дергать внешним ЦАП перед каждым рангом АЦП, по вызову прерывания по окончанию ранга. даже работает, пока автомат состояний не перекроет вызов прерывания от АЦП. Тоже срабатывает, но потом... А это на реальном железе сразу пойдет дым, собственно разок уже и пошел. Возникла идея решить вопрос через таймеры, так что-бы главный таймер запускал рабочий цикл. временно выключить автомат состояний, что-бы не перекрывал вызовы от каждого ранга. каким-то таймером насчитать, когда сработали 1й, 2й и 3й ранги. просто в прерывании засекать что успел насчитать таймер до того пока программно его не считали по прерыванию от АЦП. Получится, что-то вроде Т0=1000, Т1=2000, Т2=3500 - сколько тиков например с частотой 10мгц прошло по окончанию конверсии. С этим понятно. Потом уже запускается автомат состояний. Перед ним можно запустить этот таймер из прерывания программно. суть что он должен в зависимости от ранга АЦП где его надо включить отсчитать эти Т0 или Т1 или Т2 +/- дополнительное смещение, где он будет выдавать условно 0. затем заданное количество тиков выдавать 1. а после этого опять 0. Вот тут уже от документации на Н7 немного поплохело 😞 В процессе работы длительность рангов не меняется, но меняется при отладке.
  3. Так к чему пришли с этой проблемой? Был прототип на weshare usb3300, подключенный вообще "лапшой" с СТМ32Н750. через 2 разъема... С год отработало без нареканий, хотя при отладке пришлось помучаться. Решили положить конец этому лапшовому беспределу, развели плату. все то-же самое, только красиво.... Вот только заливаю ту-же прошивку, HAL на 3300 не ругается. Но выдает ему бесконечный ЮСБ бизи. сам 3300, если питать его 24мгц от СТМки, выдает красивый Клок (60мгц который), все напряжения на месте. Если подключить к нему задуманный кварц, то синус как-то кривовато выглядит, клок тоже не очень красивый становится. Уже начал психовать, скинул с вешаровской платы чип, подключид тонкими проводами к его родному кварцу, на кварце стало красиво, 60мгц по прежнему кривоватый. Но после инита не выставляет высокий уровень на ЮСБ шину, иногда у него получается дернуть ЮСБ шиной, но комп видит как "неопознанное устройство". Сравнивал с лапшевым вариантом, все в целом выглядит почти так-же. короткий всплеск на ШД и лапша готова к работе и выключает кварц, включает его только тогда, когда подключен ЮСБ кабель. А вариант с разводкой, после инита продолжает работать кварц, продолжает выдавать 60мгц. Из нареканий к разводке "дальние" ножки где-то 20мм, ближние ножки линий данных где-то 5мм, между чипами. Ну так криво выведен наружу ULPI у H750VBT6.
×
×
  • Создать...