ST/STM32F103C8
engineer4ever
2025. 8. 8. 10:11
2025. 8. 8. 10:11
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 ADC를 여러개를 DMA mode로 multi conversion 한다.
|
1. STM32CubeMX : ADC-DMA 설정
- 'Pinout & Configuration' Tab으로 이동
1) Analog 선택
2) ADC1 항목 선택
- ADC Configuration 확인
ADC_Settings >
1) Scan Convsersion Mode : Enabled
여러 채널을 샘플링 하는 경우 scan 모드를 enable 하고 한개 채널만 샘플링 하는 경우 disable
2) Continous conversion mode : Enabled
3) Discontinous conversion mode : Disabled
ADC_Regular_Conversion Mode >
1) Enable Regular Conversions : Enable
2) Number of Conversion : 3
3) 각 Rank 별로 원하는 ADC 채널 선택
- DMA Settings 확인
1) DMA Request : ADC1
2) ADC1 and ADC2 global interrupts : Enabled에 체크
3) Data Width : Word(uint32_t), Half Word(uint16_t)
4) Mode : Normal(HAL_ADC_Start_DMA() 함수를 계속 호출해야 함),
Circular(HAL_ADC_Start_DMA() 함수를 최초에 한번만 호출하면 됨)
2. ATOLLIC : main.c 수정
- 변수 선언 ; CubeMX에서 Half Word(uint16_t)로 설정
/* USER CODE BEGIN 0 */
uint16_t adc_ch = 0;
uint16_t adc_val[3] = {1, };
- HAL_ADC_Start_DMA 호출 ; CubeMX에서 DMA 설정을 Circular로 했기 때문에 1번만 호출해 주면됨(매번 호출할 필요 없음)
- printf() 함수로 while() 루프에서 ADC 값 확인
/* USER CODE BEGIN 2 */
HAL_ADC_Start_DMA(&hadc1,(uint16_t*)&(adc_val[0]),3);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
printf("PB0 = %d, PC5 = %d, PA2 = %d\n", adc_val[0], adc_val[1], adc_val[2]);
HAL_Delay(500);
}
engineer4ever
2025. 8. 8. 10:07
2025. 8. 8. 10:07
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 ADC를 여러개를 interrupt mode로 multi conversion 한다.
|
1. STM32CubeMX : ADC-Interrupt 설정
- 'Pinout & Configuration' Tab으로 이동
1) Analog 선택
2) ADC1 항목 선택
- ADC Configuration 확인
ADC_Settings >
1) Scan Convsersion Mode : Enabled
여러 채널을 샘플링 하는 경우 scan 모드를 enable 하고 한개 채널만 샘플링 하는 경우 disable
2) Continous conversion mode : Enabled
3) Discontinous conversion mode : Disabled
ADC_Regular_Conversion Mode >
1) Enable Regular Conversions : Enable
2) Number of Conversion : 3
3) 각 Rank 별로 원하는 ADC 채널 선택
4) Sampling Time : 제일 느린 시간으로 선택
- NVIC Settings 확인
1) NVIC 선택
2) ADC1 and ADC2 global interrupts : Enabled에 체크
2. ATOLLIC : main.c 수정
- callback 함수 추가
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t adc_ch = 0;
uint16_t adc_val[3];
int _write(int FD, char *buffer, int len)
{
HAL_UART_Transmit (&huart1, (uint8_t*)buffer, len, 500);
return len;
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc_cb)
{
adc_val[adc_ch] = HAL_ADC_GetValue(hadc_cb);
adc_ch = (adc_ch + 1) % 3;
}
/* USER CODE END 0 */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start_IT(&hadc1);
printf("PB0 = %d, PC5 = %d, PA2 = %d\n", adc_val[0], adc_val[1], adc_val[2]);
}
/* USER CODE END 3 */
engineer4ever
2025. 8. 8. 10:00
2025. 8. 8. 10:00
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 ADC를 1개를 polling mode로 single conversion 한다.
|
ADC는 크게 세가지 모드가 있다.
1. Polling
2. Interrupt
3. DMA
이번 페이지에서는 polling 모드를 사용한다.
1. STM32CubeMX : ADC-Polling 설정
- 'Pinout & Configuration' Tab으로 이동
1) Analog 선택
2) ADC1 항목 선택
- ADC1, 2, 3중에 사용할 ADC 선택
또는,
- 'Pinout view' Tab으로 이동
1) ADC로 사용하고 싶은 Pin을 직접 선택
- 'Clock Configuration' Tab으로 이동
1) Clock Issues 확인 하여 클럭 이슈 제거 할 것
2. Single Conversion
- ADC Configuration 확인
ADC_Settings >
1) Scan Convsersion Mode : Disabled
여러 채널을 샘플링 하는 경우 scan 모드를 enable 하고 한개 채널만 샘플링 하는 경우 disable
2) Continous conversion mode : Disabled
타이머의 TRGO 신호를 받을때만 샘플링 시작을 할 예정이므로 disable
3) Discontinous conversion mode : Disabled
타이머의 TRGO 신호를 받을때만 1 샘플링씩 할 예정이므로 disable
ADC_Regular_Conversion Mode >
1) Enable Regular Conversions : Enable
2) Number of Conversion : 1
3) Rank 1 : Channel 8(Converting 원하는 ADC 채널 선택)
4) Sampling Time : 제일 느린 시간으로 선택
- GENERATE CODE 클릭
3. ATOLLIC : main.c 수정
- main() : 실행 코드
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pb0 = HAL_ADC_GetValue(&hadc1);
printf("PB0 = %d\n", val_pb0);
}
/* USER CODE END 3 */
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
ADC를 여러개를 polling mode로 multi conversion 한다.
|
4. Multi Conversion
- ADC Configuration 확인
ADC_Settings >
1) Scan Convsersion Mode : Enabled
여러 채널을 샘플링 하는 경우 scan 모드를 enable 하고 한개 채널만 샘플링 하는 경우 disable
2) Continous conversion mode : Disabled
타이머의 TRGO 신호를 받을때만 샘플링 시작을 할 예정이므로 disable
3) Discontinous conversion mode : Enabled
여러 채널을 샘플링 하는 경우 Enable, Trigger 한번에 몇 채널 받아올지 설정해야 함
ADC_Regular_Conversion Mode >
1) Enable Regular Conversions : Enable
2) Number of Conversion : 3
3) 각 Rank 별로 원하는 ADC 채널 선택
4) Sampling Time : 제일 느린 시간으로 선택
- GENERATE CODE 클릭
5. ATOLLIC : main.c 수정
- main() : 실행 코드
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pb0 = HAL_ADC_GetValue(&hadc1);
printf("PB0 = %d ", val_pb0);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pc5 = HAL_ADC_GetValue(&hadc1);
printf("PC5 = %d ", val_pc5);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t val_pa2 = HAL_ADC_GetValue(&hadc1);
printf("PA2 = %d\n", val_pa2);
}
/* USER CODE END 3 */
engineer4ever
2025. 8. 8. 09:55
2025. 8. 8. 09:55
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
printf()를 이용하여 UART로 문자열 출력
|
- 상태 모니터링이나 디버깅 메시지를 위한 printf() 사용
- PC 프로그램 작성시 printf()는 모니터 출력
- MCU에서는 UART를 통하여 printf() 사용
1. STM32CubeMX : UART 설정
- 'Pinout & Configuration' Tab으로 이동
1) Connectivity 선택
2) USART1 항목 선택
- Mode : Asynchronous, Synchronous 등
- Hardware Flow Control : Disable
- PA9(USART1_TX), PA10(USART1_RX) 자동 할당(녹색 표시)
- Parameter Settings 확인
1) Baud Rate : 115200 Bits/s
2) Word Length : 8 Bits
3) Parity : None
4) Stop Bits : 1
2. ATOLLIC : main.c 수정
- printf() : 사용 하여 메시지 출력
/* USER CODE BEGIN 2 */
printf("STM32F103 printf() TEST.\r\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
- 아무것도 출력 되지 않음
- 표준 출력 변경 : 표준 출력이 Terminal I/O에 연결 되어 있기 때문에 아래를 추가하여 표준 출력을 변경 해야 함
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int _write(int FD, char *buffer, int len)
{
HAL_UART_Transmit (&huart1, (uint8_t*)buffer, len, 500);
return len;
}
/* USER CODE END 0 */
engineer4ever
2025. 8. 8. 09:53
2025. 8. 8. 09:53
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 UART를 2개 열어서 DMA mode로 서로 TX-RX를 주고 받게 한다.
|
1. STM32CubeMX : UART-DMA 설정
- 'Pinout & Configuration' Tab으로 이동
1) Connectivity 선택
2) USART1 항목 선택
- Mode : Asynchronous, Synchronous 등
- Hardware Flow Control : Disable
- PA9(USART1_TX), PA10(USART1_RX) 자동 할당(녹색 표시)
3) USART2 도 똑같이 설정
3) USART2 항목 선택
- Mode : Asynchronous, Synchronous 등
- Hardware Flow Control : Disable
- PA9(USART2_TX), PA10(USART2_RX) 자동 할당(녹색 표시)
- Parameter Settings 확인
1) Baud Rate : 115200 Bits/s
2) Word Length : 8 Bits
3) Parity : None
4) Stop Bits : 1
- DMA Settings 확인
1) DMA 선택
2) Add 클릭
3) USART1_TX : Mode : Circular, Increment : Memory
4) USART2_RX : Mode : Circular, Increment : Memory
- GENERATE CODE 클릭
2. ATOLLIC : main.c 수정
- main() : 변수 선언
int main(void)
{
/* USER CODE BEGIN 1 */
HAL_StatusTypeDef status = HAL_ERROR;
int i = 0;
char tx_data[62] = {};
char rx_data[60] = {};
/* USER CODE END 1 */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_RTC_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
for(i = 0 ; i < 60 ; i++)
{
tx_data[i] = i+48;
}
status = HAL_UART_Transmit_DMA(&huart1, tx_data, 60);
if(status == HAL_OK)
{
HAL_UART_Receive_DMA(&huart1, rx_data, 60);
}
else
{
__HAL_UART_CLEAR_OREFLAG(&huart2);
}
for(i = 0 ; i < 60 ; i++)
{
printf("%c ", rx_data[i]);
}
/* USER CODE END 2 */
위 예제는 DMA를 사용하기 위한 기본 설정을 설명한 것이고, 들어온 데이터를 처리 못하면 데이터 잃어 버릴 수 있으므로 링버퍼를 만들어 데이터 관리를 해야함
engineer4ever
2025. 8. 8. 09:48
2025. 8. 8. 09:48
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 UART를 2개 열어서 interrupt mode로 서로 TX-RX를 주고 받게 한다.
|
1. STM32CubeMX : UART-Interrupt(1) 설정
- 'Pinout & Configuration' Tab으로 이동
1) Connectivity 선택
2) USART1 항목 선택
- Mode : Asynchronous, Synchronous 등
- Hardware Flow Control : Disable
- PA9(USART1_TX), PA10(USART1_RX) 자동 할당(녹색 표시)
3) USART2 도 똑같이 설정
- Parameter Settings 확인
1) Baud Rate : 115200 Bits/s
2) Word Length : 8 Bits
3) Parity : None
4) Stop Bits : 1
- NVIC Settings 확인
1) NVIC 선택
2) USART1 global interrupt : Enabled에 체크
2. ATOLLIC 실행
- main() : 변수 선언
int main(void)
{
/* USER CODE BEGIN 1 */
HAL_StatusTypeDef status = HAL_ERROR;
int i = 0;
char tx_data[62] = {};
char rx_data[60] = {};
/* USER CODE END 1 */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_RTC_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
for(i = 0 ; i < 60 ; i++)
{
tx_data[i] = i+48;
}
status = HAL_UART_Transmit_IT(&huart1, tx_data, 60);
if(status == HAL_OK)
{
HAL_UART_Receive_IT(&huart1, rx_data, 60);
}
else
{
__HAL_UART_CLEAR_OREFLAG(&huart2);
}
for(i = 0 ; i < 60 ; i++)
{
printf("%c ", rx_data[i]);
}
/* USER CODE END 2 */
- 일정 사이즈(60)개가 들어와야 인터럽트 발생. 59 or 61개가 들어오면 정상적인 동작을 기대 할 수 없음
- 위와 같이 60개 보내고 60개 받을때는 문제 없이 동작하는 것 처럼 보이나, 내가 컨트롤 할 수 없는 Delay가 생기면 Overrun Error 발생될 수 있음(데이터가 들어오면 처리 해야 하는데, delay 때문에 처리는 못하고 데이터가 또 들어오면 Overrun)
3. STM32CubeMX : UART-Interrupt(2) 설정
- Configuration은 위와 동일
- USART1 NVIC enable 할 것
4. ATOLLIC 실행
- stm32f7xx_it.c : USART1_IRQHandler 생성됨
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
if((huart1.Instance->ISR & UART_FLAG_RXNE) != RESET)
{
rx_data[rx_index++] = huart1.Instance->RDR;
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
위와 같이 rx 데이터가 들어올 때 바로 읽어야 Overrun Error 발생 하지 않음
engineer4ever
2025. 8. 8. 09:42
2025. 8. 8. 09:42
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 UART를 2개 열어서 polling mode로 서로 TX-RX를 주고 받게 한다.
|
1. STM32F103C8 - UART 회로도
UART Firmware 작성시 크게 세가지 모드로 구분 할 수 있다.
1. Polling
2. Interrupt
3. DMA
이번 페이지에서는 Polling 모드를 사용
2. STM32CubeMX : UART-Polling 설정
- 'Pinout & Configuration' Tab으로 이동
1) Connectivity 선택
2) USART1 항목 선택
- Mode : Asynchronous, Synchronous 등
- Hardware Flow Control : Disable
- PA9(USART1_TX), PA10(USART1_RX) 자동 할당(녹색 표시)
3) USART2 도 똑같이 설정
- Parameter Settings 확인
1) Baud Rate : 115200 Bits/s
2) Word Length : 8 Bits
3) Parity : None
4) Stop Bits : 1
3. ATOLLIC : main.c 수정
- main() : 변수 선언
int main(void)
{
/* USER CODE BEGIN 1 */
HAL_StatusTypeDef status = HAL_ERROR;
int i = 0;
char tx_data[62] = {};
char rx_data[60] = {};
/* USER CODE END 1 */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_RTC_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
for(i = 0 ; i < 60 ; i++)
{
tx_data[i] = i+48;
}
HAL_UART_Transmit(&huart1, &tx_data[0], 1, 1000);
for(i = 0 ; i < 60 ; i++)
{
status = HAL_UART_Receive(&huart2, &rx_data[i], 1, 500);
if(status == HAL_OK)
{
HAL_UART_Transmit(&huart1, &tx_data[i+1], 1, 1000);
}
else
{
__HAL_UART_CLEAR_OREFLAG(&huart2);
}
}
for(i = 0 ; i < 60 ; i++)
{
printf("%c ", rx_data[i]);
}
/* USER CODE END 2 */
- printf()를 사용하기 위해서는 아래 링크를 참조
STM32F103C8 - printf()를 이용하여 UART로 문자열 출력
- 일정 사이즈(60)개가 들어와야 인터럽트 발생. 59 or 61개가 들어오면 정상적인 동작을 기대 할 수 없음
- 위와 같이 60개 보내고 60개 받을때는 문제 없이 동작하는 것 처럼 보이나, 내가 컨트롤 할 수 없는 Delay가 발생할때 Overrun Error 발생될 수 있음
engineer4ever
2025. 8. 8. 09:35
2025. 8. 8. 09:35
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 GPIO에 Switch를 연결해 외부 인터럽트 모드로 입력을 받아 LED를 ON-OFF 한다.
|
1. STM32CubeMX : GPIO OUTPUT 설정
- 'Pinout & Configuration' Tab으로 이동
1) Pinout View 로 마우스 이동
2) PC13을 Mouse 왼쪽 버튼 클릭하여 GPIO_Output 선택
3) Mouse 오른쪽 버튼 클릭하여 Enter User Label 선택 : GPIO_Output → LED_GREEN 으로 변경
- GPIO Configuration 확인
1) GPIO 선택
2) PC13-TAMPER-RTC 선택
3) GPIO output level : Low(LED ON), HIGH(LED OFF) ; 초기 상태
4) GPIO mode : Output Push Pull, Output Open Drain
5) Maximum output speed : Low, Medium, High
6) User Label : LED_GREEN
2. STM32CubeMX : GPIO EXTI 설정
- 'Pinout & Configuration' Tab으로 이동
1) Pinout View 로 마우스 이동
2) PB1을 Mouse 왼쪽 버튼 클릭하여 GPIO_EXTI1 선택
3) Mouse 오른쪽 버튼 클릭하여 Enter User Label 선택 : GPIO_EXTI1 → SW1 으로 변경
- GPIO Configuration 확인
1) GPIO 선택
2) PB1 선택
3) GPIO mode : External Interrupt Mode with Rising edge trigger detection
※ Rising edge로 선택 하였으나 회로 구성에 따라 스위치를 누를때 or 뗄때 Interrupt 발생
4) GPIO Pull-up/Pull-down : No pull-up and No pull-down, Pull-up, Pull-down
5) User Label : SW1
- NVIC 설정
1) NVIC 선택
2) EXTI line1 interrupt : Enabled에 체크
3. ATOLLIC : main.c 수정
- SW1 입력이 들어올 때마다 LED_GREEN toggle 되는 source code
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == SW1_Pin)
{
HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
}
}
/* USER CODE END 0 */
- 총 16개의 외부 GPIO source는 EXTI line 0부터 15까지로 제공
※ PXn 형태의 GPIO pin들 중 n이 중복되는 핀의 EXTI 동시 사용 불가
ex) PA0, PB0, PC0, … 등의 GPIO들은 모두 EXTI0 line에 연결되므로 중복 사용 불가
engineer4ever
2025. 8. 8. 09:26
2025. 8. 8. 09:26
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
HAL driver를 사용하여 GPIO에 LED를 연결해 LED를 ON-OFF 한다.
|
1. STM32CubeMX : GPIO OUTPUT 설정
- 'Pinout & Configuration' Tab으로 이동
1) Pinout View 로 마우스 이동
2) PC13을 Mouse 왼쪽 버튼 클릭하여 GPIO_Output 선택
3) Mouse 오른쪽 버튼 클릭하여 Enter User Label 선택 : GPIO_Output → LED_GREEN 으로 변경
- GPIO Configuration 확인
1) GPIO 선택
2) PC13-TAMPER-RTC 선택
3) GPIO output level : Low(LED ON), HIGH(LED OFF) ; 초기 상태
4) GPIO mode : Output Push Pull, Output Open Drain
5) Maximum output speed : Low, Medium, High
6) User Label : LED_GREEN
2. STM32CubeMX : GPIO INPUT 설정
- 'Pinout & Configuration' Tab으로 이동
1) Pinout View 로 마우스 이동
2) PB1을 Mouse 왼쪽 버튼 클릭하여 GPIO_Input 선택
3) Mouse 오른쪽 버튼 클릭하여 Enter User Label 선택 : GPIO_Input → SW1 으로 변경
- GPIO Configuration 확인
1) GPIO 선택
2) PB1 선택
3) GPIO mode : Input mode
4) GPIO Pull-up/Pull-down : No pull-up and No pull-down, Pull-up, Pull-down
5) User Label : SW1
- STM32CubeMX에서 생성한 프로젝트 폴더를 선택 후 Finish
- main() : SW1 입력에 따라 LED_GREEN toggle 되는 source code
while (1)
{
/* USER CODE END WHILE */
if(HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin) == 0)
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
}
/* USER CODE BEGIN 3 */
}
engineer4ever
2025. 8. 8. 09:23
2025. 8. 8. 09:23
|
MCU
|
STM32F103(ST)
|
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
|
목표
|
위 MCU와 IDE 환경에서 개발을 위한 MCU 기본 설정
|
- Part Number Search : STM32F103C8-LQFP48
- Pinout 설정
- Peripheral Tree에서 설정
- Pin을 직접 설정
2. SYS(ST-LINK 사용을 위해서는 설정해야 함, ISP mode 사용시 필요 없으며 ISP mode 사용 방법은 다른 곳에서 설명)
- 'Pinout & Configuration' Tab으로 이동
1) System Core 선택
2) SYS 선택
- Debug : Serial Wire(SWD) 선택
- PA13(SWDIO), PA14(SWCKL)에 자동 할당(녹색으로 표시)
3. Clock Configuration(HSE) 설정
- 'Pinout & Configuration' Tab으로 이동
1) System Core 선택
2) RCC(Reset and Clock Control) 항목 선택
- High Speed Clock(HSE) : Crystal/Ceramic Resonator 선택
- PD0-OSC_IN(RCC_OSC_IN), PD1-OSC_OUT(RCC_OSC_OUT) 자동 할당(녹색 표시 )
- 'Clock Configuration' Tab으로 이동
1) PLL Source Mux : HSE 선택
2) HCLK : 64(MHz) 입력
4. Clock Configuration(LSE) 설정
- 'Pinout & Configuration' Tab으로 이동
1) System Core 선택
2) RCC(Reset and Clock Control) 항목 선택
- Low Speed Clock(LSE) : Crystal/Ceramic Resonator 선택
- PC14-OSC32_IN(RCC_OSC32_IN), PC15-OSC32_OUT(RCC_OSC32_IN) 자동 할당(녹색 표시)
- 'Clock Configuration' Tab으로 이동
1) RTC Clock Mux : LSE 활성화 안됨
5. RTC 설정
- 'Pinout & Configuration' Tab으로 이동
1) Timers 선택
2) RTC(Real Time Clock) 항목 선택
- Activate Clock Source 체크
- RTC OUT : No RTC Output 선택
(RTC OUT = Disable 설정은 내부적으로 PC13 핀 기능을 RTC용으로 막아버림
RTC OUT = No RTC Output 설정은 RTC는 켜두되, PC13 핀은 일반 GPIO로 열어줌)
- Tamper 설정시 PC13(LED Port) 기능 제한
- 'Clock Configuration' Tab으로 이동
1) RTC Clock Mux : LSE 선택
- RTC 기능 설정 후 LSE 선택 가능
6. 'Project Manager' Tab
1) Project Name 입력
2) Toolchain / IDE 선택 : 여기서는 TrueSTUDIO 선택
※ Toolchain / IDE를 TrueSTUDIO가 아닌 다른것으로 선택하고 GENERATE CODE를 한번이라도 하면
Toolchain을 TrueSTUDIO로 다시 선택해도 ATOLLIC에서 Build가 안되는 경우가 있으니,
위 같은 실수를 했을 경우 생성된 source를 지우고 다시 GENERATE CODE 할것을 권장함
3) GENARATE CODE 클릭