打印
[APM32F1]

USART——实现USART格式化输出(printf、USART1Printf)的4种方法

[复制链接]
300|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjh20070904|  楼主 | 2022-4-24 19:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#技术资源#
(涉及到的图片见附件)
该笔记记录了基于APM32F103ZET6mini板上实现格式化输出数据的4种方法,配置总结方法如下:
  
  
包含头文件
Use MicroLib
重定向c库函数
使用半主机
自定义格式化输出函数
直接使用printf
stdio.h
×
×
×
×
自行编写USART1Printf
stdarg.h   
×
×
×
×
1 方法一:printf + Use MicroLIB1.1 配置Keil工程
                              
1.2 在完成好初始化串口的代码上包含头文件、添加代码
#include "stdio.h"
//重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
     USART_TxData(USART1,(char) ch);
     while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);
     return(ch);
}
//重定向c库函数scanf到串口,重写向后可使用scanfgetchar等函数
int fgetc(FILE *f)
{
     while(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET);
     return(int)USART_RxData(USART1);
}
1.3 编写测试代码,连接好串口,现象如下:
测试代码:printf("begin\n\r");
测试现象:
2 方法二:pritnf +  Not Use MicroLib2.1 配置Keil工程
2.2 在完成好初始化串口的代码上包含头文件、添加代码
#include "stdio.h"
#pragma import(__use_no_semihosting) //这条语句可以关闭半主机模式               
//标准库需要的支持函数                 
struct __FILE
{
     inthandle;
};
FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
void _sys_exit(int x)
{
     x = x;
}
//重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
     USART_TxData(USART1,(char) ch);
     while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);
     return(ch);
}
//重定向c库函数scanf到串口,重写向后可使用scanfgetchar等函数
int fgetc(FILE *f)
{
     while(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET);
     return(int)USART_RxData(USART1);
}
2.3 编写测试代码,连接好串口,现象如下:
测试代码:printf("begin\n\r");
测试现象:
3 方法三:自行撰写USART1Printf+ Use MicroLIB3.1 配置Keil工程
3.2 在完成好初始化串口的代码上包含头文件、添加代码
#include <stdarg.h>   
void TP_USART1SendString(char *s)
{
  while (*s!= '\0')
  {
     USART_TxData(USART1,*s);
     while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);   
    s++;  
  }
}
void USART1Printf(char *fmt,...)
{
     __va_listap;
     charstring[400];
     va_start(ap,fmt);
     vsprintf(string,fmt,ap);   
     TP_USART1SendString(string);
     va_end(ap);   
}
3.3 编写测试代码,连接好串口,现象如下:
测试代码:USART1Printf ("begin\n\r");
测试现象:
4 方法四:自行编写USART1Printf+ Not Use MicroLIB4.1 配置Keil工程
4.2 在完成好初始化串口的代码上包含头文件、添加代码
#include <stdarg.h>   
#pragmaimport(__use_no_semihosting) //这条语句可以关闭半主机模式               
//标准库需要的支持函数                 
struct __FILE
{
     inthandle;
};
FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
void _sys_exit(int x)
{
     x = x;
}
void TP_USART1SendString(char *s)
{
  while (*s!= '\0')
  {
     USART_TxData(USART1,*s);
     while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);   
    s++;  
  }
}
4.3 编写测试代码,连接好串口,现象如下:
测试代码:USART1Printf ("begin\n\r");
测试现象:

USART——实现USART格式化输出(printf、USART1Printf)的4种方法.pdf

536.18 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:极海半导体
简介:珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。

29

主题

68

帖子

0

粉丝