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

stm32 串口发送和接收

串口发送

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>//初始化串口
void Serial_Init()
{//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);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);USART_InitTypeDef USART_InitStruct;USART_InitStruct.USART_BaudRate=9600;//波特率USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制USART_InitStruct.USART_Mode=USART_Mode_Tx;//Tx发送模式 Rx 接受模式USART_InitStruct.USART_Parity=USART_Parity_No;//校验位USART_InitStruct.USART_StopBits=USART_StopBits_1;//停止位USART_InitStruct.USART_WordLength=USART_WordLength_8b;//8位USART_Init(USART1,&USART_InitStruct);USART_Cmd(USART1,ENABLE);
}
//发送一个字节
void Serial_SendByte(uint8_t Byte){USART_SendData(USART1,Byte);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);}
//发送一个数组
void Serial_SendArray(uint8_t *Array, uint16_t Length){uint16_t i;for (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]);}
}
//数字计算
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 + '0');}
}
//封装printf
int fputc(int ch, FILE *f)
{Serial_SendByte(ch);return ch;
}
//可变参数
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);
}

收发

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>uint8_t Serial_RxData;uint8_t Serial_RxFlag;
//初始化串口
void Serial_Init()
{//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);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);GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_10 ;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);USART_InitTypeDef USART_InitStruct;USART_InitStruct.USART_BaudRate=9600;//波特率USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制USART_InitStruct.USART_Mode=USART_Mode_Tx | USART_Mode_Rx;//Tx发送模式 Rx 接受模式USART_InitStruct.USART_Parity=USART_Parity_No;//校验位USART_InitStruct.USART_StopBits=USART_StopBits_1;//停止位USART_InitStruct.USART_WordLength=USART_WordLength_8b;//8位USART_Init(USART1,&USART_InitStruct);USART_ITConfig(USART1,USART_IT_TXE,ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct);USART_Cmd(USART1,ENABLE);
}
//发送一个字节
void Serial_SendByte(uint8_t Byte){USART_SendData(USART1,Byte);while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);}
//发送一个数组
void Serial_SendArray(uint8_t *Array, uint16_t Length){uint16_t i;for (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]);}
}
//数字计算
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 + '0');}
}
//封装printf
int fputc(int ch, FILE *f)
{Serial_SendByte(ch);return ch;
}
//可变参数
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);
}uint8_t Serial_GetRxFlag(void)
{if (Serial_RxFlag==1){Serial_RxFlag=0;return 1;}return 0;
}uint8_t Serial_GetRxData(void)
{return Serial_RxData;
}void USART1_IRQHandler(void)  
{if (USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET){Serial_RxData = USART_ReceiveData(USART1);Serial_RxFlag =1;USART_ClearITPendingBit(USART1,USART_IT_RXNE);}
}
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"uint8_t RxData;int main(void)
{OLED_Init();OLED_ShowString(1,1,"RxData");Serial_Init();while (1){if(Serial_GetRxFlag()==1){RxData = Serial_GetRxData();Serial_SendByte(RxData);OLED_ShowHexNum(1,8,RxData,2);}}
}

相关文章:

stm32 串口发送和接收

串口发送 #include "stm32f10x.h" // Device header #include <stdio.h> #include <stdarg.h>//初始化串口 void Serial_Init() {//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Pe…...

Vite + Vue3 实现前端项目工程化

通过官方脚手架初始化项目 第一种方式&#xff0c;这是使用vite命令创建&#xff0c;这种方式除了可以创建vue项目&#xff0c;还可以创建其他类型的项目&#xff0c;比如react项目 npm init vitelatest 第二种方式&#xff0c;这种方式是vite专门为vue做的配置&#xff0c;…...

Java动态代理Aop的好处

1. 预备知识-动态代理 1.1 什么是动态代理 动态代理利用Java的反射技术(Java Reflection)生成字节码&#xff0c;在运行时创建一个实现某些给定接口的新类&#xff08;也称"动态代理类"&#xff09;及其实例。 1.2 动态代理的优势 动态代理的优势是实现无侵入式的代…...

各种存储性能瓶颈如何分析与优化?

【摘要】本文结合实践剖析存储系统的架构及运行原理&#xff0c;深入分析各种存储性能瓶颈场景&#xff0c;并提出相应的性能优化手段&#xff0c;希望对同行有一定的借鉴和参考价值。 【作者】陈萍春&#xff0c;现就职于保险行业&#xff0c;拥有多年的系统、存储以及数据备…...

Android StateFlow初探

Android StateFlow初探 前言&#xff1a; 最近在学习StateFlow&#xff0c;感觉很好用&#xff0c;也很神奇&#xff0c;于是记录了一下. 1.简介&#xff1a; StateFlow 是一个状态容器式可观察数据流&#xff0c;可以向其收集器发出当前状态更新和新状态更新。还可通过其 …...

Docker Compose初使用

简介 Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是 工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#xff09;以及容器&#xff08;cont…...

测试与FastAPI应用数据之间的差异

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 当使用两个不同的异步会话来测试FastAPI应用程序与数据库的连接时&#xff0c;可能会出现以下错误&#xff1a; 在测试中&#xff0c;在数据库中创建了一个对象&#x…...

WebStorm 2023年下载、安装教程、亲测有效

文章目录 简介安装步骤常用快捷键 简介 WebStorm 是JetBrains公司旗下一款JavaScript 开发工具。已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源&#xff0c;继承了IntelliJ IDEA强大的JS部分的…...

k8s储存卷

卷的类型 In-Tree存储卷插件 ◼ 临时存储卷 ◆emptyDir ◼ 节点本地存储卷 ◆hostPath, local ◼ 网络存储卷 ◆文件系统&#xff1a;NFS、GlusterFS、CephFS和Cinder ◆块设备&#xff1a;iSCSI、FC、RBD和vSphereVolume ◆存储平台&#xff1a;Quobyte、PortworxVolume、Sto…...

【解决Win】“ 无法打开某exe提示无法成功完成操作,因为文件包含病毒或潜在的垃圾软件“

在下载某个应用程序&#xff0c;打开时出现了“无法成功完成操作因为文件包含病毒或潜在垃圾”的提示&#xff0c;遇到这个情况怎么解决&#xff1f; 下面为大家分享故障原因及具体的处理方法。 故障原因 是由于杀毒 防护等原因引起的。 解决方案 打开Windows 安全中心 选择…...

SpringBoot调用ChatGPT-API实现智能对话

目录 一、说明 二、代码 2.1、对话测试 2.2、单次对话 2.3、连续对话 2.4、AI绘画 一、说明 我们在登录chatgpt官网进行对话是不收费的&#xff0c;但需要魔法。在调用官网的API时&#xff0c;在代码层面上使用&#xff0c;通过API KEY进行对话是收费的&#xff0c;不过刚…...

element-table出现错位解决方法

先看示例图&#xff0c;这个在开发中还是很常遇到的&#xff0c;在table切换不同数据时或者切换页面时&#xff0c;容易出现&#xff1a; 解决方法很简单&#xff0c;官方有提供方法&#xff1a; 我们可以在重新渲染数据后&#xff1a; this.$nextTick(() > {this.$refs.…...

DC电源模块具有不同的安装方式和安全规范

BOSHIDA DC电源模块具有不同的安装方式和安全规范 DC电源模块是将低压直流电转换为需要的输出电压的装置。它们广泛应用于各种领域和行业&#xff0c;如通信、医疗、工业、家用电器等。安装DC电源模块应严格按照相关的安全规范进行&#xff0c;以确保其正常运行和安全使用。 D…...

zabbix自定义监控、钉钉、邮箱报警

目录 一、实验准备 二、安装 三、添加监控对象 四、添加自定义监控项 五、监控mariadb 1、添加模版查看要求 2、安装mariadb、创建用户 3、创建用户文件 4、修改监控模版 5、在上述文件中配置路径 6、重启zabbix-agent验证 六、监控NGINX 1、安装NGINX&#xff0c…...

短信、邮箱验证码本地可以,部署到服务器接口却不能使用

应对公司双验证要求&#xff0c;对本系统做邮箱、短信验证码登录&#xff0c;本地开发正常发送&#xff0c;到服务器上部署却使用失败&#xff0c;已全部解决&#xff0c;记录坑。 一、nginx拦截 先打开你的服务器 nginx.conf 看看有没有做接口拦截。&#xff08;本地可能做Sp…...

Java web基础知识

Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet &#xff0c;一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做&#xff0c;Servlet 初步…...

【Linux学习】01Linux初识与安装

Linux&#xff08;B站黑马&#xff09;学习笔记 01Linux初识与安装 文章目录 Linux&#xff08;B站黑马&#xff09;学习笔记前言01Linux初识与安装操作系统简述Linux初识虚拟机介绍安装VMware Workstation虚拟化软件VMware中安装CentOS7 Linux操作系统下载CentOS操作系统VMwa…...

android 将数据库中的 BLOB 对象动态加载为 XML,并设置到 Android Activity 的内容视图上

以下是一个示例代码,演示如何将数据库中的 BLOB 对象动态加载为 XML,并设置到 Android Activity 的内容视图上: ```java import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import and…...

Android12之强弱智能指针sp/wp循环引用死锁问题(一百六十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...

springboot自定义Json序列化返回,实现自动转换字典值

自定义序列化 原理 当你使用Spring Boot的Spring Data或者Spring MVC等组件来处理JSON序列化时&#xff0c;Spring框架会在需要将Java对象转换为JSON字符串时调用JsonSerializer。这通常发生在控制器方法返回JSON响应时&#xff0c;或者在将对象保存到数据库等操作中。 // 注册…...

HP-Socket创新项目原型迭代记录:变更、原因与效果

HP-Socket创新项目原型迭代记录&#xff1a;变更、原因与效果 【免费下载链接】HP-Socket High Performance TCP/UDP/HTTP Communication Component 项目地址: https://gitcode.com/gh_mirrors/hp/HP-Socket HP-Socket作为一款高性能TCP/UDP/HTTP通信组件&#xff0c;其…...

三极管基极下拉电阻在高速电路中的关键作用解析

1. 三极管基极下拉电阻的基础认知 第一次接触三极管电路时&#xff0c;我和很多新手一样&#xff0c;对基极那个看似多余的下拉电阻充满疑惑。明明没有它电路也能工作&#xff0c;为什么工程师们总爱画蛇添足&#xff1f;直到有次调试电机驱动电路&#xff0c;三极管莫名其妙地…...

Sqoop性能调优之 --fetch-size:小参数,大作用

Sqoop性能调优之 --fetch-size&#xff1a;小参数&#xff0c;大作用1. 引言&#xff1a;被忽视的"隐形冠军"2. 什么是 --fetch-size&#xff1f;2.1 基本定义2.2 核心作用3. 底层原理&#xff1a;从逐行到批量3.1 没有 --fetch-size 的情况&#xff08;逐行读取&…...

无人机远程识别系统的技术突破与实践指南

无人机远程识别系统的技术突破与实践指南 【免费下载链接】ArduRemoteID RemoteID support using OpenDroneID 项目地址: https://gitcode.com/gh_mirrors/ar/ArduRemoteID 随着无人机技术的快速发展&#xff0c;全球范围内对无人机安全监管的要求日益严格。各国 aviati…...

实战指南:用快马为django项目生成定制化vmware开发环境,开箱即用

实战指南&#xff1a;用快马为Django项目生成定制化VMware开发环境&#xff0c;开箱即用 在实际开发场景中&#xff0c;虚拟机环境需要与具体项目需求紧密结合。最近我在做一个Django项目时&#xff0c;发现每次换电脑或重装系统都要重新配置开发环境&#xff0c;特别浪费时间…...

I-Lang SEO实战部署:用结构化协议让Google的AI爬虫读懂你的网页

前言&#xff1a; 我们用I-Lang的结构化方法论做SEO&#xff0c;一个全新的英文商业站&#xff0c;七天打进Google搜索第一页。这篇文章把具体方法公开。 一、前提&#xff1a;Google的爬虫已经是AI了 2024年之后&#xff0c;Google的搜索排名算法发生了根本性变化。Googlebot…...

编写程序实现智能鱼竿鱼线拉力检测,拉力超标提示“小心断线”。

&#x1f3a3; 项目实战&#xff1a;基于应变片的智能鱼竿拉力监测系统一、实际应用场景描述 (Scenario)在海钓或路亚钓法中&#xff0c;鱼竿的调性&#xff08;Action&#xff09;和钓线的磅数&#xff08;LB&#xff09;至关重要。新手往往凭感觉遛鱼&#xff0c;当大鱼突然发…...

高效解析快递地址:Java实现智能识别省市区与楼栋单元户室

1. 快递地址解析的痛点与Java解决方案 每天处理成千上万的快递地址是电商和物流企业最头疼的问题之一。我见过太多这样的场景&#xff1a;客服人员手动复制粘贴地址信息&#xff0c;运营团队熬夜整理Excel表格&#xff0c;配送系统因为地址格式混乱而频频出错。这些问题的根源都…...

36 Python 时序和文本:中文文本处理入门:为什么要先做分词和停用词过滤?

中文文本处理入门&#xff1a;为什么要先做分词和停用词过滤&#xff1f; 刚接触文本分析时&#xff0c;很多人都会有一个疑问&#xff1a; 文本明明已经有内容了&#xff0c;为什么不能直接拿去做分类、聚类或者情感分析&#xff1f; 这个问题其实正好指向了文本挖掘里最基础、…...

别再只会调库了!用NumPy和Random手搓一个SMOTE算法,我踩过的坑都在这了

从零实现SMOTE算法&#xff1a;NumPy实战与关键问题解析 理解类别不平衡问题的本质 在数据科学和机器学习领域&#xff0c;我们经常会遇到类别分布严重不均衡的数据集。想象一下&#xff0c;你正在处理一个信用卡欺诈检测项目&#xff0c;正常交易记录可能有数百万条&#xff0…...