基于STM32中调试与串口之间的信息传输

基于STM32中调试与串口之间的信息传输,第1张

问题:在使用STM32调试时,经常使用串口发送信息,为了方便调试与串口发送信息,用printf()函数实现通过串口打印信息。

方法一:

1.添加包含printf()函数的头文件:#include “stdio.h”

2.重写 stdio.h 头文件中的 int fputc(int ch, FILE *f) 函数

int fputc(int ch, FILE *f)

{

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

//等待先前的字符发送完成

USART_SendData(USART1, (uint8_t) ch);

//发送字符

return ch;

}

 

//示例函数中使用了USART1来发送消息

//实际情况可以根据硬件板来决定使用哪个串口12345678910

注意:使用while循环先等待先前的字符发送完成,避免造成字符串首字符发送丢失的问题。

3.将该函数” int fputc(int ch, FILE *f) “放在main()函数能够调用到的文件中,KEIL-》OpTIons for Target’xxx’-》Target-》Code GeneraTIon,勾选Use MicroLIB

方法二:

//加入以下代码,支持printf函数,而不需要选择use MicroLIB

#if USART_DEBUG

#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(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)

{}

USART_SendData(USART1,(uint8_t)ch);

return ch;

}

#endif 12345678910111213141516171819202122232425

使用以上任一方法,均可实现printf()函数打印字符串重定义到USART1。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2633128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-11
下一篇 2022-08-11

发表评论

登录后才能评论

评论列表(0条)

保存