历史上的今天
返回首页

历史上的今天

今天是:2025年06月10日(星期二)

正在发生

2018年06月10日 | STM32输出调试信息-printf重定向到串口

2018-06-10 来源:eefocus

在STM32调试过程中常常需要将调试信息输出到串口,然后通过串口助手查看输出的调试信息。一般来说,串口输出的是指定长度的十六进制字节,对于想打印的调试信息来

说,略显灵活性不足。这时候如果可以将printf重定向到串口输出,则能很好的解决这个问题。

关于printf重定向的方法有很多种,这里只讨论一种我认为相对简单实用的方法。其主要方法步骤如下:

1、配置STM32的串口,确保STM32能输出数据到串口调试助手。

void USART5_Init(void)  

{  

    USART_InitTypeDef USART_InitStructure;  

    GPIO_InitTypeDef GPIO_InitStructure;  

    NVIC_InitTypeDef NVIC_InitStructure;  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO , ENABLE);  

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);  

  

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;  

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

    GPIO_Init(GPIOC, &GPIO_InitStructure);  

  

    // Configure the USART1_Rx as input floating  

    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING ;  

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  

    GPIO_Init(GPIOD, &GPIO_InitStructure);  

  

    NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;  

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;  

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

    NVIC_Init(&NVIC_InitStructure);  

  

    USART_InitStructure.USART_BaudRate = 115200;  

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;  

    USART_InitStructure.USART_StopBits = USART_StopBits_1;  

    USART_InitStructure.USART_Parity = USART_Parity_No;  

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  

  

    USART_ITConfig(UART5, USART_IT_RXNE, ENABLE); //Enable rx enable,   

    USART_ClearFlag(UART5, USART_IT_RXNE);  

    /* Configure the USARTx */   

    USART_Init(UART5, &USART_InitStructure);  

    /* Enable the USARTx */  

    USART_Cmd(UART5, ENABLE);  

}  

2、添加printf头文件#include

3、点击Keil中小魔术棒Target页勾选Use MicroLIB。

注:这个步骤必须有,否则代码编译通过后,进行仿真时会卡住,进入不了Main函数。printf、malloc等标准库函数在工程建立时,不勾选Use MicroLIB就会引起这类问题。

至此,就可以通过printf打印调试信息到串口助手了。

接下来关于输出调试信息再补充两点。

1、printf输出指定长度的字符串。

格式为printf("%.*s\n",strlen,str);

printf("指定长度字符串:%.*s\n",strlen,str);    //打印指令长度字节串 


2、打印十六进制数据。

当我们使用串口调试助手查看输出信息,如果我们查看的数据是十六进制类型,我们会勾选调试助手中的Hex显示选项。这时当数据量很大时,我们可能需要附加一些可见字符的说明,比如英文或者中文,这时在Hex显示下,这些字符辨识度比较低,甚至是乱码,printf辅助打印调试信息目的作用不大。这里可以选择一种方法,电脑串口助手不勾选Hex选项,而将要显示的十六进制数据转为可见的ASCII码格式。

如下为指定长度的十六进制数据转化为字符串的函数:

/********************************************************** 

*函数功能:将十六进制数据转为字符串格式 

*参    数:In,十六进制数据;Len十六进制数据长度 

*          Out,输出字符串 

*返 回 值:无 

**********************************************************/  

void HexToString(char *Out,char *In,char Len){  

    long i;  

    char Temp;  

    for(i=0;i

        Temp = In[i]>>4;  

        if(Temp>9)Out[2*i] = Temp + 'A' - 10;  

        else Out[2*i] = Temp + '0';  

        Temp = In[i] & 0x0F;  

        if(Temp>9)Out[2*i+1] = Temp + 'A' - 10;  

        else Out[2*i+1] = Temp + '0';  

    }  

    Out[2*i] = 0;  

}  

此时再调用printf即可打印出清晰的调试信息:

HexToString(DebugData,(char *)buffer,bufferlen);  

    printf("NTP发送:\n%s\r\n",DebugData); 

以上步骤根据调试成功后的结果总结。

推荐阅读

史海拾趣

Hitachi Chemical Co America Ltd公司的发展小趣事

对于光控电子鸟电路,网友们可能会提出一系列问题,这些问题可能涉及到电路的工作原理、设计细节、故障排查以及改进方法等方面。以下是一些可能的问题及回答:

一、工作原理相关问题

  1. 问题:光控电子鸟是如何实现光控功能的?
    回答:光控电子鸟通过光敏元件(如光敏二极管或光敏电阻器)来实现光控功能。当光线照射到光敏元件上时,其电阻值会发生变化,进而影响电路中的电流和电压,从而控制振荡器的振荡频率,使扬声器发出不同频率的声音来模拟鸟鸣声。

  2. 问题:自激振荡器在光控电子鸟中起什么作用?
    回答:自激振荡器在光控电子鸟中起到产生声音信号的作用。它由晶体管、电容器和电阻器等元件组成,通过R、C的充放电过程模拟鸟儿的鸣叫声。当光敏元件感受到光线变化时,会改变振荡器的振荡频率,从而改变鸟鸣声的特性。

二、设计细节相关问题

  1. 问题:如何选择合适的光敏元件?
    回答:选择合适的光敏元件需要考虑其灵敏度、光谱响应范围以及工作环境等因素。对于光控电子鸟来说,一般选择灵敏度高、光谱响应范围与自然光相近的光敏二极管或光敏电阻器。

  2. 问题:电路中的电容器和电阻器应该如何选择?
    回答:电容器和电阻器的选择需要根据电路的具体要求和性能参数来确定。例如,电容器的选择需要考虑其容量、耐压值以及工作频率等因素;电阻器的选择则需要考虑其阻值、功率以及稳定性等因素。在光控电子鸟电路中,一般选用金属膜电阻器和独石电容器等高质量元件。

三、故障排查相关问题

  1. 问题:如果光控电子鸟不发声怎么办?
    回答:如果光控电子鸟不发声,首先需要检查电源是否正常供电;其次检查光敏元件是否损坏或连接不良;最后检查振荡器电路是否工作正常。可以使用万用表等工具进行逐步排查和测试。

  2. 问题:声音失真或杂音大怎么办?
    回答:声音失真或杂音大可能是由于电路中的元件老化、接触不良或设计不合理等原因造成的。可以尝试更换损坏的元件、重新连接电路或调整电路设计等方法来解决问题。

四、改进方法相关问题

  1. 问题:如何改进光控电子鸟的声音效果?
    回答:改进光控电子鸟的声音效果可以从多个方面入手。例如,可以优化振荡器电路的设计,调整电容器和电阻器的参数以改变声音的特性;可以增加声音处理电路,如滤波器、放大器等,来增强声音的清晰度和响度;还可以采用数字控制技术来实现更复杂的声音效果。

  2. 问题:如何增加光控电子鸟的智能化程度?
    回答:增加光控电子鸟的智能化程度可以通过引入微控制器等智能芯片来实现。微控制器可以根据光敏元件的信号和预设的程序来控制振荡器的振荡频率和声音特性,实现更复杂的声音效果和功能。同时,还可以加入传感器、无线通信模块等元件来扩展光控电子鸟的功能和应用范围。

以上是一些可能的问题及回答,希望能对网友们有所帮助。

Axon' Cable公司的发展小趣事

品质是Axon' Cable公司的生命线。公司始终坚持以客户需求为导向,不断提升产品品质和服务水平。Axon' Cable建立了完善的质量管理体系,并通过了多项国际认证。同时,公司还注重持续改进和创新,不断优化生产流程和提高生产效率。这些努力使得Axon' Cable的产品在品质上始终保持领先地位,赢得了客户的信任和好评。

这些故事虽然无法涵盖Axon' Cable公司发展的全部细节,但试图展现了其在电子行业中的成长轨迹和取得的成就。通过这些故事,我们可以看到Axon' Cable公司凭借其坚定的信念、不懈的努力和创新精神,在电子行业中不断发展壮大,成为了一家具有全球影响力的知名企业。

FILTRONETICS Inc公司的发展小趣事

进入21世纪后,FILTRONETICS意识到全球化市场的重要性,开始积极开拓国际市场。公司加强了与国际客户的沟通与合作,参加了多个国际电子展会,展示了公司的技术和产品。同时,公司还在海外设立了分支机构,以便更好地服务当地客户。通过不懈的努力,FILTRONETICS成功打入多个国际市场,并赢得了众多国际客户的信赖和支持。

Hitachi (Renesas )公司的发展小趣事

随着业务的不断增长,FILTRONETICS意识到单一产品线的局限性,开始着手拓展多元化产品线。公司加大了对新产品研发的投入,陆续推出了单片滤波器、声表滤波器、腔体滤波器、带线滤波器等多种类型的产品,广泛应用于通讯、仪器仪表、商业、工业等多个领域。这些新产品的推出不仅丰富了公司的产品线,也进一步提升了公司的市场竞争力。

Arco Electronics公司的发展小趣事

Arco Electronics公司深知品牌建设对于企业发展的重要性。因此,公司投入大量资源用于品牌建设和市场推广。公司通过与知名企业合作、赞助行业展会等方式提升品牌知名度;同时,还积极运用新媒体进行线上推广,与消费者建立更紧密的联系。这些举措有效地提升了Arco的品牌形象和市场影响力。

Global Mixed-Mode Technology Inc公司的发展小趣事
如果报警灯频繁误报或漏报,可能是由于电路中的元器件损坏、接触不良或设置不当等原因造成的。此时需要检查电路中的元器件是否完好、连接是否牢固以及设置参数是否正确等。如果发现问题需要及时修复或更换损坏的元器件并重新调整设置参数以确保电路的正常工作。同时还需要注意定期对电路进行维护和保养以延长其使用寿命并提高其可靠性。

问答坊 | AI 解惑

bf561 汇编指令集(一)

做个记录 只列出几个例子 Load / Store Load Immediate p3 = 12 (z) ; r0 = -344 (x) ; Load Pointer Register p5 = [ p0 ++ ] ; p2 = [ sp -- ] ; Load Data Register r7 = [i3 ++ m0] ; r1 = [ p0 ++ p1 ] ; r0 = [ i0 ++ ] ; ...…

查看全部问答>

嵌入式设计在变频调速领域的应用

1. 目前国家提倡节能减排,发展低碳经济。变频调速,改善工艺是目前工艺领域节能减排的主要方向。开发制作这些大型的工况设备,嵌入式设计技术应用不可缺少。欢迎大家讨论嵌入式技术在工业领域应用的心得和技巧。…

查看全部问答>

Yokogawa’s New DL850 ScopeCorder

Yokogawa’s New DL850 ScopeCorder Third generation of best-selling combined oscilloscope and data recorder family I had the opportunity to talk with Terry Marrinan, Sales & Marketing Director for Europe & Africa with Yokogawa’s ...…

查看全部问答>

谁对LPC1766芯片有所了解

    最近做毕业设计,要在主芯片为LPC1766的板子上实现以太网通信的功能,谁对这芯片有所了解啊,有中文版的资料就更好了。谢谢…

查看全部问答>

怎么做多片FPGA的仿真?

怎么做多片FPGA的仿真? 例如设计里用两片FPGA ,想做带时延信息的后仿该怎么做?…

查看全部问答>

LED电子显示屏的亮度计算方法

         LED电子显示屏的亮度计算方法: 以全彩屏为例,通常红、绿、蓝白平衡配比为3:4:1   以P16(2R1GB)5000 CD/平方为例:  红色LED 灯亮度:亮度5000(CD)/M2÷点数/M2×0.3(白平衡配比占3 ...…

查看全部问答>

【MSP430周盘点4】三周齐点评,变化颇大

首先,承认错误,小版14日那次点评做LCD and TOUCH BoosterPack去了,然后21日的也漏掉了,导致这次盘点几乎成了月盘点,对不起各位坛友。 3周的变化是很大的,下面开始这次的盘点! 不知道大家有没有注意到MSP430版块新增一位版主qinkaiabc,欢 ...…

查看全部问答>

MSP430-JTAG原理图和物料清单

上传找到的一个,MSP430-JTAG原理图和物料清单。供大家参考啊…

查看全部问答>

学习ARM的疑问

学ARM的体系架构和汇编指令有什么用啊??求指教…

查看全部问答>