помогите понять тонкости различий контроллеров 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
Domovenok
Странный код... Завтра на работе гляну. Почему нужно чтоб с 0 работало?
Dmitriy
Ну это так в библиотеке сделано и работает на f103. Но мне ее мало и я перехожу на f4 а там не работает так же
Domovenok
Почему мало? Какое разрешение энкодера?
Loreyan
В зажигалке электрический дуга переменная?
Dmitriy
Мало размера памяти и количества ног. У меня в станке три энкодера. Микронная линейка, энкодер на 2000 пульсов и на 600 пульсов. Станку нужны микронные значения для работы. Те 1 микрон сейчас он может видеть
Domovenok
Зачем? Это не так работает. В регистр перезагрузки можешь записать любое число, лучше разрешение твоего энкодера. Таймер настраиваеься на фронты или спады, или на то и другое, благодаря этому можешь увеличить разрешение своего энкодера. Значение счётчика таймера лежит в регистре CNT. В главном цикле забираешь из CNT и делаешь что нужно. F103zet6 посмотри, ног вагон... По поводу памяти, может код пересмотреть? Станок что должен делать?
Dmitriy
0 это на каждый тик чтобы срабатывало прерывание.