创建serial.c serial.h两个文件
主函数
#include "serial.h"
Serial_SendByte('a'); //串口发送一个字母
uint8_t MyArray[] = {0x42, 0x43, 0x44, 0x45};
Serial_SendArray(MyArray, 4); //串口发送一个数组
Serial_SendString("\r\nNum1="); //串口发送字符串
Serial_SendNumber(111, 3); //串口发送数字
Serial_Printf("\r\nNum4=%d", 444); //串口打印字符串,使用自己封装的函数实现printf的效果
Serial_Printf("\r\n");
serial.h
#ifndef __SERIAL_H
#define __SERIAL_H
#include <stdio.h>
/*
Serial_SendByte('a'); //串口发送一个字母
uint8_t MyArray[] = {0x42, 0x43, 0x44, 0x45};
Serial_SendArray(MyArray, 4); //串口发送一个数组
Serial_SendString("\r\nNum1="); //串口发送字符串
Serial_SendNumber(111, 3); //串口发送数字
Serial_Printf("\r\nNum4=%d", 444); //串口打印字符串,使用自己封装的函数实现printf的效果
Serial_Printf("\r\n");
*/
void Serial_SendByte(uint8_t Byte);
void Serial_SendArray(uint8_t *Array,uint16_t Length);
void Serial_SendString(char *String);
void Serial_SendNumber(uint32_t Number, uint8_t Length);
void Serial_Printf(char *format, ...);
#endif
serial.c
#include <stdio.h>
#include <stdarg.h>
#include "usart.h"
void Serial_SendByte(uint8_t Byte){
HAL_UART_Transmit(&huart1,&Byte,1,HAL_MAX_DELAY);
}
void Serial_SendArray(uint8_t *Array,uint16_t Length){
for(uint16_t i=0;i<Length;i++){
Serial_SendByte(Array[i]);
}
}
void Serial_SendString(char *String)
{
uint8_t i;
for (i = 0; String[i] != '\0'; i ++)//遍历字符数组(字符串),遇到字符串结束标志位后停止
{
Serial_SendByte(String[i]); //依次调用Serial_SendByte发送每个字节数据
}
}
uint32_t Serial_Pow(uint32_t X, uint32_t Y)
{
uint32_t Result = 1; //设置结果初值为1
while (Y --) //执行Y次
{
Result *= X; //将X累乘到结果
}
return Result;
}
void Serial_SendNumber(uint32_t Number, uint8_t Length)
{
uint8_t i;
for (i = 0; i < Length; i ++) //根据数字长度遍历数字的每一位
{
Serial_SendByte(Number / Serial_Pow(10, Length - i - 1) % 10 + '0'); //依次调用Serial_SendByte发送每位数字
}
}
void Serial_Printf(char *format, ...)
{
char String[100]; //定义字符数组
va_list arg; //定义可变参数列表数据类型的变量arg
va_start(arg, format); //从format开始,接收参数列表到arg变量
vsprintf(String, format, arg); //使用vsprintf打印格式化字符串和参数列表到字符数组中
va_end(arg); //结束变量arg
Serial_SendString(String); //串口发送字符数组(字符串)
}