Jump to content

    
jenya7

Настройка таймера на счет внешних событий.

Recommended Posts

Я хочу считать на таймере внешние события (пульсы).

LL_TIM_SetClockSource(TIMx, LL_TIM_CLOCKSOURCE_EXT_MODE1);
LL_TIM_SetTriggerInput(TIMx, LL_TIM_TS_TI1FP1);
LL_TIM_IC_SetFilter(TIMx, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1_N4);

но у меня определены только первые два пина TIMx_CH1 (TI1FP1) и TIMx_CH2 (TI2FP2)

#define LL_TIM_TS_ITR0                 0x00000000U                                          /*!< Internal Trigger 0 (ITR0) is used as trigger input */
#define LL_TIM_TS_ITR1                 TIM_SMCR_TS_0                                        /*!< Internal Trigger 1 (ITR1) is used as trigger input */
#define LL_TIM_TS_ITR2                 TIM_SMCR_TS_1                                        /*!< Internal Trigger 2 (ITR2) is used as trigger input */
#define LL_TIM_TS_ITR3                 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1)                      /*!< Internal Trigger 3 (ITR3) is used as trigger input */
#define LL_TIM_TS_TI1F_ED              TIM_SMCR_TS_2                                        /*!< TI1 Edge Detector (TI1F_ED) is used as trigger input */
  
#define LL_TIM_TS_TI1FP1               (TIM_SMCR_TS_2 | TIM_SMCR_TS_0)                      /*!< Filtered Timer Input 1 (TI1FP1) is used as trigger input */
#define LL_TIM_TS_TI2FP2               (TIM_SMCR_TS_2 | TIM_SMCR_TS_1)                      /*!< Filtered Timer Input 2 (TI12P2) is used as trigger input */
  
//где   Filtered Timer Input 3 и Filtered Timer Input 4 ???
  
#define LL_TIM_TS_ETRF                 (TIM_SMCR_TS_2 | TIM_SMCR_TS_1 | TIM_SMCR_TS_0)      /*!< Filtered external Trigger (ETRF) is used as trigger input */

хотя по диаграмме их 4

timer.thumb.png.cdc07a8eb9660e05d68d4205cadb551d.png

получается TI3FP3 и TI4FP4 я не могу использовать аппаратно?

 

да. похоже на то. в документации упоминаются только первые два входа. очевидно разработчики решили что людям и двух хватит.

 

Edited by jenya7

Share this post


Link to post
Share on other sites

Я думаю, вот ответ) Но получен он не их хидера, который могли и написать с ошибкой, а из доки на микроконтроллер)

image.thumb.png.97887d2ef8dd4bbf0f9ca7873f5b5013.png

image.thumb.png.d4071366b302888e7ab8008c1b121a74.png

31 minutes ago, jenya7 said:

Я хочу считать на таймере внешние события (пульсы).

И вы уже который раз не приводите название своего МК) У меня документация на STM32F091.

Share this post


Link to post
Share on other sites
1 hour ago, haker_fox said:

Я думаю, вот ответ) Но получен он не их хидера, который могли и написать с ошибкой, а из доки на микроконтроллер)

И вы уже который раз не приводите название своего МК) У меня документация на STM32F091.

у меня STM32L475.

какие выводы из документации?

0111: External Clock Mode 1 - Rising edges of the selected trigger (TRGI) clock the counter.

но этот TRGI - он или TRG1 или TRG2 - я так понимаю.

Share this post


Link to post
Share on other sites
3 minutes ago, jenya7 said:

какие выводы из документации?

Тактировать свой таймер вы можете со входа триггера. Триггером может быть либо внешний сигнал от другой периферии (где-то должна быть таблица), либо внешний сигнал с пинов.

Share this post


Link to post
Share on other sites
7 hours ago, jenya7 said:

Я хочу считать на таймере внешние события (пульсы).

Знакомое дело: у меня на F051 два таймера считают импульсы (частоту) с LC-измерителя.
Я пользую вперемешку STL, а также прямой доступ к регистрам. Инициализация таймеров выглядит так:

 

   TIM_TimeBaseInitTypeDef
        TIM_TimeBaseInitStruct = {
            0,					// TIM_Prescaler
            TIM_CounterMode_Up,	// TIM_CounterMode
            DIV_Divider -1,     // TIM_Period, ARR register
            0,				   	// TIM_ClockDivision
            0					// TIM_RepetitionCounter
        };
    TIM_ICInitTypeDef
        TIM_IC1InitStructure = {
            TIM_Channel_1,
            TIM_ICPolarity_Rising,
            TIM_ICSelection_DirectTI,
            TIM_ICPSC_DIV1,
            DIV_EdgeFilter,     // setting
        };

// Input: an external signal at CH1 clocks the timer counter:
        TIM_INIT	          (tp, TIM_TimeBaseInitStruct);
        TIM_IC_INIT           (tp, TIM_IC1InitStructure);
        TIM_SelectSlaveMode   (tp, TIM_SlaveMode_External1);
        TIM_SelectInputTrigger(tp, TIM_TS_TI1FP1);
        TIM_ARRPreloadConfig  (tp, ENABLE);
        TIM_ENABLE            (tp);

TIM_INIT, TIM_IC_INIT, TIM_ENABLE - просто макросы, инкапсулирующие STL функции, плюс пара своих констант как DIV_Divider и DIV_EdgeFiler. tp - это у меня, например, TIM3.

Вы вроде так и делаете. Я надеюсь, мой код даст канву, что и как именно надо проинициализировать. Я приткнул к этому сообщению еще help file на STL для F051.

stm32f0xx_stdperiph_lib_um.chm

 

Еще следует не забыть сконфигурировать соответствующий GPIO на альтернативную функцию как вход таймера, т.к., в отличие от F1xx, которые были первой серией cortex от ST, для F0xx даже входы надо конфигурировать на альтернативные функции. Предполагаю, что для STM32L475 дело обстоит похоже.

Edited by KnightIgor

Share this post


Link to post
Share on other sites
12 hours ago, KnightIgor said:

Знакомое дело: у меня на F051 два таймера считают импульсы (частоту) с LC-измерителя.
Я пользую вперемешку STL, а также прямой доступ к регистрам. Инициализация таймеров выглядит так:
 

 

спасибо. вопрос вот в чем - TIM_SelectInputTrigger(tp, TIM_TS_TI1FP1); - это выбор первого входа. а третий можно выбрать TIM_SelectInputTrigger(tp, TIM_TS_TI3FP3) ? - полагаю что нет.

мне нужно все четыре входа.

Share this post


Link to post
Share on other sites
2 hours ago, AHTOXA said:

На диаграмме TIMx - это, возможно, общая для нескольких таймеров диаграмма.

но дефайн то общий

#define LL_TIM_TS_TI1FP1               (TIM_SMCR_TS_2 | TIM_SMCR_TS_0)                      /*!< Filtered Timer Input 1 (TI1FP1) is used as trigger input */
#define LL_TIM_TS_TI2FP2               (TIM_SMCR_TS_2 | TIM_SMCR_TS_1)                      /*!< Filtered Timer Input 2 (TI12P2) is used as trigger input */
  
//ГДЕ  Filtered Timer Input 3 и Filtered Timer Input 4 ?????  ГДЕ 3 И 4 ????????
  

 

Share this post


Link to post
Share on other sites
2 hours ago, AHTOXA said:

А, я понял. Вам надо чтобы таймер считал по этим входам. Тогда не выйдет. Вот, я отметил красным:

печалька. не хотелось делать на прерываниях но видимо придеться.

Share this post


Link to post
Share on other sites
21.06.2020 в 12:25, jenya7 сказал:

Я хочу считать на таймере внешние события (пульсы).

но у меня определены только первые два пина TIMx_CH1 (TI1FP1) и TIMx_CH2 (TI2FP2)

хотя по диаграмме их 4

получается TI3FP3 и TI4FP4 я не могу использовать аппаратно?

Чего-то я вашу задачу понять не могу. Зачем вам 4 входа? Как мультиплексор?
Таймер все равно имеет только один счетный регистр (таймер это один таймер :)) и в один момент может считать импульсы  только от одного входа.
Если нужно одновременно считать импульсы на четырех входах - нужно четыре разных таймера.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.