...
4개 직렬 연결
// 74HC595_PIN13, PB10 - OE
// 74HC595_PIN11, PB11 - SRCLK - SHIFT
// 74HC595_PIN12, PB12 - RCLK - LATCH
// 74HC595_PIN14, PB13 - SDI - DATA
// 74HC595_PIN10, PB14 - CLR
//- SER (Serial Input) : 시프트 레지스터로 데이터를 입력하는 핀
//- SRCLK (Shift Register Clock) : 클럭 핀(Clock Pin)의 상승 에지(Rising Edge) 신호에 동기되어 데이터 핀의 데이터가 시프트 레지스터로 들어갑니다.
//- RCLK (Register Clock/Latch) : 이 핀에 신호가 들어가면 시프트 레지스터의 내용이 저장/래치 레지스터로 복사됩니다.
void DisplayLED(uint8_t *Val)
{
/* Latch Clock Off */
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
uint32_t data = 0;
data = Val[0] | ( Val[1] << 8) | ( Val[2] << 16) | ( Val[3] << 24);
DEBUGPRINT("data %X \r\n", data);
for(int i = 0 ; i < 32; i++){
/* Data Clock */
if(data >> (31-i) & 0x01){ // MSB first in
GPIO_SetBits(GPIOB, GPIO_Pin_13);// Data line
}
else{
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
}
/* Shift Clock */
GPIO_SetBits(GPIOB, GPIO_Pin_11);
GPIO_ResetBits(GPIOB, GPIO_Pin_11);
}
/* Latch Clock On */
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
void main(void)
{
GPIO_conf();
/* CLR */
//GPIO_SetBits(GPIOB, GPIO_Pin_14);
/* OE */
GPIO_ResetBits(GPIOB, GPIO_Pin_10);
count[3] = 0;
count[2] = 0;
count[1] = 0;
while(1){
if(count[0] > 255){
count[0] = 255;
}
count[0]++;
count[1]++;
count[2]++;
count[3]++;
DisplayLED(count); // thousands
delay_ms(500);
}
}
※ 참고
'초보의 아웅다웅 설계하기 > STM32' 카테고리의 다른 글
[STM32]네오픽셀 W2812 (0) | 2024.09.05 |
---|---|
[DMA 매핑] STM32F42X, STM32F43X (0) | 2024.08.19 |
STM32F103 PWM 주파수 설정 (0) | 2023.07.08 |
치과용 초음파 세척 (0) | 2023.06.30 |
SSD1362 (0) | 2023.05.18 |