分层
通过软件架构可以进行分层,驱动层Driver、接口层Interface、应用层App、公共层Common、用户层,分别创建这几个层级文件夹
调试模块:(涉及到驱动层和公共层)
1 打开Driver文件夹
2 将之前的USART文件直接复制到新项目的Driver文件夹中,记得keil中添加.c和.h文件
STM32 案例计算机和串口通讯及学习方法和重映像printf函数(逻辑查询以及寄存器代码如何书写)_stm32库函数串口代码-CSDN博客
printf函数
printf函数可以用来调试,但是随着代码的增多,为了更加方便,可以用条件编译来进行编辑
1 打开Common文件夹
2 新建两个文件debug.c和debug.h文件,用来调试
debug.h
新拓展:
format------格式化的占位符
...------------定义可变的参数
strrchr------从字符串最右边往左边寻找目标字符,找到后返回目标字符的地址函数
##------------连接前后可以用来省略,
__FILE__--文件路径及其
__LINE__--行号
#ifndef __DEBUG_H__
#define __DEBUG_H__
#include "usart1.h"
#include <stdarg.h>
#include <string.h>
//为了方便调试,定义一个宏进行条件编译
#define DEBUG
#ifdef DEBUG //调试Debug)模式
//从__FILE__中提取文件名
#define FLIENAME (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)
#define dubug_init() Debug_Init()
#define debug_printf(format, ...) printf("[%s:%d]--" format, FLIENAME, __LINE__, ##__VA_ARGS__)
#define debug_printfln(format, ...) printf("[%s:%d]--" format "\r\n", FLIENAME, __LINE__, ##__VA_ARGS__)
#else //发布(Release)模式
#define dubug_init()
#define debug_printf(format,...)
#define debug_printfln(format,...)
#endif
//初始化
void Debug_Init(void);
#endif /* __DEBUG_H__ */
debug.c
#include "debug.h"
void Debug_Init(void){
Usart1_Init();
}
延迟模块:(公共层)
1 打开Common文件夹
2 用之前滴答定时器的两个文件delay.c 和delay.h 放入新建立的Common文件夹中
流程:系统滴答定时器中的装载值LOAD值是向下计数,VAL计数器值清零它会自动装载LOAD值进行向下计数,每过一个时钟VAL减1。配置采用系统时钟源