历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2019年02月19日 | stm32关于串口输出的几种常用方式

2019-02-19 来源:eefocus

在使用stm32做项目时,我们常常会使用到串口调试,通过串口来输出我们想要看的相关参数值,这样既方便有快捷。 


具体方法有哪些呢,我自己整理了一下,这个也是借鉴别人的用法而已。希望大家可以相互讨论学习。 


1、使用printf语句通过串口输出我们想要的参数值 


具体的用法:使用之前必须包含相应的头文件#include < stdio.h >


int fputc(int ch, FILE *f)//重定向,让printf输出到串口

{

    USART_SendData(USART1, (uint8_t) ch);


    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

    return ch;

}


使用以上函数那必须在stm32在目标选项中必须勾选Use MicroLIB选项。同时当然需要配置stm32串口的相关初始化才可以,这样就可以使用printf函数来进行串口输出。可以实现在VS下编程使用的的printf函数。 


这里写图片描述


2、使用宏定义的方式进行串口输出,其实与printf函数一样的,只是变了种形式而已,很方便的调用所使用的串口。 


具体的用法:使用之前必须包含相应的头文件#include< stdio.h >


// 定义调试串口

#define DEBUG_UART          UART7


// 是否输出调试信息

#define DEBUG_PRINTF


#ifdef DEBUG_PRINTF

#define debug(FORMAT, ...)  printf(FORMAT, ##__VA_ARGS__)

#else

#define debug(FORMAT, ...)

#endif


以上,可在文件的开始宏定义相关的内容,之后再用使用以下函数进行输出内容。同时在配置相关的串口内容即可使用调试串口。


1

int fputc(int ch, FILE *f)//重定向,让printf输出到串口

{

    USART_SendData(DEBUG_UART, (uint8_t) ch);


    while (USART_GetFlagStatus(DEBUG_UART, USART_FLAG_TXE) == RESET);

    return ch;

}


3、使用串口发送单字节或多字的数据


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

 * @函数名称: USARTx_Send_Byte

 * @函数功能: 串口单个字节

 * @输入参数: USARTx: 选择发送数组使用的串口号

 *           byte:  要发送的数组首地址

 * @输出参数: 无

 * @返回值  : 无

 * @其它说明: 无

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

void USARTx_Send_Byte(unsigned char byte) //串口发送一个字节

{

        USART_SendData(USARTx, byte); //通过库函数发送数据

        while( USART_GetFlagStatus(USARTx,USART_FLAG_TC)!= SET);  

        //等待发送完成。  检测 USART_FLAG_TC 是否置1;     

}

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

 * @函数名称: UARTx_Send_Str

 * @函数功能: 串口发送字符串

 * @输入参数: USARTx: 选择发送数组使用的串口号

 *           *s:    要发送的数组首地址指针

 * @输出参数: 无

 * @返回值  : 无

 * @其它说明: 发送字符串函数应用指针方法

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

void UARTx_Send_Str(unsigned char *s)

{

        unsigned char i=0; //定义一个局部变量用来发送字符串

        while(s[i]!='\0') //每个字符串结尾 都是以"\0" 结尾的

        { 

                 /*通过库函数发送数据*/

                USART_SendData(USARTx,s[i]); 

                 /*等待发送完成。检测 USART_FLAG_TC 是否置1*/

                while( USART_GetFlagStatus(USARTx,USART_FLAG_TC)!= SET);  

                i++;   //i++一次

        }

}

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

 * @函数名称: USART_SendArray

 * @函数功能: 串口发送多字节

 * @输入参数: USARTx: 选择发送数组使用的串口号

 *            buf   :要发送的数组首地址

 *            len   :要发送的数组长度

 * @输出参数: 无

 * @返回值  : 无

 * @其它说明: 无

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

void USART_SendArray(USART_TypeDef* USARTx, u8 *buf, u8 len)

{   

  u8 t;

  for(t=0;t

    {

        //等待发送结束        

        while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET){}; 

       //发送数据

        USART_SendData(USARTx,buf[t]); 

    }   

    //等待发送结束     

    while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);      

}


推荐阅读

史海拾趣

AIRPAX公司的发展小趣事

近年来,随着数字化技术的快速发展,AIRPAX也开始积极探索数字化转型之路。公司加大了对智能化、自动化生产线的投入,提高了生产效率和质量。同时,AIRPAX还积极利用大数据、云计算等先进技术,对客户需求和市场趋势进行深入分析,以更好地满足客户需求并推动创新发展。

这些故事只是AIRPAX发展历程中的一部分,它们展示了AIRPAX如何在技术、市场、环保和创新等多个方面取得了显著成就。然而,随着电子行业的不断发展和竞争的加剧,AIRPAX仍需继续努力,以保持其在电气保护领域的领先地位。

Everspin公司的发展小趣事

尽管Everspin在初期经历了亏损,但随着时间的推移,其财务状况逐渐改善。特别是在XXXX年和XXXX年,Everspin的总收入和净利润均实现了显著增长。这一财务表现证明了Everspin在MRAM领域的领先地位和持续盈利能力。

CUI公司的发展小趣事

随着电子行业的发展,CUI技术逐渐融入到整个电子产业链的各个环节中。一些企业通过整合上下游资源,形成了从CUI材料研发、生产到电子产品制造的完整产业链。这种产业链整合不仅提高了企业的运营效率,还降低了生产成本,为企业赢得了更多的市场份额。

博众电气(BOZHONG ELECTRIC)公司的发展小趣事

在快速发展的电子行业,创新能力是企业保持竞争力的关键。博众电气深知这一点,因此始终注重研发团队的建设和新品开发。

公司组建了一支专业的自动化设备开发团队和一流的新品研发技术团队。这些团队成员都拥有丰富的行业经验和深厚的技术功底,能够迅速响应市场需求,开发出具有竞争力的新产品。

在新品开发方面,博众电气始终坚持创新引领、质量至上的原则。公司不断推出具有创新性和实用性的新产品,赢得了客户的广泛认可和好评。

Edsun Laboratories Inc公司的发展小趣事

随着公司规模的扩大和产品线的丰富,ECM Electronics Limited.开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,将产品出口到多个国家和地区。为了更好地服务全球客户,公司还设立了海外办事处和研发中心,加强与国际市场的联系和合作。通过国际化战略的实施,ECM进一步提升了品牌知名度和市场竞争力。

FLEX LTD公司的发展小趣事

在竞争激烈的电子行业中,品质是企业生存和发展的关键。ECM Electronics Limited.深知这一点,始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测、包装等各个环节都严格把关,确保每一件产品都符合高标准的质量要求。正是凭借过硬的产品品质,ECM赢得了客户的信赖和市场的认可。

问答坊 | AI 解惑

wince上下载图片文件并保存

现在我知道网上有个图片的地址,我想用代码实现下载并保存下,有什么方法实现阿…

查看全部问答>

《AlientekSTM32例程手册》28个实验连载--串口实验--整理后

1.注意我们的教材讲解是基于寄存器操作,方便初学者理解透彻, 2.我们另外还提供了该实例的库函数源码,下载链接:https://bbs.eeworld.com.cn/icview-210815-1-1.html 3.此实验的教程在《Alientek STM32不完全手册》的 3.3节:   ...…

查看全部问答>

51最小系统(含原理图和PCB)

51最小系统(含原理图和PCB)…

查看全部问答>

NVIC_SetPriority(SysTick_IRQn, 0x04)

replyreload += \',\' + 1316591;NVIC_SetPriority(SysTick_IRQn, n);n=0x00~0x03  设置Systick为抢占优先级0n=0x04~0x07  设置Systick为抢占优先级1n=0x08~0x0B  设置Systick为抢占优先级2n=0x0C~0x0F   ...…

查看全部问答>

招业余工程师

我公司招业余工程师,不需要到公司,熟悉STM32F10X单片机,CAN通信编程。联系电话:13874216976…

查看全部问答>

g2553与nrf24l01接收端总能检测到载波

暑假期间要做一个5发一收的小玩意,因为以前调过51的24l01,决定移植到2553上,改用spi模块做,按教程一步一步调,发送端调完了,接收端出问题了,只有接收端,检测载波,不管哪个信道,全是有载波,把发送端上电,依旧没有接收,但是一直有载波没 ...…

查看全部问答>

基于ADE7758的功率表

亲爱的各位大神啊,玩过ADE7758的请给支个招呀…

查看全部问答>

[ESP32-Audio-Kit音频开发板测评]五、读一下ID

这个跑起来我觉得比上个还简单,直接找到读ID的例程 然后点向右键头的编译下载,并按住BOOT键,显示下载成功,按RESET键开始运行: …

查看全部问答>

PWM信号读取问题(换方式了麻烦删一下帖子吧)

本帖最后由 凉冰 于 2022-11-9 11:24 编辑 PWM信号读取问题(换方式了麻烦删一下帖子吧) …

查看全部问答>