LA Modul 1 P3K2
Percobaan 3
2. Buat program STM 32 IDE CLUB
3. Connect Rangkaian STM32 dengan ST LINK ke laptop
4. Jalankan program
5. Selesai.
2. Hardware dan Diagram Blok[Kembali]
Hardware :
- ST-LINK
- STM32F103C8
- IR Transmitter dan IR Receiver
- Touch Sensor
- Buzzer
- LED
3. Rangkaian Simulasi[Kembali]
- Rangkaian
- Prinsip Kerja
Rangkaian yang digunakan terdiri dari sensor sentuh, sensor inframerah, mikrokontroler STM32, dan output seperti LED. Alur rangkaiannya dimulai dari kedua sensor sebagai input yang terhubung ke pin GPIO pada STM32. Supaya rangkaian bekerja dengan baik, setiap sensor harus terhubung ke VCC dan GND dengan benar, lalu pin output sensor masuk ke pin input STM32. Untuk bagian output, LED sebaiknya dipasang dengan resistor secara seri sebelum ke ground agar tidak mudah rusak. Selain itu, jalur kabel sebaiknya dirapikan supaya tidak membingungkan saat pengecekan rangkaian.
Prinsip kerja rangkaian ini adalah saat sistem dinyalakan, STM32 akan menginisialisasi semua pin yang digunakan. Sensor sentuh akan mendeteksi jika ada sentuhan, sedangkan sensor inframerah akan mendeteksi objek di depannya. Ketika salah satu sensor aktif, sinyal akan dikirim ke STM32 untuk diproses sesuai program yang sudah dibuat. Setelah itu, STM32 akan memberikan output, misalnya menyalakan LED. Jika tidak ada input dari sensor, maka LED tetap mati. Jadi secara sederhana, rangkaian ini bekerja dengan membaca input dari sensor lalu diproses oleh STM32 untuk mengontrol output.
4. Flowchart dan Listing Program[Kembali]
-
Flowchart
- Listing Program
#include "main.h"
uint8_t system_enable = 1;
uint8_t touch_last = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
HAL_Delay(200);
}
touch_last = touch_now;
if (system_enable)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
}
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_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();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
// Input PA0 & PA1
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// Output PB0 & PB1
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif






.jpg)





Komentar
Posting Komentar