STM32CubeMX之串口重定向(printf 的使用)

概述

​ 我們在初學 C 語言的時候,第一句打印就是 printf("hello world") ,後面也經常用來調試打印信息,但是我們在單片機開發的時候 printf 就用不了,因爲 printf 會打印在命令行窗口上,但是單片機上肯定沒有,所以我們通過改寫函數,將 printf 重定向到串口之上,然後通過串口調試助手來顯示。

一. 改寫函數

新建一個頭文件 debug_com.h

#ifndef __DEBUG_COM_H
#define __DEBUG_COM_H

#ifdef __cplusplus
extern "C" {
#endif
    
#include "stdio.h"
#include "usart.h"
    
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
        
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
        return ch;
}

#ifdef __cplusplus
}
#endif


#endif

​ 在使用 printf 的時候,其實最終也是調用 fputc 函數進行打印,因此我們可以通過添加以下代碼來達成我們的目的:

HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

注意: huart1 可以根據你使用的串口進行修改

之後將該頭文件放到一個文件夾(比如 debug_com )裏面,再放到項目目錄下

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TvwPSwrC-1593615485391)(/image/項目目錄.png)]

再包含該頭文件,如下圖所示

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gW0Mnioh-1593615485394)(/image/包含debug_com頭文件.png)]

之後在項目中使用 #include "debug_com.h" 就可以使用 printf

二. printf 使用實例

打印串口1中所用到的寄存器的首地址

//包含頭文件
#include "debug_com.h"
//主函數中添加
  while (1)
  {
    /* USER CODE END WHILE */
 
    /* USER CODE BEGIN 3 */
       printf("huart1.Instance->SR %p\r\n",&huart1.Instance->SR); 
       printf("huart1.Instance->DR  %p\r\n",&huart1.Instance->DR); 
       printf("huart1.Instance->BRR %p\r\n",&huart1.Instance->BRR); 
       printf("huart1.Instance->CR1 %p\r\n",&huart1.Instance->CR1);  
       printf("huart1.Instance->CR2 %p\r\n",&huart1.Instance->CR2); 
       printf("huart1.Instance->CR3 %p\r\n",&huart1.Instance->CR3); 
       printf("huart1.Instance->CTPR %p\r\n",&huart1.Instance->GTPR); 
       HAL_Delay(1000);     
       printf("\r\n");
  }

這樣,我們就可以在調試助手上看到寄存器的地址值了

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7q73Mn0r-1593615485396)(/image/調試助手中寄存器地址.png)]

後續還會繼續分享串口的其他基礎知識和使用,感興趣的小夥伴記得關注我
-----------------------------------------------結束--------------------------------------------------------
文章有價值,請各位看官點個贊關注我或者點右邊打個賞吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章