当前位置: 首页 > news >正文

STM32标准库开发——串口发送/单字节接收

USART基本结构

在这里插入图片描述

串口发送信息

启动串口一的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

初始化对应串口一的时钟,引脚,将TX引脚设置为复用推挽输出。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);

配置串口一配置寄存器,设置波特率为9600,关闭硬件流控,不使用校验位,数据长度为八字节

USART_InitTypeDef  USART_InitStruct;
USART_InitStruct.USART_BaudRate=9600;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode=USART_Mode_Tx;
USART_InitStruct.USART_Parity=USART_Parity_No;
USART_InitStruct.USART_StopBits=USART_StopBits_1;
USART_InitStruct.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_InitStruct);

封装串口发送字节函数

void Serial_SendByte(uint8_t Byte)
{USART_SendData(USART1,Byte);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)== RESET);	
}

封装串口发送字符串函数

void Serial_SendString(char *String)
{uint8_t i;for (i=0;String[i]!='\0';i++){Serial_SendByte(String[i]);}
}

封装串口发送数组函数

void Serial_SendArray(uint8_t *Array,uint16_t Length)
{uint16_t i;for (i=0;i<Length;i++){Serial_SendByte(Array[i]);}
}

封装串口发送数字函数

uint32_t Serial_Pow(uint32_t x, uint32_t y)
{uint32_t Result = 1;while(y--){Result *= 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);}
}

进阶一:重定向print输出到串口中

/*fputc是print函数的底层所以,修改底层文件就能将print输出重定向到串口。
*/
int fputc(int ch, FILE  *f)
{Serial_SendByte(ch);return ch;
}

进阶二:封装Serial_Sprintf完成串口输出功能

/*
char String[100];
sprintf(String,"Num=%d\r\n",666)
Serial_SendString(String);
等价于以下这行代码
printf("Num=%d\r\n",666)
*/
void Serial_Printf(char *format, ...)
{char String[100];va_list arg;va_start(arg,format);vsprintf(String,format,arg);va_end(arg);Serial_SendString(String);
}

注意:
①发送和接受均不需要手动清除发送或接收标志位,因为当发送字节或者读取字节内容时,硬件会自动清0
②Serial_Printf(“串口输出也支持中文输出”);
当编码格式为 UTF-8时才需要配置参数 --no-multibyte-chars
当编码格式为GB2312时则不需要配置参数

http://www.lryc.cn/news/286538.html

相关文章:

  • jdk17新特性——文本块(即多行的字符串)增强
  • 阿里云ECS使用docker搭建mysql服务
  • Windows给docker设置阿里源
  • 安裝火狐和穀歌流覽器插件FoxyProxy管理海外動態IP代理
  • C++重新入门-函数重载
  • niushop靶场漏洞查找-文件上传漏洞等(超详细)
  • Bit Extraction and Bootstrapping for BGV/BFV
  • 七八分钟快速用k8s部署springboot前后端分离项目
  • 中移(苏州)软件技术有限公司面试问题与解答(2)—— Linux内核内存初始化的完整流程1
  • 蓝桥杯、编程考级、NOC、全国青少年信息素养大赛—scratch列表考点
  • 1.23 力扣图论
  • Vue学习笔记9--vuex(专门在Vue中实现集中式状态(数据)管理的一个Vue插件)
  • Operation
  • Kong关键概念 - 服务(Services)
  • IDEA更改页面不重启
  • golang学习-channel管道
  • oracle 12 查询数据库锁
  • 【LeetCode-135】分发糖果(贪心)
  • 5G_射频测试_发射机测量(四)
  • MySQL经典50题
  • 常用的Qt开源库分享
  • Unity开发授权系统
  • 一周时间,开发了一款封面图生成工具
  • 【.NET Core】深入理解异步编程模型(APM)
  • pyqtgraph绘图类
  • C#6-10新增的内容
  • 【立创EDA-PCB设计基础】3.网络表概念解读+板框绘制
  • 在Python环境中运行R语言的配环境实用教程
  • 2023年总结我所经历的技术大变革
  • 基于YOLOv7算法的高精度实时车载摄像头下车辆检测系统(PyTorch+Pyside6+YOLOv7)