GPIO output level
: High : 3.3 v , Low 0v
> HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 1)
enum
reset = 0u ;
set;
//set 은 1
//reset이 1이면 > set =2
GPOI mode
push pull : s/w // mcu 3.3v를 제어
open drain : s/w :short > GND
:open > floating
floating
떠다니는 상태
>전류가 흐를지 말지 모름
>>
pull-up 저항 (R) : 위쪽 5v 로 묶여짐 // 저항 > 전류 i 가 생김
pull -down 저항 : 저항을 그라운드쪽에 > s/w 제어 전까진 0
>
pull - up : 위로 끌어 당기다
pull - down : 아래로 끌어 당기다
일반적으로 풀업을 많이 사용 : 3.3v 상태라 노이즈에 강함
풀다운은 0v 상태라 노이즈에 충격이 많이감
현재 보드에서의 led
3.3v -> pc13 으로 흐름
>pc13 : 0 (gnd) 가 되어야함
>>
if(!HAL_GPIO_ReadPin(GPIO_SW_GPIO_Port, GPIO_SW_Pin)){
HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 0);
Maximum output speed
> GPIO 를 High > Low > High 전환 speed
> GPIO > I2c, spI 통신
PA0 < S/W < GND
> PA0 을 풀업으로 묶어야 S/W ON, OFF 로 제어가능
assert_param : 아무것도 안함. //unused
원래는 디버깅 메세지 출력하기 위한것
SET_BIT(REG, BIT) ((REG) |= (BIT))
__HAL_RCC_GPIOC_CLK_ENABLE() SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN)
// GPIO 포터 클럭 enable
RCC->APB2ENR = *(0x40021018)
RCC_APB2ENR_IOPCEN =16 // 0x1UL << RCC_APB2ENR_IOPCEN_Pos (4)
>> *(0x40021018) |= 16
클럭
기준점, 심장, 기점
외부클럭, 내부클럭이 있음
외부클럭 > 크리스탈
기준시작점 8M/s
> 장치마다 필요clock 이 다 다름
bus형 방식 : 하나의 버스(통로) 를 만들어서 abcde 를 연결
빠른애들 , 느린애들 있으니,, 2개로 나눔
AHB system BUS , APB
GPIO_LED_GPIO_Port 0x40011000
GPIO_LED_Pin 8192(0x2000) 10 0000 0000 0000 (13번 // PC13)
//레퍼런스 메뉴얼 : BS13 : 1 //Set the corresponding ODRx bit
GPIO_PIN_SET decimal 1 (10진법)
typedef struct
{
__IO uint32_t CRL; //0x40011000
__IO uint32_t CRH; // 0x40011004
__IO uint32_t IDR; //0x40011008
__IO uint32_t ODR; //0x4001100C
__IO uint32_t BSRR; //0x40011010
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
GPIOx->BSRR = *(0x40011010)
HIGH :
GPIOx->BSRR = GPIO_Pin;
*(0x40011010) = 8192
LOW
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u;
*(0x40011010) = 13<<16 == 29번핀(RESET) on
'임베디드 > 고추건조기' 카테고리의 다른 글
데이터 시트 보는법 (1) | 2024.11.23 |
---|---|
GPIO 마무리, 회로도 보기 (0) | 2024.11.21 |
GPIO 탐구 (0) | 2024.11.21 |
ACR 레퍼런스 메뉴얼 (1) | 2024.11.16 |
HAL_Init(); (1) | 2024.11.16 |