κ°œλ°œν•  λ•Œ λ‚΄κ°€ μ§  ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμ μœΌλ‘œ 돌고 μžˆλŠ”μ§€, λ³€μˆ˜λ“€μ΄λ‚˜ μž…λ ₯된 μ„Όμ„œ 값듀이 μ •μƒμ μœΌλ‘œ λ“€μ–΄μ™”λŠ”μ§€ 확인을 ν•΄μ•Ό ν˜„μž¬ λ³΄μ΄λŠ” λ™μž‘μ΄λ‚˜ 증상에 λŒ€ν•΄μ„œ 이해할 수 μžˆμ„ λ•Œκ°€ λ§Žλ‹€. κ·Έλž˜μ„œ 무료 ν”„λ‘œκ·Έλž¨μΈ ν…ŒλΌν…€μœΌλ‘œ 데이터λ₯Ό λ³Ό 수 있게 μ—°κ²°ν•˜λŠ” 방법을 μ•„λž˜μ— μ •λ¦¬ν•˜μ˜€λ‹€.

 

μ‚¬μš©ν•œ λ³΄λ“œλŠ” μ‹±ν¬μ›μŠ€μ˜ SMC250 λ³΄λ“œμ— TMS320F28377D λͺ¨λ“ˆμ„ ν™œμš©ν•˜μ˜€λ‹€. κΈ°λ³Έ UART μ˜ˆμ œλŠ” C2000Ware 4.02.00.00에 μžˆλŠ” sci의 에코백 μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€. 

 

[stm32f407] USART - 1.2 μ΄ˆκ°„λ‹¨ printf λ§Œλ“€κΈ° : 넀이버 카페 (naver.com)

 

[stm32f407] USART - 1.2 μ΄ˆκ°„λ‹¨ printf λ§Œλ“€κΈ°

μ˜€λŠ˜μ€ μ΄ˆκ°„λ‹¨ printf λ§Œλ“œλŠ”λ²•μ„ 적어보렀고 ν•©λ‹ˆλ‹€.보톡 디버깅 ν•˜λ©΄ Visual studio μ—μ„œλŠ” κ·Έλƒ₯ printfλ₯Ό 찍으면 λ˜μ§€λ§Œ νŽŒμ›¨μ–΄μ—μ„œλŠ” ν™•μΈν•˜λŠ” 방법이 μ—†μ£ ....

cafe.naver.com

μœ„ μ½”λ“œλ₯Ό κ°€μ Έμ™€μ„œ TI꺼에 맞게 μˆ˜μ •ν•˜μ˜€λ‹€. μœ„ μ½”λ“œλŠ” ST의 HAL을 μ΄μš©ν–ˆλ‹€κ³  ν•œλ‹€.

 

μ•„λž˜μ—λŠ” μœ„ μ½”λ“œλ₯Ό κ°€μ Έλ‹€κ°€ μˆ˜μ •ν•œ μ½”λ“œμ΄λ‹€.

int dbg_printf(const char *pstr, ...)
{
    va_list args;

    int byte_n = 0;
    volatile unsigned char sprint_buf[256];
    unsigned int cnt = 0;

    va_start(args, pstr);

    byte_n = vsprintf((char *)sprint_buf, (const char *)pstr, args);

    while(sprint_buf[cnt] != 0)
    {
        if(SCI_getTxFIFOStatus(SCIC_BASE) != SCI_FIFO_TX16)
        {
            HWREGH(SCIC_BASE + SCI_O_TXBUF) = sprint_buf[cnt++];
        }
    }

    va_end(args);

    return byte_n;
}

 

"(USART1->SR & USART_SR_TXE) != RESET" 뢀뢄은 "SCI_getTxFIFOStatus(SCIC_BASE) != SCI_FIFO_TX16"으둜 μˆ˜μ •ν•˜μ˜€λ‹€. μƒνƒœ λ ˆμ§€μŠ€ν„°μ— TX(전솑) 버퍼가 λΉ„μ–΄μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 쑰건이닀. TX버퍼가 λΉ„μ–΄ μžˆλ‹€λ©΄ μƒνƒœ 값은 '1'이 λ˜λŠ”λ°, μ΄λ•Œ IFλ¬Έ μ•ˆμ˜ λ‚΄μš©μ„ μ‹€ν–‰ν•œλ‹€.

 

IFλ¬Έ μ•ˆμ—λŠ” "USART->DR = sprint_buf[cnt++];" 이 뢀뢄을 "HWREGH(SCIC_BASE + SCI_0_TXBUF) = sprint_buf[cnt++];"으둜 μˆ˜μ •ν•˜μ˜€λ‹€. 데이터 λ ˆμ§€μŠ€ν„°μ— 전솑할 데이터λ₯Ό μ¨μ£ΌλŠ” λ‚΄μš©μ΄λ‹€.

 

이제 λ£¨ν”„μ•ˆμ— 값을 써보겠닀. 500ms λ§ˆλ‹€ printfλ₯Ό 찍을 것이닀.

dbg_printf("\r\n loopcount : %d, %s  \0", loopCounter, "test");
DEVICE_DELAY_US(500000);
loopCounter++

μ½˜μ†”μ°½μ΄ 잘 λ‚˜μ˜€λŠ” 것을 λ³Ό 수 μžˆλ‹€.

λ°˜μ‘ν˜•
  • 넀이버 λΈ”λŸ¬κ·Έ κ³΅μœ ν•˜κΈ°
  • 넀이버 λ°΄λ“œμ— κ³΅μœ ν•˜κΈ°
  • 페이슀뢁 κ³΅μœ ν•˜κΈ°
  • μΉ΄μΉ΄μ˜€μŠ€ν† λ¦¬ κ³΅μœ ν•˜κΈ°

"이 ν¬μŠ€νŒ…μ€ 쿠팑 νŒŒνŠΈλ„ˆμŠ€ ν™œλ™μ˜ μΌν™˜μœΌλ‘œ, 이에 λ”°λ₯Έ μΌμ •μ•‘μ˜ 수수료λ₯Ό μ œκ³΅λ°›μŠ΅λ‹ˆλ‹€."