在使用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, ...)
  • #endif1234567891011
  • 以上,可在文件的开始宏定义相关的内容,之后再用使用以下函数进行输出内容。同时在配置相关的串口内容即可使用调试串口。
  • 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);
  • }
  • 复制代码