嵌入式STM32學習——串口USART 2.0(printf重定義及串口發送)

printf重定義:

C語言里面的printf函數默認輸出設備是顯示器,如果要實現printf函數輸出正在串口或者LCD顯示屏上,必須要重定義標準庫函數里調用的與輸出設備相關的函數,比如printf輸出到串口,需要將fputc里面的輸出指向串口。

應用:

usart.h

#ifndef USART_H_
#define USART_H_void my_usart_init(void);void My_Usart_Send_Byte( USART_TypeDef* USARTx, uint16_t Data);void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string);#endif

usart.c

#include"stm32f10x.h"
#include"usart.h"
#include "stdio.h"void my_usart_init(void)
{GPIO_InitTypeDef GPIOInitstruct;USART_InitTypeDef Usart_initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);//A9GPIOInitstruct.GPIO_Pin = GPIO_Pin_9;GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIOInitstruct);//A10GPIOInitstruct.GPIO_Pin =GPIO_Pin_10;GPIOInitstruct.GPIO_Mode =GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIOInitstruct);Usart_initstruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;									Usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;		Usart_initstruct.USART_BaudRate = 115200;						Usart_initstruct.USART_Parity = USART_Parity_No;		Usart_initstruct.USART_StopBits = USART_StopBits_1;  		Usart_initstruct.USART_WordLength = USART_WordLength_8b;  		USART_Init(USART1,&Usart_initstruct);USART_Cmd(USART1,ENABLE);																											}void My_Usart_Send_Byte(USART_TypeDef* USARTx, uint16_t Data)
{USART_SendData(USARTx,  Data);while( USART_GetFlagStatus( USARTx,  USART_FLAG_TXE) == RESET);}void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string)
{uint16_t i=0;do{My_Usart_Send_Byte(USARTx,*(string+i));i++;}while(*(string+i) != '\0');while( USART_GetFlagStatus( USARTx,  USART_FLAG_TC) == RESET);
}int fputc(int ch, FILE * p)									//printf重定義
{USART_SendData(USART1,  (u8)ch);while( USART_GetFlagStatus( USART1,  USART_FLAG_TXE) == RESET);return ch;
}

main.c

#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
#include "usart.h"
#include "stdio.h"
void delay(uint16_t time) 
{uint16_t i=0;while(time--){i =12000;while(i--);}}int  main() 
{my_usart_init();
//	My_Usart_Send_Byte( USART1,  'A');
//	My_Usart_Send_Byte( USART1,  'B');
//	My_Usart_Send_Byte( USART1,  'C');
//	My_Usart_Send_Sting( USART1,  "\r\n");
//	My_Usart_Send_Sting(USART1 , "fei \r\n");while(1){printf("Hello,shi \r\n");}		
}

串口顯示

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81790.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81790.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81790.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信號量機制:操作系統中的同步與互斥利器

在計算機操作系統中,信號量機制是一種重要的進程同步與互斥工具。它廣泛應用于多進程或多線程環境中,用于解決并發訪問共享資源時可能出現的競態條件問題。本文將從信號量的基本概念出發,逐步深入探討其工作原理、實現方式以及實際應用&#…

LeetCode 1004. 最大連續1的個數 III

LeetCode 1004題 “最大連續1的個數 III” 是一道關于數組和滑動窗口的問題。題目描述如下: 題目描述 給定一個由若干 0 和 1 組成的數組 nums,以及一個整數 k。你可以將最多 k 個 0 翻轉為 1。返回經過翻轉操作后,數組中連續 1 的最大個數…

digitalworld.local: FALL靶場

digitalworld.local: FALL 來自 <digitalworld.local: FALL ~ VulnHub> 1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.182&#xff0c;靶場IP192.168.23.4 3&…

經典Java面試題的答案——Java 基礎

大家好&#xff0c;我是九神。這是互聯網技術崗的分享專題&#xff0c;廢話少說&#xff0c;進入正題&#xff1a; 1.JDK 和 JRE 有什么區別&#xff1f; JDK&#xff1a;Java Development Kit 的簡稱&#xff0c;java 開發工具包&#xff0c;提供了 java 的開發環境和運行環境…

LabVIEW風機狀態實時監測

在當今電子設備高度集成化的時代&#xff0c;設備散熱成為關鍵問題。許多大型設備機箱常采用多個風機協同散熱&#xff0c;確保系統穩定運行。一旦風機出現故障&#xff0c;若不能及時察覺&#xff0c;可能導致設備損壞&#xff0c;造成巨大損失。為滿足對機箱內風機狀態實時監…

18 C 語言算術、關系、邏輯運算符及 VS Code 警告配置詳解

1 運算符與表達式核心概念 1.1 什么是運算符 運算符是編程和數學中具有特定功能的符號&#xff0c;用于對數據進行運算、賦值、比較及邏輯處理等操作。它們能夠改變、組合或比較操作數的值&#xff0c;進而生成新值或觸發特定動作。 1.2 什么是表達式 表達式是編程和數學中用…

shell腳本之函數詳細解釋及運用

什么是函數 通俗地講&#xff0c;所謂函數就是將一組功能相對獨立的代碼集中起來&#xff0c;形成一個代碼塊&#xff0c;這個代碼可 以完成某個具體的功能。從上面的定義可以看出&#xff0c;Shell中的函數的概念與其他語言的函數的 概念并沒有太大的區別。從本質上講&#…

86.評論日記

再談小米SU7高速爆燃事件_嗶哩嗶哩_bilibili 2025年5月21日14:00:45

Babylon.js學習之路《七、用戶交互:鼠標點擊、拖拽與射線檢測》

文章目錄 1. 引言&#xff1a;用戶交互的核心作用1.1 材質與紋理的核心作用 2. 基礎交互&#xff1a;鼠標與觸摸事件2.1 綁定鼠標點擊事件2.2 觸摸事件適配 3. 射線檢測&#xff08;Ray Casting&#xff09;3.1 射線檢測的原理3.2 高級射線檢測技巧 4. 拖拽物體的實現4.1 拖拽基…

adb抓包

目錄 抓包步驟 步驟 1: 獲取應用的包名 步驟 2: 查看單個應用的日志 步驟 3: 使用日志級別過濾器 步驟 4: 高級日志過濾 可能的原因&#xff1a; 解決方案&#xff1a; 額外提示&#xff1a; 日志保存 抓包步驟 連接設備 adb devices 步驟 1: 獲取應用的包名 首先…

什么是實時流數據?核心概念與應用場景解析

在當今數字經濟時代&#xff0c;實時流數據正成為企業核心競爭力。金融機構需要實時風控系統在欺詐交易發生的瞬間進行攔截&#xff1b;電商平臺需要根據用戶實時行為提供個性化推薦&#xff1b;工業物聯網需要監控設備狀態預防故障。這些場景都要求系統能夠“即時感知、即時分…

百度飛槳OCR(PP-OCRv4_server_det|PP-OCRv4_server_rec_doc)文本識別-Java項目實踐

什么是OCR? OCR&#xff08;Optical Character Recognition&#xff0c;光學字符識別&#xff09;是一種通過技術手段將圖像或掃描件中的文字內容轉換為可編輯、可搜索的文本格式&#xff08;如TXT、Word、PDF等&#xff09;的技術。它廣泛應用于文檔數字化、信息提取、自動化…

Pytorch實現常用代碼筆記

Pytorch實現常用代碼筆記 基礎實現代碼其他代碼示例Networks or ProjectsNetwork ModulesLossUtils 基礎實現代碼 參考 深度學習手寫代碼 其他代碼示例 Networks or Projects SENet學習筆記 SKNet——SENet孿生兄弟篇 GCNet&#xff1a;當Non-local遇見SENet YOLOv1到YOLO…

word通配符表

目錄 一、word查找欄代碼&通配符一覽表二、word替換欄代碼&通配符一覽表三、參考文獻 一、word查找欄代碼&通配符一覽表 序號清除使用通配符復選框勾選使用通配符復選框特殊字符代碼特殊字符代碼or通配符1任意單個字符^?一個任意字符?2任意數字^#任意數字&#…

TYUT-企業級開發教程-第6章

這一章 考點不多 什么是緩存&#xff1f;為什么要設計出緩存&#xff1f; 企業級應用為了避免讀取數據時受限于數據庫的訪問效率而導致整體系統性能偏低&#xff0c;通 常會在應用程序與數據庫之間建立一種臨時的數據存儲機制&#xff0c;該臨時存儲數據的區域稱 為緩存。緩存…

雙檢鎖(Double-Checked Locking)單例模式

在項目中使用雙檢鎖&#xff08;Double-Checked Locking&#xff09;單例模式來管理 JSON 格式化處理對象&#xff08;如 ObjectMapper 在 Jackson 庫中&#xff0c;或 JsonParser 在 Gson 庫中&#xff09;是一種常見的做法。這種模式確保了對象只被創建一次&#xff0c;同時在…

華為網路設備學習-22(路由器OSPF-LSA及特殊詳解)

一、基本概念 OSPF協議的基本概念 OSPF是一種內部網關協議&#xff08;IGP&#xff09;&#xff0c;主要用于在自治系統&#xff08;AS&#xff09;內部使路由器獲得遠端網絡的路由信息。OSPF是一種鏈路狀態路由協議&#xff0c;不直接傳遞路由表&#xff0c;而是通過交換鏈路…

數獨求解器3.0 增加latex格式讀取

首先說明兩種讀入格式 latex輸入格式說明 \documentclass{article} \begin{document}This is some text before oku.\begin{array}{|l|l|l|l|l|l|l|l|l|} \hline & & & & 5 & & 2 & 9 \\ \hline& & 5 & 1 & & 7…

20250520在全志H3平臺的Nano Pi NEO CORE開發板上運行Ubuntu Core16.04.3時跑通4G模塊EC20

1、h3-sd-friendlycore-xenial-4.14-armhf-20210618.img.gz 在WIN10下使用7-ZIP解壓縮/ubuntu20.04下使用tar 2、Win32DiskImager.exe 寫如32GB的TF卡。【以管理員身份運行】 3、TF卡如果已經做過會有3個磁盤分區&#xff0c;可以使用SD Card Formatter/SDCardFormatterv5_WinE…

精益數據分析(74/126):從愿景到落地的精益開發路徑——Rally的全流程管理實踐

精益數據分析&#xff08;74/126&#xff09;&#xff1a;從愿景到落地的精益開發路徑——Rally的全流程管理實踐 在創業的黏性階段&#xff0c;如何將抽象的愿景轉化為可落地的產品功能&#xff1f;如何在快速迭代中保持戰略聚焦&#xff1f;今天&#xff0c;我們通過Rally軟…