์ฌ์ฉ MCU : STM32F100C6T6B
CubeMX๋ก ํ์ ์ค์ ํ๊ณ ํ๋ก์ ํธ ์์ฑ.
IAR๋ก ๋๋ฒ๊น
Datasheet:
1. CubeMX๋ก ํ ์ธํ

1-1. TIM ์ค์
Trigger Mode , ITR0, Internal Clock
TIM2๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ณ ๋ด๋ถํด๋ญ์ ์ฌ์ฉ, ํธ๋ฆฌ๊ฑฐ ๋ ๋ ITR0 ์ธํฐ๋ฝํธ ์ฌ์ฉ

1-2. TIM ์ธํฐ๋ฝํธ Enabled

1-3. TIM prescaler, counter period ์กฐ์
mcu ๋ฐ์ดํฐ ์ํธ๋ฅผ ์ดํด๋ณด๋ฉด "24 MHz maximum frequency ...." ๋ผ๊ณ ์จ์๋ค.
Prescaler๋ (24-1)๊ฐ์ผ๋ก ์ค์ .
Counter Period๋ 1์ด๋ก ์ค์ ํด์ค

1-4. SPI
mcu์ ์ฌ๋ ์ด๋ธ์นฉ์ SPIํต์ ์ ํ๋ค.
Full-Duplex Master mode๋ก ์ค์ ํ๊ณ NSS๋ ์ค์ ํ์ง ์๋๋ค.
์ฌ๋ ์ด๋ธ์นฉ์์ NSS๋ฅผ ์กฐ์ํ๊ธฐ ๋๋ฌธ.

** ์ฌ๊ธฐ์ SPI Prescaler๋ Baud Rate๋ฅผ ์กฐ์ํ๊ธฐ ์ํจ์ด๋ค. (Prescaler๋ฅผ ์กฐ์ ํ๋ฉด Baud rate๊ฐ ์์์ ๋ง์ถฐ์ง)
์ฌ๋ ์ด๋ธ์นฉ์ด ๋ณดํต 2Mbits์ Baud Rate๋ฅผ ์ฌ์ฉํ๊ธฐ์ ๊ทธ ์ธ์ ๋ฆฌ๋ฅผ ๋ง์ถฐ์ค๋ค.

1-5. UART ์ค์
๋น๋๊ธฐ ๋ชจ๋๋ก ์ค์ .
SPIํต์ ์ ์นฉ๋ผ๋ฆฌ์ ์ค์ ์ ์ํด์๋ผ๋ฉด, UART๋ ์ฌ์ฉ์์ ํ๋์จ์ด๊ฐ์ ํต์ ์ ์ํด ์ค์ ํ๋ค.

1-6. UART ์ธํฐ๋ฝํธ ์ค์

1-7. RCC ์ค์
์ฃผ๋ณ์ฅ์น์ ๋ค์ด๊ฐ๋ ํด๋ญ์ ์ํ ์ค์

1-8. SYS ์ค์
Serial Wire๋ก ๋๋ฒ๊น ํ๋ค๋ ์ค์

1-9. Clock Configuration์์ HCK๋ฅผ 24๋ก ๋ง์ถฐ์ฃผ๊ณ ,
1-10. Project Manager์์ Min version์ V8๋ก ์์ฑ.
(์ต์ ๋ฒ์ ์ผ๋ก ์์ฑํด๋ณด๊ณ ์๋ฌ๊ฐ ๋ง์ด ๋จ๋ฉด V8๋ก ๋ฎ์ถฐ์ ๋ค์ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ)
GENERATE CODE ๋๋ฌ์ฃผ๋ฉด์ ํ๋ก์ ํธ ์์ฑ !
๋ง๋ค์ด์ง ํ๋ก์ ํธ์์ ์ฐ๋ฆฌ๊ฐ ์ค์ ํ ๊ธฐ๋ฅ๋ค์ด ์ ๋์ํ๋์ง ํ ์คํธ ํด์ฃผ๊ธฐ.
๊ธฐ๋ณธ ์์ฑ๋ ์ฝ๋๋ ์กฐ๊ธ ์์ ํด์ผ ํจ!
2-1. ์ ์ผ ๋ง๋งํ LED ํ ์คํธ
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
HAL_Delay(500);
๋ฉ์ธ๋ฌธ์ ์ด ๋ ์ค ๋ฃ์ด์ฃผ๊ณ 0.5์ด๋ง๋ค ๊น๋นก์ด๋์ง ์ฒดํฌ
2-2. ํ์ด๋จธ ํ ์คํธ
ํ์ด๋จธ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์กฐ๊ธ ์์ ํด์ผ ํ๋ค.
HAL_TIM_Base_Start_IT ํจ์์์ #if ~ #endif ์์ญ์ ์ฃผ์ํด์ผ ํ๋ค. ์ด ๋ถ๋ถ์ ์ฃผ์ํ์ง ์์ผ๋ฉด ์ฌ๊ธฐ์ ๋น ์ ธ๋ฒ๋ ค ๋ด๋ถ์ ํ์ด๋จธ ENABLE ํจ์๊น์ง ์คํ์ด ์๋จ.
๋ฐ๋ผ์ ์ฃผ์์ฒ๋ฆฌ ํด์ฃผ๊ณ , ๋ฐํ ์ง์ ์ ํ ์ค ์ถ๊ฐํด์ฃผ๊ธฐ.

HAL_TIM_Base_Start_IT ํจ์๋ฅผ ํ์ด๋จธ INIT ํจ์ ํ๋จ์ ๋ฃ์ด์ฃผ๊ธฐ.

__weak๋ก ์ ์ธ๋ HAL_TIM_PeriodElapsedCallback ํจ์๋ฅผ ์ฌ์ ์ํด์ ์ผ์ ๊ฐ๊ฒฉ์ผ๋ก ์คํ๋๋ ์ฝ๋ฐฑํจ์๋ฅผ ์์ฑํด์ค๋ค. (์๋ง๋ 1msec ๋ง๋ค ์คํ๋ ๋ผ๋,,?)
์ ์ญ์ผ๋ก ์ ์ธํ TIM2_CNT๊ฐ ์นด์ดํธ์ ๋๋ค.
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim -> Instance == TIM2) {
TIM2_CNT+=1;
}
}
์นด์ดํธ์ ๋๋ TIM2_CNT ๋ณ์๋ฅผ ์ด์ฉํด LED๋ฅผ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ๊น๋นก์ด๋ ๋์์ ์์ฑํด ๋ณผ ๊ฒ์ด๋ค.
main ํจ์์ while๋ฌธ ๋ด๋ถ์ ์๋ ์ฝ๋์ ๊ฐ์ด ์จ์ฃผ๋ฉด, LED๊ฐ 1์ด์ ๋ค์ฏ๋ฒ ๊น๋นก์ธ๋ค.
while (1)
{
/* USER CODE END WHILE */
if (TIM2_CNT >= 100){
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
TIM2_CNT = 0;
}
2-3. UART ํ ์คํธ
HAL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ UART ํจ์๋ฅผ ํ์ฉํ ๊ฒ๋๋ค~
์ฐธ๊ณ ๋ก ์ธ๋ฒ์งธ ํ๋ผ๋ฉํฐ๋ ์ ๋ฌํ๋ ค๋ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ก ๊ทธ๋ฅ ๋๊ฐ 20์ ๋๋ก ์ก์๊ณ ,
๋ค๋ฒ์งธ ํ๋ผ๋ฉํฐ๋ Timeout ๋ณ์๋ก ๋ฐ์ดํฐ๊ฐ ์์๋ ๋๊ธฐ์๊ฐ์ธ ๊ฒ ๊ฐ๋ค.
for(uint8_t i=0;i<10;i++)
HAL_UART_Transmit(&huart1, " 1000 10000 soong \r\n", 20, 5);
์ฒ ๋ง ์ญ์ ์ด๋ฒ ์ถ๋ ฅํ๊ฒ ํด๋ณด๊ฒ ์ญ.
Docklight ํ๋ก๊ทธ๋จ์ผ๋ก ํ์ธํ ๊ฒฐ๊ณผ.

3. ๋ฒํผ ํ ์คํธ
uint8_t FIFO_TEST_BUFF[256]; ์ฒ๋ผ ๋ฒํผ๋ฅผ ํ๋ ๋ง๋ค์ด์ฃผ๊ณ , for๋ฌธ์ผ๋ก ๋ฒํผ์ ๊ฝ ์ฑ์์ ๋ด์์ฃผ์.
๊ทธ๋ฐ ๋ค์ UART ํต์ ์ผ๋ก ์ถ๋ ฅํ๋ฉด์ ๋ฒํผ ๋ด๋ถ๋ฅผ ํ์ธํด์ฃผ๋ฉด ๋ฒํผ ํ ์คํธ ์๋ฃ!
'F๐ปW > ์ค๋์ ๋๋ฒ๊น ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SILAB] Simplicity Studio ๋ชจ๋์ Write ์๋ ๋ (0) | 2023.06.26 |
|---|---|
| I2C ํ ์คํธ (0) | 2023.06.15 |