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

在使用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
以上,可在文件的开始宏定义相关的内容,之后再用使用以下函数进行输出内容。同时在配置相关的串口内容即可使用调试串口。
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<len;t++)//循环发送数据
    {
        //等待发送结束        
        while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET){}; 
       //发送数据
        USART_SendData(USARTx,buf[t]); 
    }   
    //等待发送结束     
    while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);      
}
  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值