Percobaan
7
UART
& I2C (STM – Pi Pico)
1. Prosedur [Kembali]
- Rangkai semua komponen
- Buat program di STM32 CubeIDE dan ThonnyIDE
- Jalankan program dan cobakan sesuai kondisi
- Rangkaian
- Listing Program
STM32
#include "main.h"#include <string.h>// Inisialisasi UARTUART_HandleTypeDef huart1;// Deklarasi fungsivoid SystemClock_Config(void);void MX_GPIO_Init(void);void MX_USART1_UART_Init(void);// Fungsi kirim data UARTvoid send_uart(char *text) {HAL_UART_Transmit(&huart1, (uint8_t *)text, strlen(text), HAL_MAX_DELAY);}int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();while (1) {if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET) {send_uart("MERAH\r\n");HAL_Delay(300);while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12) == GPIO_PIN_RESET);}else if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13) == GPIO_PIN_RESET) {send_uart("HIJAU\r\n");HAL_Delay(300);while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_13) == GPIO_PIN_RESET);}else if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14) == GPIO_PIN_RESET) {send_uart("BIRU\r\n");HAL_Delay(300);while (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_14) == GPIO_PIN_RESET);}}}// Konfigurasi clock STM32F103void SystemClock_Config(void) {RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};__HAL_RCC_AFIO_CLK_ENABLE();__HAL_RCC_PWR_CLK_ENABLE();__HAL_AFIO_REMAP_SWJ_NOJTAG(); // Bebaskan PB3 dan PB4RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);}// Konfigurasi USART1 (TX: PA9, RX: PA10)void MX_USART1_UART_Init(void) {huart1.Instance = USART1;huart1.Init.BaudRate = 9600;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&huart1);}// Inisialisasi GPIO PB12, PB13, PB14 sebagai input pull-upvoid MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_PULLUP;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);}
Raspberry Pi Pico
from machine import I2C, Pin, UARTimport utimefrom pico_i2c_lcd import I2cLcd# Inisialisasi UART0 (TX: GP0, RX: GP1)uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))# Inisialisasi LCD I2C (SCL: GP5, SDA: GP4)i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)I2C_ADDR = 0x27 # Alamat I2C LCDlcd = I2cLcd(i2c, I2C_ADDR, 2, 16)# Bersihkan dan tampilkan pesan awalutime.sleep_ms(100)lcd.clear()lcd.putstr("Menunggu input...")# Fungsi proses data UARTdef process_uart_data(data):try:decoded = data.decode('utf-8').strip()lcd.clear()if decoded == "MERAH":lcd.putstr("Warna: Merah")elif decoded == "HIJAU":lcd.putstr("Warna: Hijau")elif decoded == "BIRU":lcd.putstr("Warna: Biru")else:lcd.putstr(f"Data: {decoded}")except Exception as e:lcd.clear()lcd.putstr(f"Error: {str(e)}")# Loop utamawhile True:if uart.any():data = uart.readline()if data:process_uart_data(data)utime.sleep_ms(100) # Hindari beban CPU berlebih
HTML [Download] Rangkaian [Download]
Tidak ada komentar:
Posting Komentar