色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32工程上printf()函數(shù)的方法實(shí)現(xiàn)

lcdz66 ? 來源:雨飛工作室 ? 2023-11-06 16:22 ? 次閱讀

針對STM32的串口編程,可以通過USART1向計(jì)算機(jī)的串口調(diào)試助手打印數(shù)據(jù),或者接收計(jì)算機(jī)串口調(diào)試助手的數(shù)據(jù)。

下面,我們可以實(shí)現(xiàn)STM32工程上的printf()函數(shù)了,方便用于程序開發(fā)中調(diào)試信息的打印。

方法1:使用MicroLIB庫

1.1 KEIL-MDK中的Use MicroLIB選項(xiàng)

在MDK開發(fā)環(huán)境中,

fc5fb8de-7c7c-11ee-939d-92fbcf53809c.jpg

MicroLib是缺省c庫的備選庫,它可裝入少量內(nèi)存中,與嵌入式應(yīng)用程序配合使用,且這些應(yīng)用程序不在操作系統(tǒng)中運(yùn)行。MicroLib進(jìn)行了高度優(yōu)化以使代碼變得很小,功能比缺省c庫少,不具備某些ISO C特性,部分庫函數(shù)的運(yùn)行速度也比較慢,如內(nèi)存拷貝函數(shù)memcpy()。 MicroLib與缺省C庫之間的主要差異如下:

(1) MicroLib不符合 ISO C庫標(biāo)準(zhǔn)。不支持某些ISO特性,并且其他特性具有的功能也較少。

(2) MicroLib不符合IEEE 754二進(jìn)制浮點(diǎn)算法標(biāo)準(zhǔn)。

(3) MicroLib進(jìn)行了高度優(yōu)化以使代碼變得很小。

(4) 無法對區(qū)域設(shè)置進(jìn)行配置。缺省C區(qū)域設(shè)置是唯一可用的區(qū)域設(shè)置。

(5) 不能將main() 聲明為使用參數(shù),并且不能返回內(nèi)容。

(6) 不支持stdio,但未緩沖的stdin、stdout和stderr除外。

(7) MicroLib對C99函數(shù)提供有限的支持。 (8) MicroLib不支持操作系統(tǒng)函數(shù)。 (9) MicroLib不支持與位置無關(guān)的代碼。

(10) MicroLib不提供互斥鎖來防止非線程安全的代碼。 (11) MicroLib不支持寬字符或多字節(jié)字符串。

(12) 與stdlib不同,MicroLib不支持可選擇的單或雙區(qū)內(nèi)存模型。MicroLib只提供雙區(qū)內(nèi)存模型,即單獨(dú)的堆棧和堆區(qū)。

MicroLib提供了一個(gè)有限的stdio子系統(tǒng),它僅支持未緩沖的stdin、stdout和stderr,那么也就是說勾選了Use MicroLib選項(xiàng)后,在代碼工程中就可以使用printf()函數(shù)咯?然而事實(shí)并非如此,這樣直接使用printf()函數(shù),其打印的字符串最終不知道打印到何處。我們要做的是將調(diào)試信息打印到USART1中,所以需要對printf()函數(shù)所依賴的打印輸出函數(shù)fputc()重定向(MicroLib中的printf()函數(shù)打印操作依賴fputc() )。

1.2 重定向fputc函數(shù)

在MicroLib的stdio.h中,fputc()函數(shù)的原型為:

int fputc(int ch, FILE* stream)

此函數(shù)原本是將字符ch打印到文件指針stream所指向的文件流去的,現(xiàn)在我們不需要打印到文件流,而是打印到串口1。基于前面的代碼:



#include 
int fputc(int ch, FILE* stream)
{
//USART_SendData(USART1, (unsigned char) ch);
//while (!(USART1->SR & USART_FLAG_TXE));
USART_SendChar(USART1, (uint8_t)ch);
return ch;
}
注意:需要包含頭文件stdio.h,否則FILE類型未定義。

勾選了Use MicroLib選項(xiàng),重定向fputc()函數(shù)后,我們就可以在工程代碼中使用printf()函數(shù)了:


int main(void)
{
USART_Configuration();
printf("
stm32f103rct6
");
printf("
Cortex-M3
");
while (1);
return 0;
}
printf()函數(shù)的使用方法跟之前一樣,運(yùn)行結(jié)果:

fc8bc5c8-7c7c-11ee-939d-92fbcf53809c.jpg

方法2:不使用MicroLIB庫

2.1 半主機(jī)模式

半主機(jī)模式是ARM的一種機(jī)制,實(shí)現(xiàn)將來ARM應(yīng)用程序代碼的輸入/輸出請求傳送至運(yùn)行著調(diào)試器的主機(jī)。例如,設(shè)置使用半主機(jī)模式下的ARM應(yīng)用程序,可以使用printf()和scanf()來使用主機(jī)的顯示器和鍵盤,而不需要在ARM系統(tǒng)上搭配顯示器和鍵盤。

半主機(jī)通過一組定義好的軟件指令(如SVC)來實(shí)現(xiàn)的,這些指令在程序控制下產(chǎn)生異常,ARM應(yīng)用程序調(diào)用半主機(jī)對應(yīng)的異常處理函數(shù),然后調(diào)試代理處理該異常。

第二段話感覺理解起來有點(diǎn)模糊,但是第一段還是懂它在講什么的。一般的ARM應(yīng)用程序中并不需要半主機(jī)操作,在這里為確保ARM應(yīng)用程序中沒有鏈接MicroLib的半主機(jī)相關(guān)函數(shù),我們要取消ARM的半主機(jī)工作模式。

2.2 實(shí)現(xiàn)代碼

在工程中加上如下代碼:



#pragma import(__use_no_semihosting)


struct __FILE {
int handle;
};


FILE __stdout;


_sys_exit(int x)
{
x = x;
}


int fputc(int ch, FILE *f){
while((USART1->SR&0X40)==0);
USART1->DR = (u8) ch;
return ch;
}
上面的代碼摘自正點(diǎn)原子的范例程序,具體每一行的意義目前也不大清楚。這樣操作后,在不使用MicroLib的前提下,仍能使用printf()函數(shù)將調(diào)試信息打印到USART1上了。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355743
  • 串口調(diào)試
    +關(guān)注

    關(guān)注

    2

    文章

    268

    瀏覽量

    24713
  • printf函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    5890
  • USART1
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    3682

原文標(biāo)題:使用KEIL-MDK開發(fā)STM32時(shí),兩種printf()函數(shù)重定向的方法

文章出處:【微信號(hào):雨飛工作室,微信公眾號(hào):雨飛工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    實(shí)現(xiàn)STM32工程printf()函數(shù)

    在前面學(xué)習(xí)了STM32的串口編程,通過USART1向計(jì)算機(jī)的串口調(diào)試助手打印數(shù)據(jù),或者接收計(jì)算機(jī)串口調(diào)試助手的數(shù)據(jù),接下來我們可以實(shí)現(xiàn)STM32工程
    發(fā)表于 08-24 06:53

    如何實(shí)現(xiàn)STM32工程printf()函數(shù)

    如何實(shí)現(xiàn)STM32工程printf()函數(shù)
    發(fā)表于 12-01 06:55

    printfstm32實(shí)現(xiàn)方法是什么?

    printfstm32實(shí)現(xiàn)方法是什么?
    發(fā)表于 12-01 07:52

    STM32 Printf函數(shù)利用標(biāo)準(zhǔn)庫實(shí)現(xiàn)方法是什么?

    STM32 Printf函數(shù)利用標(biāo)準(zhǔn)庫實(shí)現(xiàn)方法是什么?
    發(fā)表于 12-02 06:13

    基于STM32printf串口數(shù)據(jù)輸出

    方法適用于 STM32實(shí)現(xiàn)了使用printf等標(biāo)準(zhǔn)C流函數(shù)輸出數(shù)據(jù)的辦法,極大的減少了輸出 串口數(shù)據(jù) 時(shí)所需要做的數(shù)據(jù)處理。
    發(fā)表于 06-21 07:51 ?2w次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>printf</b>串口數(shù)據(jù)輸出

    實(shí)現(xiàn)重定向printf()和scanf() 函數(shù)案例分析

    名字的函數(shù)時(shí),優(yōu)先采用用戶編寫的函數(shù),這樣用戶就可以實(shí)現(xiàn)對庫的修改了。為了實(shí)現(xiàn)重定向printf()和scanf()
    發(fā)表于 06-23 08:26 ?9196次閱讀
    <b class='flag-5'>實(shí)現(xiàn)</b>重定向<b class='flag-5'>printf</b>()和scanf() <b class='flag-5'>函數(shù)</b>案例分析

    STM32中使用printf打印串口數(shù)據(jù)的實(shí)現(xiàn)原理及方法

    的寄存器中,便可以實(shí)現(xiàn)使用printf()函數(shù)STM32串口上輸出數(shù)據(jù)的功能。 盤點(diǎn)一下實(shí)現(xiàn)print
    的頭像 發(fā)表于 07-22 11:12 ?1.5w次閱讀

    STM32單片機(jī)IAR環(huán)境下重定向printf函數(shù)

    STM32單片機(jī)IAR環(huán)境下重定向printf函數(shù)一、引言在項(xiàng)目開發(fā)中,使用printf函數(shù)通過串口打印調(diào)試信息,需要對
    發(fā)表于 12-03 10:36 ?19次下載
    <b class='flag-5'>STM32</b>單片機(jī)IAR環(huán)境下重定向<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>

    STM32使用串口重定向系統(tǒng)printf函數(shù)輸出時(shí)出現(xiàn)一初始化或使用printf函數(shù)系統(tǒng)卡死的原因及解決辦法

    STM32使用串口重定向系統(tǒng)printf函數(shù)輸出時(shí)出現(xiàn)一初始化或使用printf函數(shù)系統(tǒng)卡死的原因及解決辦法在
    發(fā)表于 12-09 10:06 ?13次下載
    <b class='flag-5'>STM32</b>使用串口重定向系統(tǒng)<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>輸出時(shí)出現(xiàn)一初始化或使用<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>系統(tǒng)卡死的原因及解決辦法

    STM32單片機(jī)基礎(chǔ)09——重定向printf函數(shù)到串口輸出的多種方法

    對于 printf 函數(shù)相信大家都不陌生,第一個(gè)C語言程序就是使用 printf 函數(shù)在屏幕的控制臺(tái)打印出Hello World,之后使用
    發(fā)表于 12-27 19:22 ?10次下載
    <b class='flag-5'>STM32</b>單片機(jī)基礎(chǔ)09——重定向<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>到串口輸出的多種<b class='flag-5'>方法</b>

    stm32printf函數(shù)的串口輸出代碼

    stm32f103串口一與串口二printf函數(shù)輸出、本人是萌新,因項(xiàng)目需要特意配置了該段代碼,不喜勿噴,純屬個(gè)人筆記。對于串口的代碼網(wǎng)上也是很多,無非是配置問題,該代碼
    發(fā)表于 12-28 19:10 ?13次下載
    <b class='flag-5'>stm32printf</b><b class='flag-5'>函數(shù)</b>的串口輸出代碼

    STM32中串行通訊中printf函數(shù)的使用

    由于最近使用到了串口屏,而它與STM32之間的連接是通過單片機(jī)之間的串行通訊實(shí)現(xiàn)的,具體而言我利用printf函數(shù)給串口屏發(fā)送數(shù)據(jù),而printf
    發(fā)表于 12-29 19:31 ?6次下載
    <b class='flag-5'>STM32</b>中串行通訊中<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>的使用

    stm32使用printf實(shí)現(xiàn)串口打印原理

    ??標(biāo)準(zhǔn)庫函數(shù)的默認(rèn)輸出設(shè)備是顯示器, 要實(shí)現(xiàn)在串口或 LCD 輸出,必須重定義標(biāo)準(zhǔn)庫函數(shù)里調(diào)用的與輸出設(shè)備相關(guān)的函數(shù) .例如 :printf
    發(fā)表于 01-13 14:55 ?5次下載
    <b class='flag-5'>stm32</b>使用<b class='flag-5'>printf</b><b class='flag-5'>實(shí)現(xiàn)</b>串口打印原理

    STM32printf函數(shù)重定向方法

    MicroLib提供了一個(gè)有限的stdio子系統(tǒng),它僅支持未緩沖的stdin、stdout和stderr,那么也就是說勾選了Use MicroLib選項(xiàng)后,在代碼工程中就可以使用printf()函數(shù)咯?
    的頭像 發(fā)表于 07-10 16:22 ?1680次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>重定向<b class='flag-5'>方法</b>

    stdio.h實(shí)現(xiàn)printf函數(shù)?

    里面實(shí)現(xiàn)printf。 實(shí)際并不是,這里就涉及了頭文件和庫的區(qū)別。 頭文件一般存放大家都要用的東西,比如函數(shù)的聲明,結(jié)構(gòu)體的聲明,命名新的類型等等。 stdio.h 頭文件,里
    的頭像 發(fā)表于 12-18 10:28 ?84次閱讀
    主站蜘蛛池模板: 好男人WWW免费高清视频在线 | 日韩亚洲欧美中文高清在线| 亚洲AV久久久噜噜噜噜| 99久久国产综合精品成人影院| 国产亚洲精品免费视频| 欧美一夜爽爽爽爽爽爽| 亚洲中文字幕国产综合| 丰满老熟好大bbbxxx| 乱子伦在线观看中文字幕| 亚洲薄码区| 高清欧美videos sexo| 魔乳 堕乳漫画acg产卵| 亚洲日本va中文字幕久久| 大胸美女裸身色诱网站| 蜜柚影院在线观看免费高清中文 | 亚洲中文字幕在线第六区| 国产不卡在线观看视频| 欧美精品色婷婷五月综合| 又硬又粗又大一区二区三区视频| 国产美女久久久久久久久久久| 人与畜禽CROPROATION免费| 中国毛片网| 久久re热在线视频精6| 亚洲国产中文字幕在线视频综合| 国产69精品久久久久乱码免费| 女同给老师下媚药| 最新中文字幕在线视频| 久久精品国产清白在天天线| 校园刺激全黄H全肉细节文| 大咪咪dvd| 青青青青久久久久国产的| 999精品在线| 美女网站免费看| 最近中文字幕在线中文高清版| 精品一区二区三区高清免费观看| 亚洲 欧美 清纯 校园 另类| 国产A级毛片久久久久久久| 日本漫画大全无翼乌| gay台湾无套男同志xnxⅹ| 暖暖免费 高清 日本社区中文| 自拍区偷拍亚洲视频|