STM32串口使用Printf()函数问题
2016-08-16 12:10
363 查看
标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数.
例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: 只要自己添加一个int fputc(int ch, FILE *f)函数,能够输出字符就可以了
#if 1
#pragma import(__use_no_semihosting) /* 确保没有从
C 库链接使用半主机的函数 */
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
USART_SendData(USART1,(uint8_t)ch);
return ch;
}
#endif
因printf()之类的函数,使用了半主机模式。使用标准库会导致程序无法运行。
1.
使用微库
,
因为使用微库的话
,
不会使用半主机模式
.
如果使用的是
MDK
,
请在工程属性的
“Target“-
》
”Code Generation“
中勾选
”Use MicroLIB“
这样以后就可以
使用
printf
,
sprintf
函数了
方法
2.
仍然使用标准库
,
在主程序添加下面代码
:
/*
为确保没有从
C
库链接使用半主机的函数,因为不使用半主机,标准
C
库
stdio.h
中有些使用半主机的
函数要重新写
,
您必须为这些函数提供自己的实现
*/
#pragma import(__use_no_semihosting)
//
确保没有从
C
库链接使用半主机的函数
_sys_exit(int
x)
//
定义
_sys_exit()
以避免使用半主机模式
{
x = x;
}
struct __FILE
//
标准库需要的支持函数
{
int handle;
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
在独立应用程序中,您不太可能支持半主机操作。
因此,必须确保您的应用程序中没有链接
C
库半主机
函数。
为确保没有从
C
库链接使用半主机的函数,
必须导入符号
__use_no_semihosting
。
可在您工程的
任何
C
或汇编语言源文件中执行此操作,如下所示:
•
在
C
模块中,使用
#pragma
指令:
#pragma import(__use_no_semihosting)
•
在汇编语言模块中,使用
IMPORT
指令:
IMPORT __use_no_semihosting
如果仍然链接了使用半主机的函数,则链接器会报告错误。
相关文章推荐
- STM32串口使用Printf()函数问题
- 关于在stm32中使用printf函数的问题
- STM32中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
- STM32(MDK)中不能使用printf()函数的问题
- [STM32F10x] 使用printf函数进行串口调试问题
- 怎么解决STM32(MDK)中不能使用printf()函数的问题
- 【stm32】实现STM32的串口数据发送和printf函数重定向
- 【stm32】实现STM32的串口数据发送和printf函数重定向
- STM32 使用printf打印串口信息
- stm32学习笔记----双串口同时打开时的printf()问题
- 怎样在TI stellaris lm3sxxx 程序中使用C语言printf()函数进行串口输出
- 在STM32中使用printf发送字符串到串口
- 嵌入式系统中如何使用printf函数进行串口输出
- STM32中使用printf打印串口数据
- 014:针对mdk中STM32程序无法使用printf,产生停留BEAB BKPT 0xAB处问题的解决(转)
- stm32 使用 printf 串口输出 配置
- 在STM32使用串口printf
- 使用printf函数实现串口信息打印——设置IAR和Keil的Options
- STM32L152RC 在keil4中使用printf()和scanf() 函数
- STM32 printf函数打印到串口(刘凯)