#STM32G0 STM32CubeIDE Timer Test - 1% HSI 이용
STM32G0 스펙을 보면 HSI클럭 부분에서 1%를 강조 하고 있다. 기존 칩보다 강점 이라고 내새우니 한번 테스트 해 봐야 겠다.
Core: Arm® 32-bit Cortex®-M0+ CPU, frequency up to 64 MHz
-40°C to 85°C/125°C operating temperature
Up to 64 Kbytes of Flash memory
8 Kbytes of SRAM with HW parity check
Voltage range: 1.7 V to 3.6 V
4 to 48 MHz crystal oscillator
32 kHz crystal oscillator with calibration
Internal 16 MHz RC with PLL option (±1 %)
Internal 32 kHz RC oscillator (±5 %)
12-bit, 0.4 μs ADC (up to 16 ext. channels)
Up to 16-bit with hardware oversampling
Conversion range: 0 to 3.6V
STM32CubeIDE 를 이용하여 Timer14를 활성화 한다.
STM32 CubeIDE를 이용해서 코드 생성하면 생성되는 코드에 적절한 값을 설정해서 1ms 타이머를 하나 만든다.
static void MX_TIM14_Init(void)
{
/* USER CODE BEGIN TIM14_Init 0 */
/* USER CODE END TIM14_Init 0 */
/* USER CODE BEGIN TIM14_Init 1 */
/* USER CODE END TIM14_Init 1 */
htim14.Instance = TIM14;
htim14.Init.Prescaler = 64-1;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
htim14.Init.Period = 1000-1;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM14_Init 2 */
/* USER CODE END TIM14_Init 2 */
}
Timer14 타이머 인터럽트 핸들러를 생성하고 주기적으로 GPIO PA5를 토글하도록 했다.
#define TIM_HANDLE htim14
volatile uint32_t gTimeTick = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM_HANDLE.Instance)
{
gTimeTick++;
GPIOA->ODR ^= GPIO_PIN_5;
}
}
타이머 Start 함수를 호출하면 PA5(LED)가 토글되는것을 확인 할 수 있다.
HAL_TIM_Base_Start_IT(&TIM_HANDLE);
1.995ms가 출력된다.
외부에 크리스털 발진기를 연결하는 것 보다는 정확하지는 않지만 스팩에 나와 있는 1% 범위 안에는 들어오는것 같다.
그러면 기존 STM32F 시리즈의 스펙을 한번 살펴보자
25도 범위에서는 비슷한 오차 인것 같고 -40~85도에서는 5% 오차를 보인다고 한다. 스펙상으로는 STM32G시리즈가 많이 좋아 보인다.
그럼 STM32F0 보드에서 동일한 코드를 실행해 보자.
1.991ms 가 출력된다.
조금 좋아 진것 같긴하다. 이정도는 환경에 따라 달라질 수 있는 것으로 판단되긴 한데...
아무튼 기존 보다는 좋지 않을까...
반응형