먼저
PC8, 9, 10, 11 핀을 output 모드로 사용해 0x0-0xF 까지의 카운터를 구현하였고,
PD0, 1, 2, 3, 4, 5, 6 핀을 output 모드로 사용해 FND에 0-9까지의 숫자를 출력하였다.
참고로 핀을 선택할때 내가 한 것처럼 이어진 핀을 선택해야 나중에 코드짜기가 쉽다.
그리고 아무리 MODER 에 원하는 값을 대입해도 현재 해당 GPIOx 핀이 MX 툴에서 활성화된게 아무것도 없으면 모드 설정이 안되더라.. 아마 MX_GPIO_Init(); 함수 내에 설정이 안되서 그런거 같은데 MODER은 MX툴 쓰는게 편한거 같다.
unsigned char 배열을 사용해 0x0부터 0xF까지의 숫자를 미리 넣어주었다.
/* USER CODE BEGIN 2 */
GPIOC->MODER |= 0x00550000; // set PC8,9,10,11 to output mode
GPIOD->MODER |= 0x00001555; // set PD0,1,2,3,4,5,6 to output mode
unsigned char num[16]= {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf};
/* USER CODE END 2 */
GPIOC->MODER의 경우 최상위비트부터 고려해서 아래와 같이 16진수 값을 대입해주면 되고
GPIOD->MODER의 경우는 이렇게 원하는 핀만 output mode로 설정해 주었다. |= 연산은 0인 곳은 이전상태에서 불변이고 1인 곳만 이전상태에 상관없이 1로 만들어 줘서 원하는 비트만 켤 수 있다.
그리고 for문으로 반복하면서
GPIOC->ODR = num[i] << 8;
GPIOD->ODR = ttl7447(num[i]);
을 반복하면서 output data 출력
/* USER CODE BEGIN WHILE */
while (1)
{
for(int i=0; i<16; i++){ // count 0 to F through PC8,9,10,11
GPIOC->ODR = num[i] << 8;
GPIOD->ODR = ttl7447(num[i]); // FND print 0-9
HAL_Delay(500);
}
/* USER CODE END WHILE */
왼쪽으로 8만큼 시프트연산 해준 이유는 내가 PC8, 9, 10, 11 핀을 사용하였기 때문이다.
다음 ttl7447 함수의 내부이다.
0-15까지의 숫자를 받아서 7 segment FND에 출력하기 위한 신호로 리턴해준다.
/* USER CODE BEGIN PFP */
unsigned char ttl7447(unsigned char num);
/* USER CODE END PFP */
/* USER CODE BEGIN 4 */
unsigned char ttl7447(unsigned char num){
if(num==0x0) return 0x01;
else if(num==0x1) return 0x4f;
else if(num==0x2) return 0x12;
else if(num==0x3) return 0x06;
else if(num==0x4) return 0x4c;
else if(num==0x5) return 0x24;
else if(num==0x6) return 0x60;
else if(num==0x7) return 0x0f;
else if(num==0x8) return 0x00;
else if(num==0x9) return 0x0c;
else return 0x7f;
}
/* USER CODE END 4 */
커먼 애노드 타입이라 리턴값은 아래를 참고해주었다.
예를 들어 숫자가 0이어서 리턴값이 0x01이라고 한다면 PD0번핀만 HIGH 신호가 가서 불이 안켜지고 나머지는 다 불이 켜진다.
그래서 회로는 PD0핀은 G에 ~ PD6핀은 a에 연결하면 된다.
'임베디드 개발 > STM32 (ARM Cortex-M)' 카테고리의 다른 글
STM32 , 4비트 병렬 가산기( IC 7483 ) 소스코드로 구현 ( 호환보드 사용 ) (0) | 2022.05.20 |
---|---|
STM32 , IC 74138 디코더 소스코드로 구현하기 ( Nucleo-144용 I/O 호환보드 사용 ) (0) | 2022.05.20 |
STM32 레지스터에 접근해 GPIO 제어하기 (0) | 2022.05.19 |
STM32CubeIDE ] STM32 개발보드 GPIO 제어하기 ( by MCU/MPU Selector ) (0) | 2022.05.19 |
STM32CubeIDE 다운로드 받고 새 프로젝트 만들기 (0) | 2022.05.16 |