работающие 2 канала

This commit is contained in:
Vladislav Ostapov 2025-04-01 15:08:09 +03:00
parent 39edb0d981
commit 6f930abf27
2 changed files with 27 additions and 5 deletions

View File

@ -142,6 +142,11 @@ int main(void)
HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_1);
HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_2);
htim2.Instance->DIER = (TIM_DIER_UIE | TIM_DIER_CC2IE);
HAL_TIM_Base_Start(&htim5);
HAL_TIM_IC_Start(&htim5, TIM_CHANNEL_1);
HAL_TIM_IC_Start(&htim5, TIM_CHANNEL_2);
htim5.Instance->DIER = (TIM_DIER_UIE | TIM_DIER_CC2IE);
while (1) {
HAL_IWDG_Refresh(&hiwdg);
// for (int i = 0; i < 7; i++) {

View File

@ -255,7 +255,7 @@ void TIM2_IRQHandler(void)
/* USER CODE BEGIN TIM2_IRQn 0 */
static uint32_t overflows = 0;
const uint16_t sr = TIM2->SR;
TIM2->SR = 0;
TIM2->SR = TIM_SR_CC1OF | TIM_SR_CC2OF | TIM_SR_CC1IF | TIM_SR_CC2IF; // все флаги кроме флагов нужных мне каналов
if (sr & TIM_SR_UIF) {
overflows++;
@ -263,16 +263,15 @@ void TIM2_IRQHandler(void)
if (sr & (TIM_SR_CC1OF | TIM_SR_CC2OF)) {
// overrun, skip processing
buffer_ch1.overruns = buffer_ch1.overruns + 1;
TIM2->SR = 0;
} else if (sr & TIM_SR_CC2IF) {
BufferItem_t b;
b.duration = TIM2->CCR1;
b.timepoint = TIM2->CCR2;
b.timepoint = TIM2->CCR1;
b.duration = TIM2->CCR2;
b.duration = b.duration - b.timepoint;
b.timepoint |= (uint64_t)(overflows) << 32;
ChannelBuffer_push(&buffer_ch1, &b);
}
/* USER CODE END TIM2_IRQn 0 */
/* USER CODE BEGIN TIM2_IRQn 1 */
@ -285,7 +284,25 @@ void TIM2_IRQHandler(void)
void TIM5_IRQHandler(void)
{
/* USER CODE BEGIN TIM5_IRQn 0 */
static uint32_t overflows = 0;
const uint16_t sr = TIM5->SR;
TIM5->SR = TIM_SR_CC1OF | TIM_SR_CC2OF | TIM_SR_CC1IF | TIM_SR_CC2IF; // все флаги кроме флагов нужных мне каналов
if (sr & TIM_SR_UIF) {
overflows++;
}
if (sr & (TIM_SR_CC1OF | TIM_SR_CC2OF)) {
// overrun, skip processing
buffer_ch2.overruns = buffer_ch2.overruns + 1;
TIM5->SR = 0;
} else if (sr & TIM_SR_CC2IF) {
BufferItem_t b;
b.timepoint = TIM5->CCR1;
b.duration = TIM5->CCR2;
b.duration = b.duration - b.timepoint;
b.timepoint |= (uint64_t)(overflows) << 32;
ChannelBuffer_push(&buffer_ch2, &b);
}
/* USER CODE END TIM5_IRQn 0 */
/* USER CODE BEGIN TIM5_IRQn 1 */