printf & scanf 在嵌入式系統來說,都是一個非常好用但奢侈的功能,但為了加速開發時程,往往不會希望花太多時間重寫一個這樣的功能,所以最容易的方式就是直接用。當然要使用這兩個函數必須指定要輸出/輸入到哪個地方,而最常被拿來使用的,就是USART了。在Keil上只要設定以下幾個部分: (以下使用Polling方式)
- Use MicroLIB
[Project] -> Options for Target ... -> [Target] -> [Use MicroLIB]
 |
| 圖一 |
- Implement PUTCHAR_PROTOTYPE & GETCHAR_PROTOTYPE
#include <stdio.h>
#define USART_TYPE USART1
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar(void)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif /* __GNUC__ */
// Implement
PUTCHAR_PROTOTYPE
{
/* Write a character to the USART */
USART_SendData(USART_TYPE, (u8) ch);
/* Loop until the end of transmission */
while(USART_GetFlagStatus(USART_TYPE, USART_FLAG_TXE) == RESET);
return ch;
}
GETCHAR_PROTOTYPE
{
/* Loop until the end of receive */
while(USART_GetFlagStatus(USART_TYPE, USART_FLAG_RXNE) == RESET);
/* Read a character to the USART */
return (USART_ReceiveData(USART_TYPE));
}
- 主程式 initial usart & 直接使用printf & scanf
#include<stdio.h>
int main()
{
uint8_t data;
USART_Init(); // 注意,記得要啟動要導向裝置
while(1) {
scanf("%c\n",&data);
printf("Data = %c",data);
}
}
Reference:
[1]
在MDK使用printf&scanf