學習STM32過程中,經常打交道的莫過于串口,你可以將任何信息,當然重要的是調試信息打印到串口中輸出,總是用一個字節發送函數或者字符串發送函數總是有些不放便,之前編程中熟悉的莫過于printf了,下面就給出了用printf打印到串口的方案,當然方案不止一個,僅供參考。
1、 添加printf的頭文件 #include
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
}
3、修改一下選中Use MicroLIB ,在 Target/Code Generation選中Use MicroLIB
這樣就可以像以前那樣使用printf了。
不過現在的USART已經在程序中加了這個重定向;
編譯會出錯:..\OBJ\164串口轉并口.axf: Error: L6200E: Symbol fputc multiply defined (by usart.o and main.o)。
/************************************************
劉凱教你學STM32F103
第21講
軟件仿真,庫函數實現USART數據發送
2016年4月24日 10:12:39
程序實現3 printf實現
**************************************************/
#include "sys.h"
#include "delay.h"
#include "stdio.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(u32 Baudrate);
int fputc(int ch, FILE *f)//重定向,讓printf輸出到串口
{
USART_SendData(USART1,ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
}
int main(void)
{
u8 i,data;
RCC_Configuration();
GPIO_Configuration();
USART_Configuration(9600);
data = 'A';
for(i=0;i<30;i++)
{
USART_SendData(USART1, data);
data++;
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}
printf("yuanbao");
}
void RCC_Configuration(void)
{
/*---------------使用外部RC晶振----------*/
RCC_DeInit(); //設置時鐘為缺省值
RCC_HSEConfig(RCC_HSE_ON); //使能外部高速晶振
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待HSE準備就緒
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能指令預取
FLASH_SetLatency(FLASH_Latency_2); //等待2個周期
RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 72MHZ
RCC_PLLCmd(ENABLE); //Enable PLLCLK
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait PLL is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //SYSCLK = PLLCLK
while(RCC_GetSYSCLKSource()!= 0x08); //Wait PLLCLK as system clock
//---------打開相應外設時鐘--------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2外設的GPIOA的時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //聲明一個結構體變量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管腳頻率為50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIOA寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //選擇
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIOA寄存器
}
void USART_Configuration(u32 Baudrate)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = Baudrate;
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_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
上一篇:STM32 串口通信 printf方法
下一篇:基于STM32的虛擬多線程
推薦閱讀
史海拾趣
隨著技術產品的成功推出,Horizon開始積極拓展市場。公司首先在國內市場建立了完善的銷售和服務網絡,通過參加行業展會、舉辦技術研討會等方式提升品牌知名度。同時,Horizon也意識到國際市場的巨大潛力,逐步在海外設立分支機構,將產品推向全球市場。通過持續的市場推廣和優質的客戶服務,Horizon的品牌影響力逐漸增強,成為電子行業內備受矚目的新興企業。
隨著技術創新的成功,A-BRIGHT公司開始積極尋求市場拓展。公司首先瞄準了歐洲市場,通過參加國際電子展會和建立銷售網絡,成功將產品打入歐洲市場。隨后,A-BRIGHT又進軍北美市場,通過與當地的大型電子分銷商合作,進一步擴大了市場份額。這些市場拓展的成功為A-BRIGHT的快速發展奠定了堅實基礎。
面對數字化轉型的浪潮,ELDECO公司積極擁抱變化,加快數字化轉型步伐。公司引入先進的信息技術和大數據分析工具,對生產、銷售、服務等各個環節進行數字化改造和升級。通過數字化轉型,ELDECO公司實現了生產過程的自動化和智能化管理,提高了生產效率和產品質量;同時,公司還利用大數據分析工具對市場趨勢和客戶需求進行深入分析,為產品研發和市場營銷提供了有力支持。數字化轉型的助力使得ELDECO公司在激烈的市場競爭中保持了強勁的發展勢頭。
請注意,以上故事均為虛構內容,旨在展示電子行業中可能的發展故事。如需了解真實公司的具體發展情況,請查閱相關官方資料或新聞報道。
2022年12月,中移物聯網的OneNET城市物聯網平臺在2022中國移動全球合作伙伴大會上亮相。該平臺以城市為核心,整合了各類物聯網資源,為城市管理、公共服務等領域提供了全方位的物聯網解決方案。OneNET城市物聯網平臺的推出,標志著中移物聯網在物聯網領域的技術實力和市場地位得到了進一步提升。
Eska公司注重技術傳承與創新發展。作為奧地利唯一一家仍在為手套制造業培訓學徒和技術工人的企業,Eska堅持手套傳統工藝和技術的秉承。同時,公司也積極引入新技術和新材料,不斷提升產品的性能和質量。這種技術傳承與創新相結合的發展模式,使得Eska在保持傳統優勢的同時,也能不斷適應市場的變化和發展。
隨著全球環保意識的提高,對于環保型電子材料的需求也日益增長。DuPont公司積極響應這一趨勢,致力于環保型電子材料的研發和生產。公司采用先進的環保技術和生產工藝,開發出了一系列低污染、低能耗的電子材料。這些材料不僅具有良好的性能,而且對環境友好,符合可持續發展的要求。DuPont公司的這一舉措,不僅提升了公司的競爭力,也為電子行業的可持續發展做出了積極貢獻。
緣起: EEWORLD與頂嵌合作,重磅推出“頂嵌與你一起:動手做嵌入式產品”。希望通過對一個典型嵌入式產品研發過程進行描述,讓初級的嵌入式技術愛好者了解嵌入式開發過程和思路,從而提高學習效率。對于有一定開發經驗 ...… 查看全部問答∨ |
臺灣RF大牛Shuenn-Yuh Lee課件Radio Frequency Integrated Circuits 1Radio Frequency Integrated Circuits Instructor : Shuenn-Yuh Lee National Chung Cheng University Department of Electrical Engineering Office : 431 TEL : (05)2720411-33223, BP : 0921565137 E-mail : sylee@vlsi.ee.ccu.edu.t ...… 查看全部問答∨ |
我創建了一個key_Interrupt_event[10]中斷事件組,分別用KernelIoControl與InterruptInitialize函數與對應的外部中斷注冊上了。 然后用一個WaitForMultipleObjects等待任何一個中斷的發生,然后執行響應動作。如下: while(1){ IntrEventNum = W ...… 查看全部問答∨ |
|
大家好! 由于平時電子作品做的比較少,真正動手做的時候發現有很多小問題不知如何處理,如果哪位大蝦做過《數字化語音存儲與回放系統的設計》還望不吝賜教(不可以用單獨的語音芯片,需要使用AD和DA模塊)。謝謝。我的問題如下: 1、怎么樣控制A ...… 查看全部問答∨ |
使用anydata DTU800,獲取的GPS信息總是一個位置,而且偏離很大,我對應地圖發現是蓮花橋東南角,我實際位置在西四環(大概3公里外) 發AT+GPSSTRT后MPC,PDE連接都正常,就是返回的+GPS:中的經緯度不是我的位置,更改OMODE,QOSLVL,QOSFH等都不起作 ...… 查看全部問答∨ |
error: can\'t open file \'/.obj\' for input 本帖最后由 dontium 于 2015-1-23 13:37 編輯 我在將vc程序向dm642evm移植時,出錯 video.cmd: error: can\\\'t open file \\\'/.obj\\\' for input 怎么解決,請賜教 … 查看全部問答∨ |
|