STM32_Tutorial_08 - 8BitsCoding/RobotMentor GitHub Wiki


Timer์— ๋Œ€ํ•œ ์ด๋ก  ์„ค๋ช…

๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ(ํƒ€์ด๋จธ๋ฅผ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ) ํด๋Ÿญ์„ ์นด์šดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค.

๊ทธ๋Ÿผ ํด๋Ÿญ์„ ์–ด๋–ป๊ฒŒ ์นด์šดํŠธํ•ด์•ผํ• ๊นŒ?

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด, ๋ ˆ์ง€์Šคํ„ฐ์— ํŠน์ • ๊ฐ’์„ ์ž…๋ ฅํ›„ ํด๋Ÿญ์„ ์นด์šดํŠธ ํ•˜์—ฌ ๊ทธ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์ดˆ๊ณผ ์‹œ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํƒ€์ด๋จธ๋ฅผ ๋™์ž‘์‹œํ‚จ๋‹ค.

์ด๋ฏธ์ง€

ํ ... ๊ทธ๋ฆผ๋งŒ ๋ด์„œ๋Š” ๋ฌด์Šจ๋ง์ธ์ง€ ์ž˜...

์ด๋ฏธ์ง€

์šฐ์„  ํƒ€์ด๋จธ๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. 16๋น„ํŠธ ํƒ€์ด๋จธ (=2^16 = 65535)
  2. 32๋น„ํŠธ ํƒ€์ด๋จธ (=2^32 = 429496795)

๊ฐ ํƒ€์ด๋จธ๋Š” ํ•ด๋‹น ๋น„ํŠธ์ˆ˜ ๋งŒํผ ์นด์šดํŠธ๋ฅผ ์…€์ˆ˜์žˆ๋‹ค

AutoReloadRegister(Period)์— ํŠน์ • ๊ฐ’์„ ์ž…๋ ฅํ•ด ์ฃผ๊ณ  ํƒ€์ด๋จธ์˜ ์นด์šดํŠธ๊ฐ€ ํŠน์ • ๊ฐ’์„ ์ดˆ๊ณผ์‹œ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿผ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๋Š” ์ฃผ๊ธฐ์˜ ์„ค์ •์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€??

-> ํƒ€์ด๋จธ๊ฐ€ 1์ฆ๊ฐ€ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(ํด๋Ÿญ์˜ ๋™์ž‘์†๋„)์„ ์•Œ์•„์•ผํ•œ๋‹ค

์œ„ ์˜ˆ์ œ์—์„œ๋Š” 168MHz(=168,000,000)

์ด๋ฏธ์ง€

์‚ฌ์šฉํ•  ํƒ€์ด๋จธ๊ฐ€ APB1, APB2, HCLK๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ์„œ ํด๋Ÿญ์˜ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด APB1 ํƒ€์ด๋จธ๋ฅผ ์“ด๋‹ค๋ฉด ํƒ€์ด๋จธ ์นด์šดํŠธ๊ฐ€ 1๊ฐœ ์ฆ๊ฐ€ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด 1/84M์ดˆ(1/84,000,000์ดˆ)๊ฐ€ ๋œ๋‹ค.

์—„์ฒญ๋‚˜๊ฒŒ ์งง์€ ์‹œ๊ฐ„์ธ๋ฐ... ํƒ€์ด๋จธ๋ฅผ ๋งŒ๋“ค์ˆ˜์žˆ์„๊นŒ??

Prescaler๋ฅผ ๋„์ž…(=ํƒ€์ด๋จธ๊ฐ€ ๋„ˆ๋ฌด๋น ๋ฅด๋‹ˆ ๋™์ž‘์„ ์ฒœ์ฒœํžˆ ํ•˜๊ฒŒ ํ•ด๋ณด์ž)

์ด๋ฏธ์ง€

์ด๋ฏธ์ง€

๋‹ค์Œํ‘œ๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธ๊ฐ€๋Šฅ

ํ•ต์‹ฌ์€

APB 1์ผ ๊ฒฝ์šฐ ์‹œ์Šคํ…œํƒ€์ด๋จธ / 2 ์‚ฌ์šฉ

APB 2์ผ ๊ฒฝ์šฐ ์‹œ์Šคํ…œํƒ€์ด๋จธ์™€ ๋™์ผํ•œ์†๋„


๊ตฌํ˜„์„ ํ•ด๋ณด์ž...

์œ„ ํ‘œ์—์„œ๋ณด๋ฉด Timer 6, 7์ด ๊ธฐ๋ณธ(Basic)ํƒ€์ด๋จธ์ธ๋ฐ ์ด๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌํ˜„

CubeMX ์‹คํ–‰ํ•œ๋‹ค. -> Timer 7 Active

์ด๋ฏธ์ง€

Configuration -> TIM7 ํด๋ฆญ

์ด๋ฏธ์ง€

  • Perscaler : 10000 - 1 = 9999
  • Counter Period : 8400 - 1 = 8399

์ด๋ฏธ์ง€

NVIC Setting Enabled

์ด๋ฏธ์ง€

์ด๋ฏธ์ง€

์ด๋ฏธ์ง€

Project -> Generation Code


์†Œ์Šค์ฝ”๋“œ ์ •๋ฆฌ

// main
HAL_TIM_Base_Start_IT(&htim7);

// callback
void HAL_TIM_PeriodFlapsedCallback(TIM_HandleTypeDef* htim)
{
    if(htim->Instance == TIM7)
    {
        // ํƒ€์ด๋จธ ๋™์ž‘
    }
    else
    {

    }
}