USART的PAL库编程

USART驱动的工作原理

在这里插入图片描述
总结一下我们之前使用中断的方式来进行数据的发送和接收 如果收到数据数据在RDR寄存器中 RXNE标志位就从0到1触发中断 进入中断服务函数 把数据缓存在队列中 然后在到进程函数中断接收数据函数中进行出队处理
发送数据就是把中断关闭(标志位TXE的寄存器TDR为空的时候为1会误触发中断所以要关闭)要发送的数据进行入队然后打开中断 IDR寄存器中还是没数据
然后标志位TXE为1触发中断 进入中断服务函数把数据出队 逐个发送

USART驱动的具体使用方法

驱动概述
在这里插入图片描述
PAL库初始化USART
在这里插入图片描述
因为数据发送和数据的接收都是共同用一个中断源
所以只需要设置一个优先级分组和子优先级和抢占优先级
发送缓冲区和接收缓冲区
在这里插入图片描述
因为我们是使用中断的方式发送和接收数据的 PAL库中 所以要把数据缓存在队列中也就是缓冲区 但是这个队列不能太长因为队列占用的是RAM 芯片的RAM收到限制
PAL库函数的初始化

	hUSART1.Init.USARTx = USART1;hUSART1.Init.BaudRate = 9600;hUSART1.Init.USART_WordLength = USART_WordLength_8b;hUSART1.Init.USART_StopBits = USART_StopBits_1;hUSART1.Init.USART_Parity = USART_Parity_No;hUSART1.Init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;hUSART1.Init.USART_IRQ_PreemptionPriority = 0;hUSART1.Init.USART_IRQ_SubPriority = 0;hUSART1.Init.TxBufferSize = 128;//缓冲区的长度hUSART1.Init.RxBufferSize = 128;//缓冲区的长度hUSART1.Init.Advanced.Remap = 1;//启用复用功能 AFIOhUSART1.Init.Advanced.LineSeparator = LineSeparator_CRLF; // \r\nPAL_USART_Init(&hUSART1);

编写PAL库的中断服务函数
在这里插入图片描述
具体代码

void USART1_IRQHandler(void)
{PAL_USART_IRQHandler(&hUSART1);
}

数据的发送
在这里插入图片描述
数据的接收
在这里插入图片描述
time out (超时值)在这里插入图片描述如果在调用这个函数接口 对应传入的的TIME out值就如上图所示
数据的接收
在这里插入图片描述

PAL_USART_ReadLine 在使用这个函数接口之前先要设置行分隔符的方式 行分隔符就是\r \r\n 等多种分隔行 在初始化的时候调用高级参数
在这里插入图片描述
char strBuffer[64];设置为64即可

#include "stm32f10x.h"
#include "stm32f10x_pal.h"
#include "stm32f10x_pal_usart.h"static PalUSART_HandleTypeDef hUSART1;//声明句柄int main(void)
{PAL_Init();hUSART1.Init.USARTx = USART1;hUSART1.Init.BaudRate = 9600;hUSART1.Init.USART_WordLength = USART_WordLength_8b;hUSART1.Init.USART_StopBits = USART_StopBits_1;hUSART1.Init.USART_Parity = USART_Parity_No;hUSART1.Init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;hUSART1.Init.USART_IRQ_PreemptionPriority = 0;hUSART1.Init.USART_IRQ_SubPriority = 0;hUSART1.Init.TxBufferSize = 128;//缓冲区的长度hUSART1.Init.RxBufferSize = 128;//缓冲区的长度hUSART1.Init.Advanced.Remap = 1;//启用复用功能 AFIOhUSART1.Init.Advanced.LineSeparator = LineSeparator_CRLF; // \r\nPAL_USART_Init(&hUSART1);//	// 1. 发送单个字节 0x5a
//	PAL_USART_SendByte(&hUSART1, 0x5a);//	// 2. 发送字节数组 01 02 03 04 05
//	const uint8_t a[] = {1,2,3,4,5};
//	
//	PAL_USART_SendBytes(&hUSART1, a, sizeof(a)/sizeof(uint8_t));//  // 3. 发送单个字符 H
//	PAL_USART_PutChar(&hUSART1, 'H');//  // 4. 发送字符串Hello world\r\n
//	PAL_USART_SendString(&hUSART1, "Hello world\r\n");//	// 5. 发送格式化字符串
//	const char *name = "Tom";
//	uint32_t age = 18;
//	float height = 173.5;
//	
//	PAL_USART_Printf(&hUSART1, "\r\nName:%s\r\nAge:%d\r\nHeight:%.1fcm\r\n", name, age, height);
//	//  // 1. 接收单个字节
//	PAL_USART_SendString(&hUSART1, "Receive single byte...");
//	uint8_t byteRcvd;
//	byteRcvd = PAL_USART_ReceiveByte(&hUSART1, PAL_MAX_DELAY);
//	PAL_USART_Printf(&hUSART1, "Byte received: 0x%02x\r\n", byteRcvd);//  // 2. 接收5个字节
//	PAL_USART_SendString(&hUSART1, "Receive 5 bytes ...");
//	
//	uint8_t a[5];
//	PAL_USART_ReceiveBytes(&hUSART1, a, 5, PAL_MAX_DELAY);
//	
//	PAL_USART_Printf(&hUSART1, "5 bytes received: %02x %02x %02x %02x %02x", a[0], a[1], a[2], a[3], a[4]);// 3. 接收一行字符串PAL_USART_SendString(&hUSART1, "Receive a line ...\r\n");char strBuffer[64];PAL_USART_ReadLine(&hUSART1, strBuffer, sizeof(strBuffer) / sizeof(char), PAL_MAX_DELAY);PAL_USART_Printf(&hUSART1, "Line received: %s\r\n", strBuffer);while(1){}
}void USART1_IRQHandler(void)
{PAL_USART_IRQHandler(&hUSART1);
}

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

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

相关文章

日志模块Loguru

安装 Loguru 仅支持 Python 3.5 及以上的版本,使用 pip 安装即可: pip install loguru开箱即用 Loguru 的主要概念是只有一个:logger from loguru import loggerlogger.info("This is log info!") logger.warning("This i…

食物相关的深度学习数据集合集—食物、饮料、肉类、餐具等数据集

最近收集了一大波与食物酒水相关的数据集,包含食物、饮料、肉类、餐具等不同等类型的数据集,废话不多说,给大家逐一介绍!! 1、自制啤酒配方数据库 超过20万自制啤酒配方数据库,数据集包含不同精酿啤酒的名…

Docker Image(镜像)——5

目录: Docker 镜像是什么镜像生活案例镜像分层生活案例为什么需要镜像镜像命令详解 镜像命令清单docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker historydocker importdocker image prunedocker build镜像操作案例 查找镜像…

etlbox.3.1.0 for NET 轻量级 ETL数据集成库 Crack

适用于 .NET 的轻量级 ETL(提取、转换、加载)工具箱和数据集成库 高度可定制 厌倦了使用几乎不可能实现复杂需求的用户界面?使用 ETLBox,可以轻松编写适合您独特需求的代码。插入您自己的逻辑或修改现有行为以满足您的特定要求。 …

ScyllaDB 基础入门

简介 ScyllaDB 是一种开源的 NoSQL 数据库,它提供了高性能、低延迟的数据处理能力,同时保持了与 Apache Cassandra 高度的兼容性。ScyllaDB 使用了一种名为 “Seastar” 的高效并行编程框架,并采用了 C 进行开发,因此它能够充分利…

基于ssm Vue的戒烟网站源码和论文

基于ssm Vue的戒烟网站源码和论文734 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 开发技术 ssm 摘要 随着互联网的高速发展,线上管理成为当代人们管理事物的重要手段之一&#xff…

numpy知识库:基于numpy绘制灰度直方图

前言 对于灰度图像而言,灰度直方图可以统计灰度图像内各个灰度级出现的次数。 灰度直方图的横坐标是灰度图像中各像素点的灰度级。灰度的数值范围为[0, 255]。因此,如果将图像分为256个灰度级,那么每个灰度级唯一对应一个灰度;如…

流媒体方案之Nginx——实现物联网视频监控项目

目录 前言 一、Nginx是什么 二、Nginx在流媒体方案中的位置​编辑 三、软硬件准备 四、移植编译Nginx 五、运行Ngnix 六、测试流媒体方案 七、浏览器播放 前言 最近想做一个安防相关的项目,所以跟着韦东山老师的视频来学习视频监控方案的相关知识&#xff0…

lv11 嵌入式开发 ADC 16

目录 1 ADC 简介 2 Exynos4412下的ADC控制器 2.1 总览 2.2 特征 2.3 ADC转换时间 2.4 IO口 ​编辑3 ADC寄存器详解 3.1 寄存器介绍 3.2 ADCCON控制寄存器 3.3 ADCDAT 3.4 CLRINTADC 3.5 ADCMUX ​编辑 4 ADC编程 1 ADC 简介 ADC(Analog to Digital Converter)即…

Android开发,JNI开发项目创建

文章目录 Android开发,JNI开发项目创建1.jni是什么 Android开发,JNI开发项目创建 创建工程 1.jni是什么 使得java可以访问底层c语言,java本地化接口,是桥梁。 运行下我们的项目 出现这个就是我们的JNI开发环境已经配置好了 是…

【SpringBoot】SpringBoot配置Swagger

文章目录 前言配置步骤使用步骤总结 前言 使用Swagger只需要按照规范去定义接口及接口的相关信息,就可以做到生成接口文档和在线接口调试页面 官网:Swagger官网 Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案 配置步骤 1.导入knife4j的m…

shell命令编写

1. 1 #!/bin/bash 2 3 directory_path"/txh"4 5 # 使用 find 命令查找指定路径下的文件,并使用 wc 命令统计行数(即文件个数)6 7 file_count$(find "directory_path" -type f | wc -l)8 9 10 echo "在路径$director…

网工学习5 交换机端口相关配置

交换机的接口属性默认支待一般网络环境,一般情况下是不需要对其接口进行设置的。在某些情况下需 要对其端口属性进行配置时,配置的对象主要有接口隔离、速率、双工等信息。 5.1 接口隔离设置 > 配置接口 GE0/0/1 和 GE0/0/2 的接口隔离功能&#xf…

Leetcode1094. 拼车

Every day a Leetcode 题目来源:1094. 拼车 解法1:差分数组 对于本题,设 a[i] 表示车行驶到位置 i 时车上的人数。我们需要判断是否所有 a[i] 都不超过 capacity。 trips[i] 相当于把 a 中下标从 fromi 到 toi−1 的数都增加 numPassenge…

【ArcGIS Pro微课1000例】0045:深度学习--车牌模糊

借助ArcGIS Pro提供的车牌模糊训练模型,可以很方便实现车牌模糊。 文章目录 一、车牌模糊对比二、工具介绍三、案例实现一、车牌模糊对比 车牌模糊前: 车牌模糊后: 二、工具介绍 本功能使用的依然是ArcGIS Pro提供的深度学习工具中的使用深度学习分类像素(Classify Pixel…

JavaScript基础知识20——循环结构:退出循环

哈喽,大家好,我是雷工! 最近一段时间没学习JavaScript,今天看数字孪生的资料,发现很多低代码开发还是得必须熟悉JavaScript才行,为了以后方便搞数字孪生,有时间还是继续学习下JavaScript。 以下…

如何开启Windows Server 2016 远端桌面

使用GUI 设定 服务器管理器–> 本地服务器–> 远端桌面 启用远端桌面 远端–> 允许远端连线至此电脑 会提示防火墙设定跟电源设定 防火墙之前已经关闭了 完成

matlab 多目标粒子群优化算法MOPSO

1、内容简介 略 21-可以交流、咨询、答疑 多目标、粒子群 2、内容说明 多目标粒子群优化算法MOPSO 3、仿真分析 略 %% Problem Definition TestProblem3; % Set to 1, 2, or 3 switch TestProblem case 1 CostFunction(x) MyCost1(x); nVar5; …

数据库管理-第120期 初探Halo数据库(202301201)

数据库管理-第120期 初探Halo数据库(202301201) 12月份正好也是第120期,新的一篇文章,尝试一条新的路线。其实吧,Halo(羲和)这个数据库我较早时间就听说过(早于今年DTCC&#xff0c…

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标) 目录 时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)预测效果基本介绍环境准备程序设计参考资料预测效果 基本介绍 LSTM是一种递归神经网络(RNN)的变体