Menggunakan User Button dan Led bawaan pada STM32F446RE

JmPr May 17, 2022 [MCU] #STM32

Cara menggunakan user button B1 dan LD2 pada stm32 board STM32F446RE tanpa menggunakan STM32 HAL Library.

Alamat led atau LD2 berada pada PA5 sedangkan button B1 pada PC13. Masing2 dev board bisa berbeda, untuk pastinya bisa cek di User Manual board, sedangkan alamat memori / Register bisa dilihat di Reference Manual.

#include <stdint.h>

int main(void)
{
	// alamat RCC AHB1ENR
	uint32_t *pClkCtrlReg = (uint32_t*)0x40023830; //alamat rcc offset 0x30

	// port A
	uint32_t *pPortAModReg = (uint32_t*)0x40020000; //alamat moder port A
	uint32_t *pPortARegOut = (uint32_t*)0x40020014; //alamat data output port A
	// port C
	uint32_t *pPortCModReg = (uint32_t*)0x40020800; //alamat moder port C
	uint32_t *pPortCRegIn = (uint32_t*)0x40020810; // alamat register untuk membaca input dengan offset 0x10

	// enable clock  peripheral on AHB1ENR
	*pClkCtrlReg |= 0x01; // modif enable rcc PORT A
	*pClkCtrlReg |= (1<<2); // modif enable rcc PORT C

	// configure the mode of the IO pin as output
	*pPortAModReg |= 0xA8000000; // reset value
	*pPortAModReg |= (1<<10); // set mode output port PA5

	*pPortCModReg &= ~(3<<26); //reset value dan default input set mode input


	/* Loop forever */
	while(1){
		uint8_t pinStatus = (uint8_t)(*pPortCRegIn && 0x2000); // true jika bit ke 13 nilainya 1
		if(pinStatus){
			//*pPortARegOut |= (1<<5);
			*pPortARegOut &= ~(1<<5); // matikan led

		}
		else{
			//*pPortARegOut &= ~(1<<5);
			*pPortARegOut |= (1<<5); // hidupkan led
		}

	}
}