Есть Выход
Код
//Trigger
/*Configure GPIO pin : PE3 */
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PE3 */
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
Есть таймер 6, его настройка.
Код
__TIM6_CLK_ENABLE();
UV_state = 0;
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
TIM6->PSC = 143;
TIM6->ARR = 62499; //100 mS
//TIM6->EGR = TIM_EGR_UG;
TIM6->DIER = TIM_DIER_UIE;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
UV_state = 0;
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
TIM6->PSC = 143;
TIM6->ARR = 62499; //100 mS
//TIM6->EGR = TIM_EGR_UG;
TIM6->DIER = TIM_DIER_UIE;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
Это прерывание
CODE
void TIM6_DAC_IRQHandler(void)
{
TIM6->CR1 &= ~TIM_CR1_CEN; //Остнавливаем таймер
TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
switch (UV_state)
{
case 0:
TIM6->PSC = 0;
TIM6->ARR = 0x707;//1799; //20 uS
TIM6->CNT = 0;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
UV_state = 1;
break;
case 1:
TIM6->PSC = 0x008f;//143
TIM6->ARR = 0xF423;//62499; //Ñðàáîòàòü íà 100 mS
TIM6->CNT = 0;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
UV_state = 0;
break;
}
}
{
TIM6->CR1 &= ~TIM_CR1_CEN; //Остнавливаем таймер
TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
switch (UV_state)
{
case 0:
TIM6->PSC = 0;
TIM6->ARR = 0x707;//1799; //20 uS
TIM6->CNT = 0;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
UV_state = 1;
break;
case 1:
TIM6->PSC = 0x008f;//143
TIM6->ARR = 0xF423;//62499; //Ñðàáîòàòü íà 100 mS
TIM6->CNT = 0;
TIM6->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
UV_state = 0;
break;
}
}
Хочу иметь импульс 20 us через 100 ms, и вроде все логично, но на выходе все перевернуто
Нажмите для просмотра прикрепленного файла
Ну где тут можно ошибиться?
Заходим по состоянию 0, устанавливаем таймер на 20 us и устанавливаем ногу в 1, чтобы в следующем прерывании ее сбросить и настроить прерывание на 100 ms и потом ее установить в 1 в новом прерывании. Почему на выходе все наоборот?