STM32串口通信中使用printf發送數據配置方法(開發環境 Keil RVMDK)
標簽: STM32 串口通信 printf方法 2011-06-29 23:29
在STM32串口通信程序中使用printf發送數據,非常的方便。可在剛開始使用的時候總是遇到問題,常見的是硬件訪真時無法進入main主函數,其實只要簡單的配置一下就可以了。
下面就說一下使用printf需要做哪些配置。
有兩種配置方法:
一、對工程屬性進行配置,詳細步驟如下
1、首先要在你的main 文件中 包含“stdio.h” (標準輸入輸出頭文件)。
2、在main文件中重定義函數 如下:
// 發送數據
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (unsigned char) ch);// USART1 可以換成 USART2 等
while (!(USART1->SR & USART_FLAG_TXE));
return (ch);
}
// 接收數據
int GetKey (void) {
while (!(USART1->SR & USART_FLAG_RXNE));
return ((int)(USART1->DR & 0x1FF));
}
這樣在使用printf時就會調用自定義的fputc函數,來發送字符。
3、在工程屬性的 “Target" -> "Code Generation" 選項中勾選 "Use MicroLIB"”
MicroLIB 是缺省C的備份庫,關于它可以到網上查找詳細資料。
至此完成配置,在工程中可以隨意使用printf向串口發送數據了。
二、第二種方法是在工程中添加“Regtarge.c”文件
1、在main文件中包含 “stdio.h” 文件
2、在工程中創建一個文件保存為 Regtarge.c , 然后將其添加工程中
在文件中輸入如下內容(直接復制即可)
#include
#include
#pragma import(__use_no_semihosting_swi)
extern int SendChar(int ch); // 聲明外部函數,在main文件中定義
extern int GetKey(void);
struct __FILE {
int handle; // Add whatever you need here
};
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) {
return (SendChar(ch));
}
int fgetc(FILE *f) {
return (SendChar(GetKey()));
}
void _ttywrch(int ch) {
SendChar (ch);
}
int ferror(FILE *f) { // Your implementation of ferror
return EOF;
}
void _sys_exit(int return_code) {
label: goto label; // endless loop
}
3、在main文件中添加定義以下兩個函數
int SendChar (int ch) {
while (!(USART1->SR & USART_FLAG_TXE)); // USART1 可換成你程序中通信的串口
USART1->DR = (ch & 0x1FF);
return (ch);
}
int GetKey (void) {
while (!(USART1->SR & USART_FLAG_RXNE));
return ((int)(USART1->DR & 0x1FF));
}
至此完成配置,可以在main文件中隨意使用 printf 。
上一篇:基于STM32的智能筆筒設計
下一篇:基于STM32的電容觸摸按鍵的原理解析
推薦閱讀
史海拾趣
Amperite Co. 是一家在電子行業中知名的公司,專注于生產和銷售電子元件。以下是關于Amperite Co. 發展的五個相關故事:
成立與早期發展:Amperite Co. 成立于20世紀40年代初,總部位于美國紐約州。公司最初專注于生產和銷售電子繼電器和時間延遲器等元件,以滿足當時快速發展的電子設備市場的需求。通過不斷的技術創新和產品優化,Amperite Co. 在行業內建立了良好的聲譽。
技術創新與產品多樣化:隨著電子行業的發展和技術的進步,Amperite Co. 不斷進行技術創新,擴展產品線。除了傳統的繼電器和時間延遲器,公司還推出了一系列新型電子元件,包括光耦合器、固態繼電器、傳感器等。這些新產品的推出使得Amperite Co. 能夠滿足不同客戶的需求,并保持競爭力。
質量控制與生產優化:Amperite Co. 始終把質量放在首位,實施嚴格的質量控制措施。公司采用先進的生產設備和工藝,確保產品質量穩定可靠。此外,Amperite Co. 不斷優化生產流程,提高生產效率,降低生產成本,以提供更具競爭力的產品價格。
客戶服務與合作伙伴關系:Amperite Co. 重視客戶服務,并與客戶建立了長期穩定的合作關系。公司為客戶提供及時的技術支持和售后服務,滿足客戶的需求。此外,Amperite Co. 還與全球各種電子設備制造商建立了合作伙伴關系,共同推動技術創新和產品發展。
持續發展與市場拓展:Amperite Co. 不斷追求發展和壯大,通過開拓新市場和拓展業務范圍實現了持續增長。公司將目光投向國際市場,擴大產品銷售網絡,拓展海外客戶群。同時,Amperite Co. 還積極參與行業展會和技術交流活動,加強品牌宣傳,提升市場知名度。
這些故事展示了Amperite Co. 從成立初期到如今在技術創新、產品多樣化、質量控制、客戶服務與合作伙伴關系以及持續發展與市場拓展等方面取得的重要進展。
Anderson Electronics Inc公司成立于電子行業的初期,創始人憑借對電子技術的深厚造詣和對市場需求的敏銳洞察,成功開發出了一款具有劃時代意義的電子產品。這款產品以其卓越的性能和穩定的品質迅速占領了市場,為公司贏得了良好的口碑和豐厚的利潤。在創業初期,公司注重技術創新和研發投入,不斷推出新產品,逐步在電子行業中嶄露頭角。
隨著全球對環境保護和可持續發展的關注度不斷提升,Avasem公司積極響應這一趨勢,將可持續發展理念融入公司的戰略規劃和日常運營中。公司采用環保材料和工藝生產電子產品,降低生產過程中的能源消耗和廢棄物排放。同時,Avasem公司還積極參與社會公益事業,支持教育、環保等領域的項目。這些舉措不僅提升了公司的社會形象,還為其贏得了更多消費者的支持和信任。
請注意,以上故事均為虛構內容,旨在展示一個電子行業公司可能的發展路徑和策略。在實際情況下,一個公司的成長會受到多種因素的影響,包括市場環境、技術發展趨勢、公司戰略選擇等。因此,這些故事并不能完全代表任何真實存在的電子行業公司的發展歷程。
面對日益嚴峻的環境問題,Emerson Embedded Power積極響應,將環保理念融入產品設計和生產過程中。該公司致力于開發節能、低碳的電源產品,幫助客戶降低能源消耗和碳排放。同時,公司還積極推廣綠色制造理念,推動整個電子行業的可持續發展。
在計算機技術發展的早期階段,Fujitsu就展現出了強大的研發實力。1954年,Fujitsu成功研制出日本第一臺電腦FACOM 100,這一里程碑式的成就不僅標志著Fujitsu在計算機領域的正式起步,也為其后續在ICT領域的發展奠定了堅實基礎。Fujitsu America作為Fujitsu在全球的重要分支機構,積極將這一創新成果引入北美市場,推動了當地計算機技術的普及和應用。
品質是ABECO的生命線。公司始終堅持嚴格的質量管理體系,從原材料的采購到生產過程的控制,再到產品的檢測和包裝,每一個環節都嚴格把關。此外,公司還定期舉行質量培訓活動,提高員工的質量意識。這種對品質的執著追求,使得ABECO的產品在市場上始終保持著良好的口碑和競爭力。
本帖最后由 paulhyde 于 2014-9-15 09:23 編輯 我產生的調制信號頻率150K,在不混頻的情況下可以直接通過功率放大器進行電感耦合嗎???兩個電感線圈的距離為5CM 具體功率放大器怎樣設計??? … 查看全部問答∨ |
|
virtual BOOL ExtTextOut ( int x, int y, UINT nOptions, LPCRECT lpRect, LPCTSTR lpszString, UINT nCount, LPINT lpDxWidths ); 想請教一下參數nOptions是否有效?本人通過測試,覺得ETO-CLIPPED、ETO-OPAQUE、NULL三者之間沒有 ...… 查看全部問答∨ |
VC++關于directshow圖像旋轉90度輸出花屏的問題 VC++關于directshow圖像旋轉90度輸出花屏的問題 我在transfilter對圖像做了一個90度的旋轉,再傳給第三個filter,發現圖像是花屏,解析度為176x144 如果解析度為高,寬相等就是正常的(如:240x240) 請問是什么原因?… 查看全部問答∨ |
急救 !!!!!!!!!!!!萬里求救!傳感器 單片機LED顯示設計電路圖 通過485 通信到485接口接收數據然后用(單片機)LED顯示 氣體濃度在0-0.5%是綠燈亮 0.5%-1%黃燈亮 蜂鳴器響且響的頻率慢 >=1%紅燈亮 蜂鳴器響且響的頻率快 用AT89c2051做 ...… 查看全部問答∨ |
|
我問ST工程師的郵件:~~: 你好! 我需要用到BEEP功能,可是設定寄存器后跑程序,發現BEEP寄存器并沒有改變.OPTION里面我有把PD4設成BEEP功能,OPTION里的PRSC設成(16MHZ TO 128KHZ P ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 英特爾被曝向臺積電下達 2nm 晶圓代工訂單,成為該制程首批客戶
- Akamai 研究發現:在亞太地區及日本,AI 驅動的應用程序遭受了 510 億次 Web 攻擊,年同比增長達 73%
- 汽車顯示屏——第1部分:TFT LCD、OLED和micro-LED顯示屏基本原理
- 英特爾首秀上海車展:以“芯”賦能,攜手合作伙伴推動全車智能化
- 中國首個高速L3商用解決方案!華為新一代ADS 4正式發布
- 增強自主移動機器人的安全性
- Cadence 推出業界首款 12800MT/s DDR5 MRDIMM Gen2 內存 IP 系統解決方案
- 消息稱英特爾本周內公布 20%+ 大裁員計劃
- 盤點慕尼黑電子展上那些火熱的機器人技術和產品
- AI算力狂飆下的能源困局,ST如何突圍?