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…

Python----网络爬虫

目录 1.Robots排除协议 2.request库的使用 3.beautifulsoup4库的使用 Python网络爬虫应用一般分为两部: (1)通过网络连接获取网页内容 (2)对获得的网页内容进行处理 - 这两个步骤分别使用不同的函数库:requests …

[Shell]获取Linux操作系统的发行版本

Linux命令uname -a输出分割成数组 # 将 uname -a 的输出分割成数组 IFS" " read -ra INFO <<< "$(uname -a)"# 打印数组中的各个元素 echo "System Name: ${INFO[0]}" echo "Node Name: ${INFO[1]}" echo "Kernel Vers…

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

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

危机公关之负面信息监测与处置原则

一家成功的企业不是没有人说它不好&#xff0c;而是企业通过公关或营销手段&#xff0c;让正面的声音碾压了负面的声音。小马识途建议企业创建之初就注意舆情公关的问题&#xff0c;不了解应该如何压制舆情负面信息的企业可以参考下面的几点建议。 1. 及时监测、观察、掌握和研…

C#有像Java ThreadLocal的类似实现吗?

在C#中&#xff0c;可以使用ThreadLocal<T>类来实现类似于Java中ThreadLocal的功能。ThreadLocal<T>类是.NET Framework提供的一个线程本地存储类&#xff0c;用于在每个线程中存储和访问特定于该线程的数据。 ThreadLocal<T>类允许每个线程都有自己独立的实…

Docker Image(镜像)——5

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

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

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

ScyllaDB 基础入门

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

解决分布式React前端在本地开发环境的跨域问题

原创/朱季谦 在前后端分离的分布式架构中&#xff0c;跨域是一道无法绕过去的门槛&#xff0c;众所周知&#xff0c;生产环境上解决跨域最便捷的方式是使用Nginx来处理&#xff0c;那么&#xff0c;在本地开发环境又该如何处理呢&#xff1f; React框架里处理跨域问题&#xff…

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

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

Vue 与 React

注&#xff1a;本文提到的vue代指vue3 react规则更少&#xff0c;Vue新语法更多&#xff0c;规则更多 React性能比Vue更高&#xff1f; Vue监听状态更改更方便&#xff0c;并且有v-model双向绑定 Vue思维符合传统前端开发&#xff0c;React需要函数式思维 Vue国内多&#…

ElasticSearch之Clone index API

使用已有的索引&#xff0c;复制得到一个索引。 关闭testindex_001的写入操作&#xff0c;命令样例如下&#xff1a; curl -X PUT "https://localhost:9200/testindex_001/_settings?pretty" -H Content-Type: application/json -d {"settings": {"…

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

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

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

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

SCAU:数的整除

数的整除 Time Limit:1000MS Memory Limit:65536K 题型: 编程题 语言: G;GCC 描述 由键盘输入5个整数&#xff0c;逐个判断它们能否被27整除&#xff0c;能的输出“YES”&#xff0c;不能的输出“NO”&#xff08;注意&#xff0c;输出时&#xff0c;一个判断结果占一行&…

Android开发,JNI开发项目创建

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

【SpringBoot】SpringBoot配置Swagger

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

shell命令编写

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