STM32學習和實踐筆記(28):printf重定向實驗

1.printf重定向簡介

? 在C語言中printf函數里,默認輸出設備是顯示器,如果想要用這個函數將輸出結果到串口或者LCD上顯示,就必須重定義標準庫函數里中printf函數調用的與輸出設備相關的函數。

比如要使用printf輸出到串口,需要先將fputc函數里面的輸出指向串口,這個更改就叫重定向。

?那么如何讓STM32使用printf函數呢?

int fputc(int ch,FILE *p)? //在使用printf函數時會自動調用這個函數

{

? USART_SendData(USART1,(u8)ch); //將此處原來的顯示器改為USART1

? while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

? return ch;

}

2.printf函數格式

? printf("<格式化字符串>", <參量表>);

常用格式化規定字符如下:

%d???? 按照十進制整型數打印

%6d??? 按照十進制整型數打印,至少6個字符寬

%f???? 按照浮點數打印

%6f??? 按照浮點數打印,至少6個字符寬

%.2f?? 按照浮點數打印,小數點后有2位小數?

%6.2f? 按照浮點數打印,至少6個字符寬,小數點后有2位小數

%x???? 按照十六進制打印

%c???? 打印字符

%s???? 打印字符串 ???????????

例如:使用printf函數輸出一個整型數據1234,則調用格式如下:

int data=1234;

printf(“輸出整型數據data=%d\r\n”,data);

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "usart.h"int main()
{u8 i;u16 data=1234;float fdata=12.3456;char str[]="Hello World!";SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷優先級分組LED_Init();USART1_Init(9600);while(1){i++;if(i%20 ==0){led1=!led1;//LED1閃,用來指示主程序循環是否運行printf("輸出整型數data=%d\r\n",data);printf("輸出浮點數fdata=%.2f\r\n",fdata);printf("輸出十六進數data=%X\r\n",data);printf("輸出八進數data=%o\r\n",data);printf("輸出子符串str=%s\r\n",str);}delay_ms(10);}
}
#include "usart.h"int fputc(int ch,FILE *p)  //在使用printf函數時自動調用此函數
{USART_SendData(USART1,(u8)ch);	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);return ch;
}void USART1_Init(u32 BoudRate)
{GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA時鐘GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //PA9為USART1的TXDGPIO_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; //PA10為USART1的RXDGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//GPIO_Init(GPIOA,&GPIO_InitStructure);USART_InitStructure.USART_BaudRate = BoudRate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode =USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);  //使能串口1USART_ClearFlag(USART1, USART_FLAG_TC);//清除串口1發送中斷標志位USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟RXNE(接收中斷)//設置中斷優先級,使能中斷通道NVIC_InitStructure.NVIC_IRQChannel=	USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =3;NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}void USART1_IRQHandler(void)
{u8 r;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){r=USART_ReceiveData(USART1);//開發板接收從電腦發過來的數據USART_SendData(USART1, r);//開發板再把收到的數據發送回電腦while(USART_GetFlagStatus(USART1, USART_FLAG_TC)!=SET);//等待,直到發送完成USART_ClearFlag(USART1, USART_FLAG_TC);//清除串口1發送中斷標志位}}

實驗是成功的,在開發板上運行后結果如下:

????????????????????

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

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

相關文章

linux 任務管理(臨時任務定時任務) 實驗

目錄 任務管理臨時任務管理周期任務管理 任務管理 臨時任務管理 執行如下命令添加單次任務&#xff0c;輸入完成后按組合鍵Ctrl-D。 [rootopenEuler ~]# at now5min warning: commands will be executed using /bin/sh at> echo "aaa" >> /tmp/at.log at&g…

什么是 PL/SQL

PL/SQL 是 Oracle 公司開發的一種過程化擴展 SQL 語言&#xff0c;它結合了 SQL 語句和過程化編程的特點&#xff0c;允許開發者在一個塊&#xff08;block&#xff09;中編寫聲明、條件語句、循環等&#xff0c;使得數據庫編程更加靈活和強大。PL/SQL 常用于 Oracle 數據庫系統…

bash腳本 報錯:/bin/bash^M:解釋器錯誤: 沒有那個文件或目錄

bash腳本 報錯&#xff1a;/bin/bash^M&#xff1a;解釋器錯誤: 沒有那個文件或目錄 出現這個問題是因為該腳本文件在windows下編輯過 在windows下&#xff0c;每一行的結尾是\n\r&#xff0c;而在linux下文件的結尾是\n&#xff0c;那么你在windows下編輯過的文件在linux下打…

J-STAGE (日本電子科學與技術信息集成)數據庫介紹及文獻下載

J-STAGE (日本電子科學與技術信息集成)是日本學術出版物的平臺。它由日本科學技術振興機構&#xff08;JST&#xff09;開發和管理。該系統不僅包括期刊&#xff0c;還有論文集&#xff0c;研究報告、技術報告等。文獻多為英文&#xff0c;少數為日文。目前網站上所發布的內容來…

零基礎學Java第十三天之日期類

日期時間類 1、Date 1、理解 表示特定的瞬間&#xff1a;Date對象表示從"epoch"&#xff08;即1970年1月1日 00:00:00 GMT&#xff09;開始計算的毫秒偏移量。不包含時區信息&#xff1a;原始的Date類不直接處理時區。它只是一個時間點&#xff0c;沒有與時區關聯。…

使用Vue調用ColaAI Plus大模型,實現聊天(簡陋版)

首先去百度文心注冊申請自己的api 官網地址&#xff1a;LuckyCola 注冊點開個人中心 查看這個文檔自己申請一個ColaAI Plus定制增強大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html來到vue的頁面 寫個樣式 <template><Header …

ICode國際青少年編程競賽- Python-5級訓練場-綜合練習6

ICode國際青少年編程競賽- Python-5級訓練場-綜合練習6 1、 for i in range(3):Dev.step(2 * (i 1))Dev.turnLeft()while Flyer[2 - i].disappear():wait()Dev.step(2 * (i 1))Dev.turnRight()while Dev.x ! Item[i].x:wait()2、 for i in range(3):Dev.step(2 * i 1)while …

用Python的pynput庫成為按鍵記錄高手

哈嘍&#xff0c;大家好&#xff0c;我是木頭左&#xff01; 揭秘鍵盤輸入&#xff1a;pynput庫的基本介紹 無論是為了安全審計、數據分析還是創建熱鍵操作&#xff0c;能夠記錄和處理鍵盤事件都顯得尤為關鍵。這就是pynput庫發揮作用的地方。pynput是一個Python庫&#xff0c…

Java 對象序列化

序列化&#xff1a;把對象轉化為可傳輸的字節序列過程稱為序列化。 反序列化&#xff1a;把字節序列還原為對象的過程稱為反序列化 序列化的作用是方便存儲和傳輸&#xff0c;細節可參考如下文章&#xff1a; 序列化理解起來很簡單 - 知乎序列化的定義 序列化&#xff1a;把對…

echarts map地圖添加背景圖

給map地圖添加了一個陰影3d的效果&#xff0c;添加一張背景圖&#xff0c;給人感覺有3d的效果 具體配置如下&#xff1a; html代碼模塊&#xff1a; <div class"echart_img" style"position: fixed; visibility: hidden;"></div><div id&q…

Autoware內容學習與初步探索(一)

0. 簡介 之前作者主要是基于ROS2&#xff0c;CyberRT還有AutoSar等中間件完成搭建的。有一說一&#xff0c;這種從頭開發當然有從頭開發的好處&#xff0c;但是如果說絕大多數的公司還是基于現成的Apollo以及Autoware來完成的。這些現成的框架中也有很多非常好的方法。目前作者…

【Java的抽象類和接口】

1. 抽象類 1.1 抽象類概念 在面向對象的概念中&#xff0c;所有的對象都是通過類來描繪的&#xff0c;但是反過來&#xff0c;并不是所有的類都是用來描繪對象的&#xff0c;如果 一個類中沒有包含足夠的信息來描繪一個具體的對象&#xff0c;這樣的類就是抽象類。 以上代碼中…

Leaflet系列——【一】初識Leaflet與Leaflet視圖操作

初識Leaflet&#xff08;vue3 &#xff09; 前言&#xff1a;當你熟悉了openlayer、mapbox、cesium等一些GIS框架之后&#xff0c;對于我們開發來說其實他們的本質就是往瓦片上面疊加圖層、【點、線、面、瓦片、geoJson、熱力圖、圖片、svg等等】都是一層層的Layer圖層&#xf…

MySQL中的多表設計

由于業務之間的相互關聯&#xff0c;所以各個表結構之間也存在著各種聯系 基本分為三種&#xff1a; 一對多 多對多 一對一 外鍵語法 create table 表名&#xff08; 字段名 數據類型&#xff0c; ... [constraint] 外鍵名稱 foreign key &#xff08;外鍵字段名&#…

銀川項目外包找邦芒 助力企業減壓增效

銀川邦芒人力項目外包&#xff0c;是指企業將原本由自身承擔的具有基礎性、共性、非核心的IT業務和基于IT的業務流程&#xff0c;委托給專業的外部服務提供商來執行的一種經濟活動。這種全方位的企業用工解決方案&#xff0c;旨在幫助企業優化資源配置、降低成本、提升效率&…

相同的隨機種子CPU和GPU上torch.nn.init.xavier_normal_結果并不一致

相同的隨機種子CPU和GPU上torch.nn.init.xavier_normal_結果并不一致 一.測試代碼二.輸出 在訓練pytorch模型時,相同的隨機種子,不同的服務器上loss并不一樣,通過調試發現這二個平臺的權值也不一樣.單獨測試torch.nn.init.xavier_normal_,發現也不一樣.如果都放在CPU上則二臺服…

Ceph集群擴容及數據再均衡原理分析

用戶文件在Ceph RADOS中存儲、定位過程大概包括&#xff1a;用戶文件切割成對象、對象映射到PG、PG分組PGP、PG映射到OSD。這些過程中&#xff0c;可能涉及了大量概念和變量&#xff0c;而其實它們大部分是通過HASH、CRUSH等算法計算出來的&#xff0c;初始參數可能也就只有這么…

sql實踐

1.從excel導入數據 在excel導入數據時要先在數據庫中創建對應的數據庫表 CREATE TABLE your_table_name (crawl_datetime DATE,url CHAR(255),company_name CHAR(255),company_size CHAR(255),company_type CHAR(255),job_type CHAR(255),job_name CHAR(255),edu CHAR(255),e…

暗區突圍TWITCH掉寶關聯帳號不了 無法關聯帳號 關聯不上

Twitch&#xff0c;作為全球知名的游戲直播平臺&#xff0c;常常攜手熱門游戲如《暗區突圍》舉辦互動活動&#xff0c;為玩家帶來獨特的參與體驗。在這個過程中&#xff0c;“綁定關聯”成為了連接直播觀眾與游戲世界的橋梁。簡單來說&#xff0c;Twitch綁定關聯《暗區突圍》指…

leetcode——鏈表的中間節點

876. 鏈表的中間結點 - 力扣&#xff08;LeetCode&#xff09; 鏈表的中間節點是一個簡單的鏈表OJ。我們要返回中間節點有兩種情況&#xff1a;節點數為奇數和節點數是偶數。如果是奇數則直接返回中間節點&#xff0c;如果是偶數則返回第二個中間節點。 這道題的解題思路是&a…