与龙共舞 发表于 2018-5-30 16:03:51

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;
}
上面这串代码啥意思。。。求解答下

andeyqi 发表于 2018-5-31 00:07:12

跟上面的是一样的,应该MicroLIB 没有semihosting类的函数,使用标准C库里会有这种函数,就添加了这个选项#pragma import(__use_no_semihosting),在网上找打个semihosting的描述如下。
页: [1]
查看完整版本: STM32串口调试printf看不懂代码