缘由

因为我在网上发现很多的相关代码的偶联性太大了,所以就有了分享一些独立模块的操作代码的想法。
事不宜迟,我们开始吧。

1.UART 串口通信

对于串口通信,我们通常用来调试代码是否正确,就用串口来调解的。于是,我想分享一个可以快速调节的代码,来帮助各位更好地调试自己的代码,我是用的是uart1,芯片是stm32f103c8t6的,对应的引脚是PB9,PB10。

1.UART 头文件

我是将这些自定义的模块分开包装实现独立模块化,于是我建立一个单独的文件夹(Hardware)来放自己建立的独立模块。

然后我定义的这个模块名字叫”Debug”—-可以按照自己喜欢的方式定义,没有影响。

1
2
3
4
5
6
7
8
9
10
#ifndef __DEBUG_H__
#define __DEBUG_H__

#include "main.h" /*这个是为了引入cubemx在main.h帮我们定义的一些文件,于是我们就不用重复定义了*/

#define DEBUG_EN 1 //这个是为了解开在Debug.c的文件中DEBUG_EN 这个和我命名的文件无关哈
void My_Printf(char *p,...); //就是类似于printf

#endif

2.UART 源文件

具体的代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "Debug.h"  //引入自己的头文件,避免重复定义
#include <stdarg.h>
#include <stdio.h> //为了引入格式化操作
#include <string.h>

extern UART_HandleTypeDef huart1;//进行外部声明

//格式化可变变量字符串缓存 这里我们给的缓存大一点好些,防止溢出
char formatBuf[128];

void My_printf(char *p,...)
{
/*格式化数据*/
va_list ap;
va_start(ap,p);
vsprintf(formatBuf,p,ap);
va_end(ap);

#ifdef DEBUG_EN
HAL_UART_Transmit(&huart1,(uint8_t *)formatBuf,strlen(formatBuf),1);
#endif
}

致谢

你好