GD32戦闘4__デバッグモジュール

序文

覚えておいて、機能を実装する最初の、あなたはそれが機能をデバッグする方法を決定し、デバッグツールを完了するためにその準備ができているはずです。

シリアル印刷ログ情報は、最も一般的なデバッグツールは、ここで私は、デバッグツールを達成したいです。

その中でも、知識は連続切片でシリアルを補完します。

機能設計

次のように機能要件は以下のとおりです。

  1. トレース、errror、デバッグなどの印刷カテゴリラベル、
  2. 印刷ファイル名+行番号
  3. キーメッセージとパラメータを印刷

達成するための機能

  1. シリアルポートの初期化

    static VOID UART1_GpioInit(VOID)
    {
        GPIO_InitPara GPIO_InitStructure;
        
        RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA , ENABLE);
        
        GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_9 ;
        GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_AF_PP;
        GPIO_InitStructure.GPIO_Speed   = GPIO_SPEED_50MHZ;
        GPIO_Init( GPIOA , &GPIO_InitStructure); 
        GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_10;
        GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_IN_FLOATING;;
        GPIO_Init( GPIOA , &GPIO_InitStructure); 
    }
    
    static VOID UART1_Config(VOID)
    {
        USART_InitPara USART_InitStructure;
        
        RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_USART1 , ENABLE);
        
        USART_DeInit( USART1 );
        USART_InitStructure.USART_BRR = 115200;  /* 波特率 */
        USART_InitStructure.USART_WL = USART_WL_8B; /* 数据位 */
        USART_InitStructure.USART_STBits = USART_STBITS_1; /* 停止位 */
        USART_InitStructure.USART_Parity = USART_PARITY_RESET; /* 校验位 */
        USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE; /* 流控 */
        USART_InitStructure.USART_RxorTx = USART_RXORTX_RX | USART_RXORTX_TX; /* 收发使能 */
        USART_Init(USART1, &USART_InitStructure);
    }
    
    VOID DRV_UART1_Init(VOID)
    {
        UART1_GpioInit();
        UART1_Config();
        USART_Enable(USART1, ENABLE);
    }
    
  2. printfの実現

    原理は最終的には関数呼び出しのputcharをprintfの、私たちは機能を実現することができるのputcharされます。

    #ifdef __GNUC__
        /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
           set to 'Yes') calls __io_putchar() */
        #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    #else
        #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    #endif /* __GNUC__ */
    
    PUTCHAR_PROTOTYPE
    {
        /* 等待发送完成 */
        while (USART_GetBitState(USART1 , USART_FLAG_TBE) == RESET)
        {
        }
        
        USART_DataSend(USART1 , (U8)ch);
        
        while (USART_GetBitState(USART1 , USART_FLAG_TC) == RESET)
        {
        }
        return ch;
    }
    
  3. マクロ実装のデバッグ

#define	APP_ERROR(fmt, ...) do {printf("[ERROR][%s,%d]: " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__);} while(0)
#define	APP_TRACE(fmt, ...) do {printf("[TRACE][%s,%d]: " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__);} while(0)
#define	APP_DEBUG(fmt, ...) do {printf("[DEBUG][%s,%d]: " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__);} while(0)

使用例

図中のLEDの試験結果の例では、以下

ここに画像を挿入説明

ここに画像を挿入説明

コードパス

https://github.com/YaFood/GD32F103/tree/master/TestLED

おすすめ

転載: blog.csdn.net/qq_17854661/article/details/91877215