上海社区网站建设/性价比高seo排名

上海社区网站建设,性价比高seo排名,做网站改字号代码,彭阳县城乡与住房建设局网站目录 一:USART简介 二:初始化USART 1.开启时钟 2.代码 三:USART发送数据 1.USART发送数据函数 2.获取标志位的状态 3.代码 4.在main.c内调用 5.串口调试 1.串口选择要与设备管理器中的端口保持一致 2.波特率、停止位等要与前面…

目录

一:USART简介

二:初始化USART

1.开启时钟 

2.代码 

三:USART发送数据

1.USART发送数据函数

2.获取标志位的状态

3.代码 

4.在main.c内调用 

 5.串口调试

1.串口选择要与设备管理器中的端口保持一致

 2.波特率、停止位等要与前面USART设置的一致

6.结果

7.ASCLL码值表

四:USART发送数组

1.代码

2.显示结果

五:USART发送字符串 

1.代码

2.结果

六: 调用SendNumber发送数字的每一位

1.数字拆分

2.代码

3.结果 

七:Printf函数的移值方法

1.勾上MicroLIB

  2.对printf进行重定向

3.乱码解决方案


 

一:USART简介

  • USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是STM32微控制器内部集成的一个硬件外设,用于串行数据通信。它能够根据数据寄存器中的一个字节数据自动生成数据帧时序,并通过TX引脚发送出去,同时也可以自动接收RX引脚的数据帧时序,将其拼接成一个字节数据并存放在数据寄存器中。

  • 可配置数据位长度(8/9需要校验位就是9位),停止位长度(0.5/1/1.5/2)

  • 可选校验位:无校验,奇校验,偶校验

  • 引脚:TX、RX(TX引脚输出定时器翻转的高低电平,RX定时读取引脚的高低电平)

  • 全双工(双方都可以进行通信)

  • STM32F103C8T6 USART资源:USART1,USART2,USART3

初始化完成之后,如果要发送数据,调用一个发送函数就行了。如果要接收数据,发送一个接收函数就好了。如果燕获取发送和接收的状态,就调用获取标志位的函数。

函数

  • void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);写DR寄存器

    uint16_t USART_ReceiveData(USART_TypeDef* USARTx);读DR寄存器

二:初始化USART

  • 第一步:开启时钟,把需要的USART和GPIO的时钟打开

  • 第二步:GPIO初始化,把TX配置成复用输出,RX配置成输入

  • 第三步:配置USART,直接使用一个结构体

  • 第四步:如果只需要一个发送功能,只需要把USART直接开启就好了,初始化结束。如果需要中断功能,就要在开启USART之前,再加上Config和NVIC的代码。

1.开启时钟 

由STM32引脚定义可知,USART1_TX对应的是PA9,USART1_RX对应的是PA10,所以要给GPIOA的端口使能

由图可知,USART和GPIOA口都在ABP2总线上,所以给ABP2时钟使能

2.代码 

//开启USART和GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//GPIO初始化GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //配置USARTUSART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600;//波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位USART_InitStructure.USART_Parity = USART_Parity_No; //校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制USART_InitStructure.USART_Mode = USART_Mode_Tx;//输出端口USART_Init(USART1, &USART_InitStructure); //使能USARTUSART_Cmd(USART1, ENABLE);

三:USART发送数据

1.USART发送数据函数

  • 函数名:USART_ SendData 
  • 功能描述:通过外设USARTx发送单个数据
  • 输入参数1:USARTxx可以是12或者3,来选择USART外设
  • 输入参数二:Data: 待发送的数据
  • 函数原型:void USART_SendData(USART_TypeDef* USARTx, u8 Data)

2.获取标志位的状态

  • 函数名:USART_ GetFlagStatus
  • 功能描述:检查指定的USART标志位设置与否
  • 输入参数1:SARTxx可以是12或者3,来选择USART外设
  • 输入参数2:USART_FLAG:待检查的USART标志位
  • 下图是参数2可取的值
  • 相关状态的描述

 

3.代码 

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

4.在main.c内调用 

//初始化串口Serial_Init();//用串口发送一个0x41Serial_SendByte(0x41);

 5.串口调试

1.串口选择要与设备管理器中的端口保持一致

 

 

 2.波特率、停止位等要与前面USART设置的一致

6.结果

我们一开始显示的是字符串的形式

如果想显示16进制,就勾上“16进制显示”,就出现41

 

7.ASCLL码值表

 

四:USART发送数组

1.代码

void Serial_SendArray(uint8_t *Array,uint16_t Length)
{uint16_t i;for(i=0;i<Length;i++){Serial_SendByte(Array[i]);//调用发送数据函数}
}

主函数调用

uint8_t MyArray[]={0x40,0x41,0x42,0x43};Serial_SendArray(MyArray,4);

2.显示结果

五:USART发送字符串 

注意:“\0”是字符串结束的标志位,'\r''\n'换行

1.代码

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

主函数调用

Serial_SendSrting("HelloWord!\r\n");

 

2.结果

六: 调用SendNumber发送数字的每一位

1.数字拆分

取某一位就是,数字/(10^x)%10(其中x=数字的位数-1,比如数字是三位的,则x取2),列如:取123的1,就用123/10^2%10 余数就为1

2.代码

//次方函数 x的Y次方
uint32_t Serial_Pow(uint32_t X,uint32_t Y)
{int 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-1-i)%10+'0');//'0'是加一个偏移}
}

主函数调用

Serial_SendNumber(12345,5);

3.结果 

 

七:Printf函数的移值方法

1.勾上MicroLIB

  2.对printf进行重定向

  • 在串口模块里最开始加上#include <stdio.h>
  • 再重写fputc函数:int fputc(int ch,FILE *f)
  • 在函数里面,把fputc重定向到串口,就是Serial_SendByte(ch)
  • 最后return ch;
  • 原理:因为fputv是printf的底层,printf函数在打印的时候,就是不断调用fputc函数一个个打印的,把fputc函数重定向到串口,printf就输出到端口了。
  • 代码
    int fputc(int ch,FILE *f)
    {Serial_SendByte(ch);return ch;
    }

    3.乱码解决方案

第一种:因为我们Keil5汉字编写格式选的是UTF8,所以最终串口也得选择UTF8

第二种:切换为GB2312编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的在线骑行网站的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

通义万相2.1:开启视频生成新时代

文章摘要&#xff1a;通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具&#xff0c;它通过核心技术的升级和创新&#xff0c;为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍&#xff1a;使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径&#xff0c;之后一直点“下一步”直到完成 2 添加元器件 点击元…

极狐GitLab 正式发布安全版本17.9.1、17.8.4、17.7.6

本分分享极狐GitLab 补丁版本 17.9.1、17.8.4、17.7.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…

QT——对象树

在上一篇博客我们已经学会了QT的坏境安装以及打印一个hello world&#xff0c;但是如果有细心的朋友看了代码&#xff0c;就会发现有一个严重的问题&#xff0c;从C语法看来存在内存泄漏。 上面的代码实际上并没有发送内存泄漏&#xff0c;是不是觉得有点奇怪&#xff1f;大家有…

深度学习之-“深入理解梯度下降”

梯度下降是机器学习和深度学习的核心优化算法&#xff0c;几乎所有的模型训练都离不开它。然而&#xff0c;梯度下降并不是一个单一的算法&#xff0c;而是一个庞大的家族&#xff0c;包含了许多变体和改进方法。本文将从最基础的梯度下降开始&#xff0c;逐步深入学习&#xf…

力扣-字符串

字符串不能被修改&#xff0c;所以如果有想修改字符串的行为&#xff0c;需要转换为StringBuilder StringBuilder里也有很多封装方法String没有&#xff0c;比如reverse() StringBuilder sb new StringBuilder();// 添加字符串 sb.append("Hello"); sb.append(&qu…

Ollama+Deepseek-R1+Continue本地集成VScode

一、OllamaDeepseek-R1Continue本地集成VScode 1&#xff09;安装前知识点 Continue 介绍 详情可参照官网&#xff1a; continue官网 Continue 是 Visual Studio Code 和 JetBrains 中领先的开源 AI 代码助手。 •在侧边栏中进行聊天以理解和迭代代码。 •自动补全&#…

风虎云龙R87与RH87八卡服务器震撼首发

在科技迅猛发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;领域正以前所未有的速度改变着世界。从内容创作的智能化&#xff0c;到智能客服的广泛应用&#xff0c;AI技术已经深入到我们生活的方方面面。而这一切的背后&#xff0c;都离不开高性能算力设备的强大支撑…

18.分布式任务调度

固定的时间点去执行固定的任务&#xff0c;这就是任务调度。

Element UI-Select选择器结合树形控件终极版

Element UI Select选择器控件结合树形控件实现单选和多选&#xff0c;并且通过v-model的方式实现节点的双向绑定&#xff0c;封装成vue组件&#xff0c;文件名为electricity-meter-tree.vue&#xff0c;其代码如下&#xff1a; <template><div><el-select:valu…

系统盘还原成正常U盘

选择格式化,等格式化完毕就完了 点击还原设备的默认值格式化就完了

Linux系统下安装配置 Nginx 超详细图文教程_linux安装nginx

#安装当前路径下所有安装包 rpm -Uvh *.rpm --nodeps --force2.2、安装Nginx 找到Nginx的安装包进行解压 #解压安装包 tar -zxvf nginx-1.24.0.tar.gz进入解压之后的nginx目录下&#xff1a; #进入nginx目录 cd /usr/local/nginx-1.24.0执行配置脚本&#xff0c;–prefix是指…

如何排查服务器内存泄漏问题

服务器内存泄漏是一种常见的问题&#xff0c;可能导致系统性能下降甚至系统崩溃。以下是一般情况下用于排查服务器内存泄漏问题的步骤&#xff1a; 排查服务器内存泄漏问题的步骤&#xff1a; 监控系统资源&#xff1a; 使用系统监控工具&#xff08;如top、htop、free&#x…

山东大学计算机科学与技术学院软件工程实验日志

--- Author: "Inori_333" Date: 2025-03-04 --- 实验一 团队建立、阅读开源软件 1.队伍创建与分工 队伍最终确定由5人组成&#xff0c;小组成员之间进行了高效的沟通&#xff0c;并确定了各自的负责的部分内容。 2.代码复现与分析 写在前面&#xff1a;由于“…

mybatis映射文件相关的知识点总结

mybatis映射文件相关的知识点总结 mybatis官网地址 英文版&#xff1a;https://mybatis.org/mybatis-3/index.html 中文版&#xff1a;https://mybatis.p2hp.com/ 搭建环境 /* SQLyog Ultimate v10.00 Beta1 MySQL - 8.0.30 : Database - mybatis-label *****************…

SQLAlchemy系列教程:SQLAlchemy快速入门示例项目

SQLAlchemy是与数据库交互的Python开发人员不可或缺的库。这个强大的ORM允许使用python结构进行简单的数据库操作。设置过程很简单&#xff0c;并且允许可扩展的数据库应用程序开发。本文通过入门项目完整介绍SQLAlchemy的应用过程&#xff0c;包括安装依赖包&#xff0c;创建连…

HTML + CSS 题目

1.说说你对盒子模型的理解? 一、是什么 对一个文档进行布局的时候&#xff0c;浏览器渲染引擎会根据标准之一的css基础盒模型&#xff0c;将所有元素表示为一个个矩形的盒子。 一个盒子由四个部分组成: content&#xff0c;padding&#xff0c;border&#xff0c;margin 下…

el-table 手动选择展示列

需求&#xff1a; 由于表格的列过多,用滚动条进行滚动对比数据不方便&#xff0c;所以提出&#xff0c;手动选择展示列 实现思路&#xff1a; 表格默认展示所有字段&#xff0c;每个字段通过 v-if 属性来进行判断是否显示&#xff1b;点击设置按钮图标(表格右上角&#xff0…

家政预约小程序用例图分析

在和客户进行需求沟通的时候&#xff0c;除了使用常规的问答的形式&#xff0c;我还使用图形化工具更深入的沟通。比如借助UML的用例图来开展系统分析&#xff0c;并且按照角色详细拆解了家政预约小程序的各个用例。在分析阶段思考的越多&#xff0c;沟通的越多&#xff0c;在系…