помогите понять тонкости различий контроллеров stm32F103 и F4 серии. у меня точные энкодеры. и я их считываю через таймеры. проблема в том что один и тот же код работает по разному. st.htim.Instance = Instance; st.htim.Init.Prescaler = 0; st.htim.Init.CounterMode = TIM_COUNTERMODE_UP; st.htim.Init.Period = _pulseTicks; // generate an irq every 4 ticks st.htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; st.htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; sConfig.EncoderMode = TIM_ENCODERMODE_TI12; sConfig.IC1Polarity = TIM_ICPOLARITY_FALLING; sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; sConfig.IC1Prescaler = TIM_ICPSC_DIV1; sConfig.IC1Filter = _ICxFilter; sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING; sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI; sConfig.IC2Prescaler = TIM_ICPSC_DIV1; sConfig.IC2Filter = _ICxFilter; проблема в Period. на F103 когда я присваиваю ему 0 то энкодер считывается в максимальном разрешении. но вот на F4 серии с 0 просто не работает. видимо не срабатывает прерывание. минимальное рабочее значение для него 1. но при этом энкодер считывает с половинным разрешением. в описании написано: Period – значение регистра перезагрузки. Определяет период работы таймера. Может принимать значения 0 … 65535, что соответствует периоду 1 … 65535 импульсов тактирования. как его заставить работать с 0?

Комментарии: 8

  1. Domovenok

    Странный код... Завтра на работе гляну. Почему нужно чтоб с 0 работало?

    • Dmitriy

      Ну это так в библиотеке сделано и работает на f103. Но мне ее мало и я перехожу на f4 а там не работает так же

      • Domovenok

        Почему мало? Какое разрешение энкодера?

        • Loreyan

          В зажигалке электрический дуга переменная?

        • Dmitriy

          Мало размера памяти и количества ног. У меня в станке три энкодера. Микронная линейка, энкодер на 2000 пульсов и на 600 пульсов. Станку нужны микронные значения для работы. Те 1 микрон сейчас он может видеть

          • Domovenok

            Зачем? Это не так работает. В регистр перезагрузки можешь записать любое число, лучше разрешение твоего энкодера. Таймер настраиваеься на фронты или спады, или на то и другое, благодаря этому можешь увеличить разрешение своего энкодера. Значение счётчика таймера лежит в регистре CNT. В главном цикле забираешь из CNT и делаешь что нужно. F103zet6 посмотри, ног вагон... По поводу памяти, может код пересмотреть? Станок что должен делать?

    • Dmitriy

      0 это на каждый тик чтобы срабатывало прерывание.

Не нашли ответ?

Вам также может быть интересно