网站首页 > 技术文章 正文
在使用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);
}
猜你喜欢
- 2024-10-12 STM32单片机-多串口printf()问题与ASCII码解析
- 2024-10-12 stm32F0 串口的几个特殊功能 stm32f1串口引脚
- 2024-10-12 STM32串口发送用哪个中断? stm32f4串口发送数据
- 2024-10-12 STM32F103编程学习——USB虚拟串口篇
- 2024-10-12 STM32F4入坑日记——串口发送数据(非中断)
- 2024-10-12 STM32 HAL库串口中断发送过程 stm32f4串口中断
- 2024-10-12 在货物监控设备研发时,STM32串口第一个字节丢失解怎么解决?
- 2024-10-12 STM32单片机采用环形缓冲区实现串口中断数据接收管理
- 2024-10-12 基于STM32的串口与DMA的完美组合(上)
- 2024-10-12 STM32下载程序新思路--使用串口下载STM32程序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)