M1 - Tugas Pendahuluan 1
1. Buka software proteus lalu rangkai komponen sesuai dengan gambar yang ada di modul
2. Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output
3. Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex
4. Masukan file .hex ke dalam file library STM32F103C8 pada proteus
5. Simulasikan rangkaian
c) Rangkaian Simulasi dan Prinsip Kerja
#include "stm32f1xx_hal.h"
// Prototype
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); // PIR = PA1
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2); // TOUCH = PA2
if (pir_now == GPIO_PIN_SET || touch_now == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);// LED ON
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);// LED OFF
}
}
}
// ================= CLOCK =================
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
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();
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK |
RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
Error_Handler();
}
// ================= GPIO =================
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// INPUT: PIR (PA1) & TOUCH (PA2)
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
// 🔥 PENTING: agar tidak floating
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// OUTPUT: LED (PB0) & BUZZER (PB1)
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// Default OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
}
// ================= ERROR =================
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika PIR tidak mendeteksi gerakan dan sensor Touch tidak mendeteksi sentuhan, maka LED akan mati.
- Download File Rangkaian klik disini
- Download Video Penjelasan Rangkaian klik disini
- Download Datasheet Touch Sensor klik disini
- Download Datasheet Pir Sensor klik disini
- Download Datasheet Resistor klik disini
- Download Datasheet LED klik disini
- Download Datasheet Buzzer klik disini
Comments
Post a Comment