历史上的今天
今天是:2025年06月10日(星期二)
2018年06月10日 | 在STM32中使用printf发送字符串到串口
2018-06-10 来源:eefocus
问题:在使用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来发送消息
//实际情况可以根据硬件板来决定使用哪个串口
注意:使用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
使用以上任一方法,均可实现printf()函数打印字符串重定义到USART1。
上一篇:STM32模拟串口输出偶有乱码
史海拾趣
|
ModBus帧格式为:从机地址(1字节),功能码(1字节),起始地址(2字节),数据长度(2字节),CRC码(2字节) 然后数据传输方式规定为串行异步:1位起始位,8位数据位,1偶校验位,1位停止位。 我的疑问是: 1)CRC只对数据位进行校验,那就是 ...… 查看全部问答> |
|
源代码如下: Private Sub Form_Load() Dim word, meaning As String Open \"words.dat\" For Input Access Read As #1 Do While Not EOF(1) Input #1, word ...… 查看全部问答> |
|
我已经从21号弄到现在了,本来年前想弄一点效果出来,但这几天一直试却实在调不通,所以只好向大家求助了。 我计划做两块电路板之间的无线通讯,用的是149,通讯模块是prt2000。 电路版已做好,板内控制灯等元件都是灵的,但是两块板之间的控一直 ...… 查看全部问答> |
|
这段是复制例程中的,感觉不太对啊,求大家指教。记得书上写的是:SYSCLKOUT 是CAN 模块系统的时钟频率,与CPU 的时钟频率一样,那么对于150 MHz SYSCLKOUT ,CAN 模块系统的时钟频率也应该为150 MHz,那么下面这段的CAN clock是什么意思?又是如何 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 11:39 编辑 放大器具有高 PSRR,就不需担心电源变化? 链接deyisupport./blog/b/signalchain/archive/2013/12/16/psrr.aspx 本人模拟新手,看了这篇文章了解了PSRR和电源的关系,重点了解了规格书中写的DC PS是R ...… 查看全部问答> |




