работающие 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_1);
HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_2); HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_2);
htim2.Instance->DIER = (TIM_DIER_UIE | TIM_DIER_CC2IE); 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) { while (1) {
HAL_IWDG_Refresh(&hiwdg); HAL_IWDG_Refresh(&hiwdg);
// for (int i = 0; i < 7; i++) { // for (int i = 0; i < 7; i++) {

View File

@ -255,7 +255,7 @@ void TIM2_IRQHandler(void)
/* USER CODE BEGIN TIM2_IRQn 0 */ /* USER CODE BEGIN TIM2_IRQn 0 */
static uint32_t overflows = 0; static uint32_t overflows = 0;
const uint16_t sr = TIM2->SR; 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) { if (sr & TIM_SR_UIF) {
overflows++; overflows++;
@ -263,16 +263,15 @@ void TIM2_IRQHandler(void)
if (sr & (TIM_SR_CC1OF | TIM_SR_CC2OF)) { if (sr & (TIM_SR_CC1OF | TIM_SR_CC2OF)) {
// overrun, skip processing // overrun, skip processing
buffer_ch1.overruns = buffer_ch1.overruns + 1; buffer_ch1.overruns = buffer_ch1.overruns + 1;
TIM2->SR = 0;
} else if (sr & TIM_SR_CC2IF) { } else if (sr & TIM_SR_CC2IF) {
BufferItem_t b; BufferItem_t b;
b.duration = TIM2->CCR1; b.timepoint = TIM2->CCR1;
b.timepoint = TIM2->CCR2; b.duration = TIM2->CCR2;
b.duration = b.duration - b.timepoint; b.duration = b.duration - b.timepoint;
b.timepoint |= (uint64_t)(overflows) << 32; b.timepoint |= (uint64_t)(overflows) << 32;
ChannelBuffer_push(&buffer_ch1, &b); ChannelBuffer_push(&buffer_ch1, &b);
} }
/* USER CODE END TIM2_IRQn 0 */ /* USER CODE END TIM2_IRQn 0 */
/* USER CODE BEGIN TIM2_IRQn 1 */ /* USER CODE BEGIN TIM2_IRQn 1 */
@ -285,7 +284,25 @@ void TIM2_IRQHandler(void)
void TIM5_IRQHandler(void) void TIM5_IRQHandler(void)
{ {
/* USER CODE BEGIN TIM5_IRQn 0 */ /* 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 END TIM5_IRQn 0 */
/* USER CODE BEGIN TIM5_IRQn 1 */ /* USER CODE BEGIN TIM5_IRQn 1 */