STM32串口调试printf看不懂代码
淘宝买了一个开发板自己玩(贝一特),开始疯狂移植原子哥的精英版开发板的代码。遇到一些基础的问题,不理解,拿出来问问。
原子里面用串口做了一个USMART模块,名字感觉是USART和SMART结合,效果跟Linux系统敲命令行一样效果,比如ls这里就是list。
问题:用USART1做调试用,我以前的作风是3个步骤(刘洋老师)
1包含头文件#include "stdio.h"
2Keil打钩选择use MicroLIB
3自己写重定向函数
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}
return ch;
}
今天看到原子的源码,提供了另外一个方法,不需要KEIL打钩配合了。
#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((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
上面这串代码啥意思。。。求解答下
跟上面的是一样的,应该MicroLIB 没有semihosting类的函数,使用标准C库里会有这种函数,就添加了这个选项#pragma import(__use_no_semihosting),在网上找打个semihosting的描述如下。
页:
[1]