Vladimir_T 1 8 апреля Опубликовано 8 апреля · Жалоба Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело. Настраиваю TIM8 CH4 на выход через PC9, а на выходе сигнала нет. В отладчике KEIL проверил: периферия конфигурируется, таймер стартует, счет идет, но на выходе порта - сигнала нет. Какую еще инициализацию нужно TIM8 для формирования простого миандра? void MX_TIM8_Init(u32 Period) { htim8.Instance = TIM8; htim8.Init.Prescaler = 0; htim8.Init.CounterMode = TIM_COUNTERMODE_UP; htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim8): // RCC peripheral clock enabling TIM8->CR1 |= TIM_COUNTERMODE_UP; TIM8->CR1 |= TIM_CLOCKDIVISION_DIV1; TIM8->CCMR2 |= TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2; TIM8->PSC = 0; TIM8->CCER |= TIM_CCER_CC4E; TIM8->ARR = Period; TIM8->CCR4 = Period / 2; TIM8->SR = 0x0000; HAL_TIM_MspPostInit(&htim8); TIM8->CR1 |= TIM_CR1_CEN; } // MX_TIM8_Init(void) void HAL_TIM_MspPostInit (void) { __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_9; // PC9 ------> TIM8_CH4 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); } // HAL_TIM_MspPostInit (void) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 68 8 апреля Опубликовано 8 апреля · Жалоба В 08.04.2024 в 23:22, Vladimir_T сказал: Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело. А теперь сконфигурируйте с помощью CubeMX и сравните регистры двух версий программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladimir_T 1 8 апреля Опубликовано 8 апреля · Жалоба 2 minutes ago, HardEgor said: А теперь сконфигурируйте с помощью CubeMX и сравните регистры двух версий программы. C CubeMX также не работает. Думал, что комплементарность нужно настроить, но CubeMX тоже без нее обходится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 43 8 апреля Опубликовано 8 апреля · Жалоба On 4/8/2024 at 7:22 PM, Vladimir_T said: Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело. Настраиваю TIM8 CH4 на выход через PC9, а на выходе сигнала нет. В отладчике KEIL проверил: периферия конфигурируется, таймер стартует, счет идет, но на выходе порта - сигнала нет. Какую еще инициализацию нужно TIM8 для формирования простого миандра? Каша какая-то. И HAL и регистры. Вы уж на чем-то одном остановитесь. Во все тонкости приведенного вами кода не вникал, но явно не хватает настройки регистра BDTR, бит MOE. On 4/8/2024 at 7:48 PM, Vladimir_T said: C CubeMX также не работает. Думал, что комплементарность нужно настроить, но CubeMX тоже без нее обходится. Доку надо читать. У СН4 нет комплементарного выхода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 36 9 апреля Опубликовано 9 апреля · Жалоба 10 hours ago, Vladimir_T said: Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело. Настраиваю TIM8 CH4 на выход через PC9, а на выходе сигнала нет. В отладчике KEIL проверил: периферия конфигурируется, таймер стартует, счет идет, но на выходе порта - сигнала нет. Какую еще инициализацию нужно TIM8 для формирования простого миандра? void MX_TIM8_Init(u32 Period) { htim8.Instance = TIM8; htim8.Init.Prescaler = 0; htim8.Init.CounterMode = TIM_COUNTERMODE_UP; htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim8): // RCC peripheral clock enabling TIM8->CR1 |= TIM_COUNTERMODE_UP; TIM8->CR1 |= TIM_CLOCKDIVISION_DIV1; TIM8->CCMR2 |= TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2; TIM8->PSC = 0; TIM8->CCER |= TIM_CCER_CC4E; TIM8->ARR = Period; TIM8->CCR4 = Period / 2; TIM8->SR = 0x0000; HAL_TIM_MspPostInit(&htim8); TIM8->CR1 |= TIM_CR1_CEN; } // MX_TIM8_Init(void) void HAL_TIM_MspPostInit (void) { __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_9; // PC9 ------> TIM8_CH4 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); } // HAL_TIM_MspPostInit (void) "Абрам Моисеевич, вы или трусы наденьте, или крестик снимите!" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladimir_T 1 9 апреля Опубликовано 9 апреля · Жалоба 13 hours ago, dimka76 said: Каша какая-то. И HAL и регистры. Вы уж на чем-то одном остановитесь. Во все тонкости приведенного вами кода не вникал, но явно не хватает настройки регистра BDTR, бит MOE. Доку надо читать. У СН4 нет комплементарного выхода. Благодарю за критику! Это только отладочный момент. Проект перетек из 4-го семейства на 7-е. На 4-м пользовался SPL. Для 7-го библиотеку SPL не нашел. Если есть, то пришлите ссылку. У TIM8 CH4 комплементарного выхода, потому регистр BDTR игнорировал, беспечность подвела. TIM8->BDTR |= TIM_BDTR_MOE; // Main output enable. OC output are enabled if their respective enable bits are set Теперь работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться