×
单片机 > 单片机程序设计 > 详情

stm32关于串口输出的几种常用方式

发布时间:2020-06-01 发布时间:
|

在使用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);      

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计