1.在keil中:
以下函式是在正點原子usart.中的
//加入以下代碼,支持printf函式,而不需要選擇use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//標準庫需要的支持函式
struct __FILE
{
int handle;
};
FILE __stdout;
//定義_sys_exit()以避免使用半主機模式
_sys_exit(int x)
{
x = x;
}
//重定義fputc函式
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//回圈發送,直到發送完畢
USART1->DR = (u8) ch;
return ch;
}
#endif
2.在eclipse中:
但是我在eclipse中發現使用以上方法卻是列印不了,最后使用的解決方法是自寫printf函式,代碼如下:
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
char dat_buf[128]; //自定義輸出大小
int printFormat(const char *fmt ,...)
{
int len;
va_list args; //定義va_list型別變數arg
va_start(args , fmt); //arg初始化,將arg指向第一個可選引數
len = vsprintf(dat_buf, fmt, args);
va_end(args);
HAL_UART_Transmit(&huart1 , (uint8_t*) dat_buf , len , 0xFFFF);
return len;
}
使用時直接呼叫該函式即可,使用格式與printf一致。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/79965.html
標籤:單片機/工控
