Пт окт 05, 2018 20:34:36
Пт окт 05, 2018 21:42:09
DWT.KNF18 писал(а):Как считать интервал времени между прохождением магнита - таймер или RTC?
Сб окт 06, 2018 08:32:44
Режим захвата — это особый режим работы таймера, суть которого в следующем, при изменении логического уровня на определённом выводе микроконтроллера, значение счётного регистра записывается в другой регистр, который именуют регистром захвата.
Для чего это надо?
С помощью этого режима можно измерить длительность импульса или период сигнала.
Вс окт 07, 2018 20:12:46
Вс окт 07, 2018 20:20:44
DWT.KNF18 писал(а):Как считать интервал времени между прохождением магнита - таймер или RTC?
Вс окт 07, 2018 20:38:36
Вс окт 07, 2018 20:41:18
Критиковать каждый может, Но совета ТС от вас так и не последовало. Что вы ему посоветуйте именно в контексте измерения времени а не в плате что можно сделать по другому?Oxford писал(а):Мурсик, не надо чушь всякую советовать забудь про DWT.
Вс окт 07, 2018 20:50:23
Вс окт 07, 2018 22:00:26
Речь именно об измерении времени (ТС еще про RTC писал), а не о режиме захвата таймера. С ним все понятно.dosikus писал(а):На таймере все получится аппаратно
"Бесплатный" 32-ух битный счетчик. Для задержек или измерения интервалов времени то что нужно. Ведь не у всех МК по 14 таймеров тем более 32-ух битных.dosikus писал(а):Так же и с DWT
У ТС STM32F103.dosikus писал(а):DWT в некоторых камнях просто нет.
Пн окт 08, 2018 07:44:25
Вт окт 09, 2018 14:50:05
//----------
static void calculateRpm(void)
{
rpm = 60/(timeLastSignal[0] - time);
time = timeLastSignal[0];
}
/* USER CODE BEGIN 2 */
HAL_TIM_IC_Init(&htim2);
char str[4];
lcd_init(ADDR_DEV_LCD);
LCD_ON;
LCD_CURSOR_OFF;
HAL_TIM_Base_Start_IT(&htim2);
if(FLAG_HARD_FAULT == -1)
{
lcd_put_string_LRC(2, 0, "Hard Fault");
HAL_Delay(2500);
lcd_clear();
}
lcd_put_string_LRC(2, 0, "Тахометр v 1.0");
//lcd_put_string_LRC(2, 1, "Обороты:");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
calculateRpm();
sprintf(str, "%d", rpm);
lcd_put_string_LRC(2, 1, str);
HAL_Delay(50);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
/**
* @brief This function handles TIM2 global interrupt.
*/
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
int b1 = 0;
int b2 = 0;
/*HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_4);
timeLastSignal[0] = TIM2->CCR4;
HAL_TIM_IC_Stop(&htim2,TIM_CHANNEL_4);*/
HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_4, timeLastSignal, 1);
b1 = TIM2->CCR1;
b2 = TIM2->CCR4;
/*if(timeLastSignal[0] == 0)
{
timeLastSignal[0] = 1;
}*/
HAL_TIM_IC_Stop_DMA(&htim2,TIM_CHANNEL_4);
//timeLastSignal = TIM2->CCR1;
/* USER CODE END TIM2_IRQn 0 */
HAL_TIM_IRQHandler(&htim2);
/* USER CODE BEGIN TIM2_IRQn 1 */
/* USER CODE END TIM2_IRQn 1 */
}
Вт окт 09, 2018 15:39:59
Вт окт 09, 2018 19:34:38
Ср окт 10, 2018 04:28:06