历史上的今天
今天是:2024年09月01日(星期日)
2021年09月01日 | STM32—重定向printf和getchar函数到串口
2021-09-01 来源:eefocus
在STM32测试串口的时候经常需要在开发板和上位机之间传输数据,我们可以用c语言中的printf()函数和getchar()函数来简化传输。
以printf()为例:
printf()函数实际上是一个宏,最终调用的是 fputc(int ch,FILE *f)这个函数来执行输出的,所以我们需要修改这个函数,使函数向串口输出,这样当再次引用printf()函数时,printf()就是通过串口向上位机发送数据的一个函数了。
那么如何修改printf()呢?加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。所以我们可以在别的地方定义一个相同名字的函数,而不必也尽量不要修改之前的函数。
修改fputc函数如示:
/* 重定向printf函数 */
int fputc(int ch, FILE *f)
{
USART_SendData( DEBUG_USARTx, (uint8_t) ch);
/* 等待发送完毕 */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);
return ch;
}
修改完成后需要勾选Target设置中的Use Micro LIB选项,MicroLib提供了一个有限的stdio子系统,所以还要再头文件中包含#include getchar()函数也是如此: /* 重定向scanf函数 */ int getc(FILE *f) { /* 等待串口输入数据 */ /* 有了这个等待就不需要在中断中进行了 */ while(USART_GetFlagStatus(DEBUG_USARTx , USART_FLAG_RXNE)==RESET); /* 返回值进行强制类型转换 */ return (int)USART_ReceiveData(DEBUG_USARTx); }
上一篇:STM32—位带操作
史海拾趣
|
本文分析了不断变化的汽车盗窃手段,以及相应的汽车防盗技术的发展,重点介绍了TI最新的汽车防盗解决方案—DST+收发器的加密技术及系统组成,并阐述了与之兼容的新一代射频识别(RFID)技术方案—三维天线模拟前端芯片实现无匙进入的工作原理。 由 ...… 查看全部问答> |
|
如题!谢谢大侠们…… 经过几天的努力,我的无线通信的硬件模块已经调试通过了!谢谢大家的帮助! [ 本帖最后由 zhangzhe0124 于 2009-5-19 10:06 编辑 ]… 查看全部问答> |
|
功率测量模块的设计与实现 (功率测量模块的硬件设计与实现) 要求:以单片机为核心设计一可测量8路功率(1Kw以内)的模块。在该模块中将测量结果用LCD显示,并通过串行接口传送到上位计算机中。请查阅 ...… 查看全部问答> |
|
我按照如下的方法想做一个开机自运行我的应用程序(MyApp.exe),可怎么也不成功.开机后LCD没有显示(黑屏),我查了下WINDOWS目录,其目录下根本没有MyApp.exe.也就是说我的应用程序(MyApp.exe)没有打包进nk. 1. 假定Windows CE.NET目标工程 ...… 查看全部问答> |
|
开发板处理器是PXA270的,现在想在板子上装一个CF无线网卡(NETGEAR MA701),因为板子是自己做的,所以需要修改一下pcmcia的接口驱动。 我是在drivers/pcmcia/pxa2xx_mainstone.c基础上修改的。 现在问题: 1.CF卡在开放板启动起来以后,CF卡上 ...… 查看全部问答> |
|
请教问题:error: linking files for incompatible targets ?? 本帖最后由 dontium 于 2015-1-23 12:43 编辑 我自己建了个工程,单个文件编译可以通过,但是链接后就出现: [Linking...] \\"d:\\\\ti\\\\c5500\\\\cgtools\\\\bin\\\\cl55\\" -@\\"Debug.lkf\\" >> error: linking fi ...… 查看全部问答> |
|
今天做了一上午发现SCI的中断程序怎么也进不去,最后解决是重新翻看了TI的SCI模块手册,发现自己有一个使能位没有做,导致无法识别。 在此记下,也许有人会跟我一样傻 RXFFIENA Receive FIFO interrupt enable0 RX FIFO interrupt based on RXFF ...… 查看全部问答> |
|
今年过年就是不停的玩智能手机,自己手上的iPhone 3G,Google的Nexus和三星的P1010,感觉确实不错,并且开通了微博,包括新浪和腾讯的,不仅仅获取了更多的信息,也推广了公司的信息,尤其是经常用它看看书,把零碎的时间都用起来了。回公司发现 ...… 查看全部问答> |




