Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH

KHOA CƠ KHÍ CHẾ TẠO MÁY


BỘ MÔN CƠ ĐIỆN TỬ


BÁO CÁO
Thực tập Vi xử lý _ Tuần 4-6

MÔN HỌC: Thực tập Vi Xử Lý


LỚP MÔN HỌC: Thứ 2_Tiết 7-12
GIẢNG VIÊN: Huỳnh Quang Duy

SVTH:
1. Mao Đình Huân 21146463

TP. Hồ Chí Minh, tháng 3 năm 2024


I. CHƯƠNG TRÌNH VẬN HÀNH LED 7 ĐOẠN VỚI TIMER NGẮT
a. Bài toán: Dùng 1 biến đếm lên, được đếm bởi 1 Timer ngắt tràn 1s,
cập nhật biến đếm để hiển thị lên led 7 đoạn giá trị thời gian hh:mm.
b. Vi xử lý: STM32 F103VCT6, STM32F207VCT6
c. Thiết bị: Led 7 đoạn (mắc IC74HC595), nút nhấn (mắc IC74HC165),
d. Giá trị I/O
Giá trị chân I/O Chức năng
PB3 Clock output
PB5 Data output
74HC595
PE0 Latch
PE2 GND
PB4 Data input
74HC165
PE1 Clock input

e. Chương trình
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
unsigned char Led_Code[10] = {0xAF, 0xA0, 0x6E, 0xEA, 0xE1,
0xCB, 0xCF, 0xA2, 0xEF, 0xEB};
unsigned char Led_Position[5] = {0x08, 0x10,0x20,0x40,0x80};
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/


/* USER CODE BEGIN PTD */
unsigned long count = 0;
char Data75HC165 = 0xFF;
unsigned B1=0;
unsigned B2=0;
unsigned B3=0;
unsigned B4=0;

/* Private variables ---------------------------------------------------------*/


TIM_HandleTypeDef htim1;

/* Private function prototypes ----------------------------------------------*/


void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM1_Init(void);

/* Private user code ---------------------------------------------------------*/


/* USER CODE BEGIN 0 */
void Latch_Led ()
{
HAL_GPIO_WritePin(Latch_GPIO_Port, Latch_Pin, 0);
HAL_GPIO_WritePin(Latch_GPIO_Port, Latch_Pin, 1);
HAL_Delay(1);
}
void Shift_Led_Code_5(unsigned long d)
{
for (uint8_t i=0; i<8; i++)
{
HAL_GPIO_WritePin(Data_GPIO_Port, Data_Pin,
Led_Code[(d/3600)/10]&(1<<(7-i)));
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 0);
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 1);
}
}

void Shift_Led_Code_4(unsigned long d)


{
for (uint8_t i=0; i<8; i++)
{
HAL_GPIO_WritePin(Data_GPIO_Port, Data_Pin,
Led_Code[(d/3600)%10]&(1<<(7-i)));
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 0);
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 1);
}
}

void Shift_Led_Code_3(unsigned long d)


{
for (uint8_t i=0; i<8; i++)
{
HAL_GPIO_WritePin(Data_GPIO_Port, Data_Pin,
(d)&(1<<(7-i)) );
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 0);
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 1);
}
}

void Shift_Led_Code_2(unsigned long d)


{
for (uint8_t i=0; i<8; i++)
{
HAL_GPIO_WritePin(Data_GPIO_Port, Data_Pin,
Led_Code[((d%3600)/60)/10]&(1<<(7-i)));
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 0);
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 1);
}
}

void Shift_Led_Code_1(unsigned long d)


{
for (uint8_t i=0; i<8; i++)
{
HAL_GPIO_WritePin(Data_GPIO_Port, Data_Pin,
Led_Code[((d%3600)/60)%10]&(1<<(7-i)));
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 0);
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 1);
}
}

void Shift_Led_Position (unsigned p)


{
for (uint8_t i=0; i<8; i++)
{
HAL_GPIO_WritePin(Data_GPIO_Port, Data_Pin,
Led_Position[p]&(1<<(7-i)) );
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 0);
HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 1);
}
}

void Display_Quet_5_Led()
{
Shift_Led_Position(0);
Shift_Led_Code_5(count);
Latch_Led();

Shift_Led_Position(1);
Shift_Led_Code_4(count);
Latch_Led();

Shift_Led_Position(2);
Shift_Led_Code_3(0x40);
Latch_Led();

Shift_Led_Position(3);
Shift_Led_Code_2(count);
Latch_Led();

Shift_Led_Position(4);
Shift_Led_Code_1(count);
Latch_Led();
}
void Get_Data165()
{
HAL_GPIO_WritePin(SH165_GPIO_Port,SH165_Pin,1);
HAL_GPIO_WritePin(SH165_GPIO_Port,SH165_Pin,0);
HAL_GPIO_WritePin(SH165_GPIO_Port,SH165_Pin,1);

for (uint8_t i=0; i<8; i++)


{

if(HAL_GPIO_ReadPin(Input165_GPIO_Port,Input165_Pin) ==
0)
Data75HC165 &= ~(1<<(7-i));
else
Data75HC165 |= (1<<(7-i));

HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 0);


HAL_GPIO_WritePin(Clock_GPIO_Port, Clock_Pin, 1);
}
}

int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the
Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();

/* Initialize all configured peripherals */


MX_GPIO_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim1);
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */


HAL_GPIO_WritePin(E2_GPIO_Port,E2_Pin,0);
Display_Quet_5_Led();
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Initializes the RCC Oscillators according to the specified


parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType =
RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue =
RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}

/** Initializes the CPU, AHB and APB buses clocks


*/
RCC_ClkInitStruct.ClockType =
RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource =
RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct,
FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}

/**
* @brief TIM1 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM1_Init(void)
{

/* USER CODE BEGIN TIM1_Init 0 */

/* USER CODE END TIM1_Init 0 */

TIM_ClockConfigTypeDef sClockSourceConfig = {0};


TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM1_Init 1 */

/* USER CODE END TIM1_Init 1 */


htim1.Instance = TIM1;
htim1.Init.Prescaler = 7999;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 999;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
htim1.Init.AutoReloadPreload =
TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource =
TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig)
!= HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode =
TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim1,
&sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM1_Init 2 */

/* USER CODE END TIM1_Init 2 */

}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

/* GPIO Ports Clock Enable */


__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOE, E2_Pin|Latch_Pin|SH165_Pin,
GPIO_PIN_SET);

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOB, Led_Pin|Clock_Pin|Data_Pin,
GPIO_PIN_SET);

/*Configure GPIO pins : E2_Pin Latch_Pin SH165_Pin */


GPIO_InitStruct.Pin = E2_Pin|Latch_Pin|SH165_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/*Configure GPIO pins : Led_Pin Clock_Pin Data_Pin */


GPIO_InitStruct.Pin = Led_Pin|Clock_Pin|Data_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pin : Input165_Pin */


GPIO_InitStruct.Pin = Input165_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(Input165_GPIO_Port, &GPIO_InitStruct);

/* USER CODE BEGIN MX_GPIO_Init_2 */


/* USER CODE END MX_GPIO_Init_2 */
}

/* USER CODE BEGIN 4 */


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1)
{
HAL_GPIO_TogglePin(Led_GPIO_Port,Led_Pin);
if (count < 86400)
count ++;
else count = 0;
}
}

/* USER CODE END 4 */

/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error
return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}
II. CHƯƠNG TRÌNH ĐIỀU KHIỂN BĂNG TẢI VỚI TIMER NGẮT
a. Bài toán: Nhấn nút Star cấp nguồn cho hệ thống, khi cảm biến S1 có
tín hiệu sản cho băng tải chạy. Khi cảm biến S2 có tín hiệu sản phẩm
cho dừng băng tải. Nếu sau 10s (dùng Timer để đếm) cảm biến S1
không có phát hiện sản phẩm sẽ ngắt nguồn hệ thống, ngược lại hệ
thống tiếp tục vận hành. Nhấn nút Stop ngắt nguồn hệ thống.
b. Vi xử lý: STM32F207VCT6.
c. Thiết bị: Motor vận hành băng tải, cảm biến S1 và S2, nút nhấn vật lý.
d. Giá trị I/O
Giá trị chân I/O Chức năng
PB0 Motor
PD11 Button 1 (Start)
PC6 Button 2 (Stop)
PD13 Cảm biến S1
PD12 Cảm biến S2

e. Chương trình
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim1;

/* USER CODE BEGIN PV */


unsigned P1;
unsigned P3;

unsigned P1_state=0;
unsigned P2_state=0;

unsigned S1;
unsigned S2;

unsigned Time_Pause=0;
unsigned Power;
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------


*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM1_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/


/* USER CODE BEGIN 0 */

/* USER CODE END 0 */


int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------
*/

/* Reset of all peripherals, Initializes the Flash interface and the


Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */


SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */


MX_GPIO_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */


P1 = HAL_GPIO_ReadPin(P1_GPIO_Port,P1_Pin);
P3 = HAL_GPIO_ReadPin(P3_GPIO_Port,P3_Pin);
S1 = HAL_GPIO_ReadPin(S1_GPIO_Port,S1_Pin);
S2 = HAL_GPIO_ReadPin(S2_GPIO_Port,S2_Pin);
//---------------------------------------------------Nguon_On
if((P1==0) && (P1_state==0))
{
Power = 1;
HAL_GPIO_WritePin(D1_GPIO_Port,D1_Pin,0);
P1_state = 1;
}
else if((P1!=0) && (P1_state==1))
{
P1_state=0;
}
//---------------------------------------------------Nguon_Off
if (((P3==0) && (P2_state==0)) || (Time_Pause == 10))
{
Power = 0;
HAL_GPIO_WritePin(D1_GPIO_Port,D1_Pin,1);

HAL_GPIO_WritePin(Motor_GPIO_Port,Motor_Pin,1);
HAL_TIM_Base_Stop_IT(&htim1);
Time_Pause = 0;
P2_state=1;
}
else if ((P3!=0) && (P2_state==1))
{
P2_state=0;
}
//----------------------------------------------------S1_On->BangTai_On
if((Power==1) && (S1==1))
{
HAL_TIM_Base_Stop_IT(&htim1);
Time_Pause = 0;

HAL_GPIO_WritePin(Motor_GPIO_Port,Motor_Pin,0);
}
//---------------------------------------------------S2_On->BangTai_Off
if((Power==1) && (S2==1))
{
HAL_TIM_Base_Start_IT(&htim1);

HAL_GPIO_WritePin(Motor_GPIO_Port,Motor_Pin,1);
}

}
/* USER CODE END 3 */
}

/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Initializes the RCC Oscillators according to the specified


parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType =
RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue =
RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType =
RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource =
RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct,
FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}

/**
* @brief TIM1 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM1_Init(void)
{

/* USER CODE BEGIN TIM1_Init 0 */

/* USER CODE END TIM1_Init 0 */


TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM1_Init 1 */

/* USER CODE END TIM1_Init 1 */


htim1.Instance = TIM1;
htim1.Init.Prescaler = 7999;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 1998;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
htim1.Init.AutoReloadPreload =
TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource =
TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig)
!= HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode =
TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim1,
&sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM1_Init 2 */

/* USER CODE END TIM1_Init 2 */

/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};

/* GPIO Ports Clock Enable */


__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(D1_GPIO_Port, D1_Pin, GPIO_PIN_SET);

/*Configure GPIO pin Output Level */


HAL_GPIO_WritePin(GPIOB, Motor_Pin|D2_Pin|Led_Pin,
GPIO_PIN_SET);

/*Configure GPIO pin : D1_Pin */


GPIO_InitStruct.Pin = D1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(D1_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pins : Motor_Pin D2_Pin Led_Pin */


GPIO_InitStruct.Pin = Motor_Pin|D2_Pin|Led_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pin : P4_Pin */


GPIO_InitStruct.Pin = P4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(P4_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pin : P1_Pin */


GPIO_InitStruct.Pin = P1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(P1_GPIO_Port, &GPIO_InitStruct);

/*Configure GPIO pins : S2_Pin S1_Pin */


GPIO_InitStruct.Pin = S2_Pin|S1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : P2_Pin P3_Pin SW2_Pin */
GPIO_InitStruct.Pin = P2_Pin|P3_Pin|SW2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/*Configure GPIO pin : SW1_Pin */


GPIO_InitStruct.Pin = SW1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(SW1_GPIO_Port, &GPIO_InitStruct);

/* USER CODE BEGIN 4 */


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM1)
{
HAL_GPIO_TogglePin(D2_GPIO_Port,D2_Pin);
if (Time_Pause < 10)
Time_Pause++;
else Time_Pause = 0;
}

You might also like