November 8th, 2018

ATmega2560

STM32, подсчет частоты импульсов.

Покритикуйте решение задачи: подсчет частоты импульсов:

Вход импульсов запускает прерывание, в котором инкрементируется переменная count
Таймер 14 настраивается на прерывания в 1сек, и в этом прерывании переменная count копируется в результирующую переменную countout , после чего переменная count обнуляется:
[Текст программы:]
main.c
/* USER CODE BEGIN PV */
/* Private variables —-------------------------------------------------------*/
/* инициализация переменных */

uint8_t count = 0;
uint8_t countout = 0;


/* USER CODE BEGIN 2 */
/* Запуск таймера 14 в режиме прерываний */

HAL_TIM_Base_Start_IT(&htim14);


while (1)
{
/* передача countout в UART2 порт */
/* пауза в 1сек */

HAL_UART_Transmit (&huart2, &countout, 1, 1000);
HAL_Delay(1000);


stm32f4xx_it.c
/* USER CODE BEGIN 0 */
/* Создание внешних переменных */

extern uint8_t count;
extern uint8_t countout;


/* USER CODE BEGIN EXTI15_10_IRQn 0 */
/* инкремент счетчика пульсаций по прерыванию, при нажатии кнопки pin С13 */

count+=1;


/* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 0 */
/* Прерывание по таймеру 14 */
/* Запоминаем количество импульсов, и сбрасываем временный счетчик */

countout=count;
count=0;