在使用STM32過程中,可能會因為沒有定義好調試工具的連接管腳,例如JTAG和SW需要的管腳被程序重新初始化復用了,然后就沒法調試變磚了,此時可以通過ISP的方式擦寫flash,或者跳線重啟,進入BootLoader模式用JLink下載新的程序或直接擦除MCU的flash,再把跳線改回來重啟。
通過串口printf打印輸出,添加C語言標準庫文件:
#include "stdio.h"
根據編譯器定義改寫相關函數
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
根據自己的串口收發改寫相應的函數:
int fputc(int ch, FILE *f)
{
USART1->DR=(uint8_t)ch;
while((USART1->SR&0X40)==0);
return ch;
}
int fputc(int ch, FILE *f)
{
Write_Usart1_C((uint8_t) ch);
return(ch);
}
int fgetc(FILE *f)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
return (USART_ReceiveData(USART1));
}
}
如果使用HAL庫:
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1 ,(uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
然后就可以使用C語言的標準輸出:printf(" test good! \n");
在C99中printf原型:
int __cdecl printf(const char * __restrict__ _Format,...)
在使用標準庫和C99環境下,單純改寫fputc還不行,還需要:
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
缺少這個定義,編譯會通過,但在程序跑起來調用printf()會直接死機,可能的原因是程序中有操作或定義過FILE指向,printf無法接受一個指向FILE的正確指針對象。修改后,應用中沒有加#pragma import(__use_no_semihosting)也可以跑起來。
在STM32中,初始化TX輸出模式:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
上一篇:2416開發記錄十二:ioremap
下一篇:STM32->RTC
推薦閱讀
史海拾趣
在XXXX年,CYANLITE公司迎來了一次重要的技術突破。他們成功研發出了一種新型的LED芯片,這種芯片具有更高的發光效率和更長的使用壽命。這一技術的突破使得CYANLITE公司的產品在市場上更具競爭力,公司也借此機會進一步擴大了市場份額。隨著品牌知名度的提升,CYANLITE公司開始拓展國際市場,其產品逐漸出口到歐洲、北美等地區,公司的業績也實現了快速增長。
CYANLITE公司非常重視產品品質的管理和控制。他們建立了嚴格的質量檢測體系,確保每一件產品都符合高標準的質量要求。此外,公司還注重客戶反饋的收集和分析,不斷改進產品和服務以滿足客戶的需求。這種對品質的執著追求使得CYANLITE公司贏得了客戶的信任和忠誠。許多客戶都表示愿意長期與CYANLITE公司合作,并推薦他們的產品給其他人。
CYANLITE公司一直秉持著綠色環保的理念,致力于推廣節能減排的照明產品。他們不僅在產品設計上注重節能和環保,還積極參與各種環保公益活動,向公眾普及LED照明的優勢。這種積極的環保態度使得CYANLITE公司在市場上樹立了良好的形象,也吸引了越來越多的消費者選擇他們的產品。同時,公司還積極與政府部門合作,推動LED照明在公共領域的普及和應用。
在XXXX年,CYANLITE公司迎來了一次重要的技術突破。他們成功研發出了一種新型的LED芯片,這種芯片具有更高的發光效率和更長的使用壽命。這一技術的突破使得CYANLITE公司的產品在市場上更具競爭力,公司也借此機會進一步擴大了市場份額。隨著品牌知名度的提升,CYANLITE公司開始拓展國際市場,其產品逐漸出口到歐洲、北美等地區,公司的業績也實現了快速增長。
隨著技術的成熟和市場的認可,GSR Technology Ltd開始尋求國際合作機會,以進一步擴大其市場影響力。公司與歐洲一家知名雷達制造商達成戰略合作,共同開發面向全球市場的先進GSR系統。這一合作不僅提升了公司的產品競爭力,還為公司打開了歐洲市場的大門。隨后,公司逐步在北美、亞洲等地設立分支機構,實現了全球化布局。
在環保意識日益增強的今天,ACI公司積極響應國家號召,將綠色環保理念融入產品設計和生產過程中。公司采用環保材料和生產工藝,推出了一系列綠色電子產品。這些產品不僅具有優異的性能,而且符合環保標準,得到了消費者的廣泛認可。通過倡導綠色環保理念,ACI成功引領了行業潮流,樹立了良好的企業形象。
DEBUG是DOS中的一個外部命令,從DOS 1.0起就帶有此命令,因此可見此命令的重要性了。雖然此命令的功能非常強大,可以解決許多問題,可是對許多人來說,尤其是初學者來說,卻非常不易掌握。因此,現將DEBUG的命令詳細介紹一番,以讓大家知道它的使用 ...… 查看全部問答∨ |
|
我做的是球賽計時計分器,要求如下: 本系統通過單片機AT89C51芯片來控制LED七段數碼管和矩陣作時間、分數、隊名稱顯示的球賽計時計分系統。本系統具有賽程定時設置、賽程時間暫停、球賽種類的切換、及時刷新甲、乙隊雙方的成績以及賽后成績暫存等 ...… 查看全部問答∨ |
|
本人現需幾個winCE的示例程序,要求EVC4.0開發,內容涉及繪圖、文字顯示、串口通訊以及打印幾個方面,運行環境WinCE,CPU ARM4/ARM41。 若有掌握相關技術的朋友感興趣,請加QQ:575336,工作日白天9:00-17:00在線。 開發周期及費用詳談。… 查看全部問答∨ |
中文字庫數組過大的問題!!!有人提過,但解決是小數組的問題! 每個中文字體結構體定義 typedef struct typFNT_GB16 { unsigned char index[2]; // 漢字內碼索引 unsigned char dot_data[32 ...… 查看全部問答∨ |
我是該版塊的新人,有幾個基礎的問題想請各位前輩指點指點,頂者有分 我的基本情況 1> 對 Visual studio 2003/2005 中vb.net c#.net 相對熟悉 (因為開發過.Net 的項目所以數據也還算熟悉) 2> 熟悉 JSDK2.0 DOS下的java 開發, 也用JBuilder 8.0以下版本開發一些東西,因此對JAVA 算是有一定的基礎 ...… 查看全部問答∨ |
|
以下是輸出比較的一段程序,麻煩各位高手看看哪里出錯了! #include <STM8S105C_S.h> //unsigned int a; void GPIO_Init(void) { PB_DDR=0XFF; PB_CR1=0XFF; PB_CR2=0XFF; } void clock_init(void) { // CLK_ECKR&=0XFE;//關 ...… 查看全部問答∨ |