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

3.7号freeRtoS

1. 串口通信

配置串口为异步通信

设置波特率,数据位,校验位,停止位,数据的方向

同步通信

在同步通信中,数据的传输是在发送端和接收端之间通过一个共享的时钟信号进行同步的。这意味着发送端和接收端的时钟需要保持同步,以确保数据在正确的时间传输。在同步通信中,数据被划分成等长的块,并且在每个时钟周期内传输一个完整的数据块。因此,发送方和接收方需要严格按照时钟信号的节奏进行数据的发送和接收。

异步通信

在异步通信中,数据的传输是通过一组起始和停止信号来确定的,而不是通过共享的时钟信号。每个数据块都有一个起始位和一个或多个停止位,用于确定数据的开始和结束。异步通信中,发送端和接收端的时钟不需要保持同步,因此可以更灵活地处理速度不同步的情况。

区别

时钟同步:在同步通信中,发送端和接收端需要共享一个时钟信号以同步数据传输;而在异步通信中,时钟信号不是必需的,数据的传输通过起始和停止信号来确定。

速度区别:

同步通信速度:同步通信的速度受制于时钟信号的频率,因为数据的传输是根据时钟信号进行同步的。发送端和接收端需要以相同的时钟频率进行数据传输,因此速度受限于这一频率。

异步通信速度:相比之下,异步通信的速度没有受到严格的时钟同步的限制。由于数据的传输是通过起始和停止信号来确定的,因此发送端和接收端可以以不同的速度进行数据传输。这意味着异步通信可以更灵活地处理速度不同步的情况,因此在某些情况下可能会比同步通信更快。

灵活性:由于不需要时钟同步,异步通信更灵活,能够处理速度不同步的情况;而同步通信需要发送端和接收端保持严格的时钟同步,因此在处理速度不同步的情况下可能会出现问题。

串口发送数据

函数:

UART:串口异步发送(A:异步)

USART:串口的同步和异步发送(S:同步)

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)

UART_HandleTypeDef *huart:指定要使用的串口

const uint8_t *pData:要发送的数据(typedef unsigned char uint8_t;)

uint16_t Size:要发送数据的大小

uint32_t Timeout:超时时间,单位是ms,1000ms

HAL_StatusTypeDef:数据是否成功发送

串口重定向

串口重定向就是将串口的功能重新定向到标准输入或者是标准输出当中。

在stm32cube中配置

在usart.c中包含头文件,并编写函数

//重新实现fputc的功能
int fputc(int ch, FILE* f)
{
    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 1000);
    return ch;
}

调用printf会调用到fputc,所以我们只需要将fputc重新实现就可以实现使用printf来向电脑打印数据的功能。

串口接收数据

打开串口接收中断

当接收到数据后就会调用到接收中断回调函数

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

UART_HandleTypeDef *huart:指定要接收数据的串口

uint8_t *pData:数据缓冲区用来保存数据

uint16_t Size:每次要接收多少字节数据

HAL_StatusTypeDef:是否成功打开接收中断

串口接收中断回调函数:

__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

}

注意事项:每次接收完数据后都需要重新打开接收中断。

2. DMA

在嵌入式系统中,DMA(Direct Memory Access,直接内存访问)也是一种重要的技术,用于实现外部设备和系统内存之间的高效数据传输,从而减轻CPU的负担,提高系统性能。在嵌入式系统中,由于资源有限、对功耗和性能要求较高,因此DMA技术显得尤为重要。通过DMA技术,嵌入式系统可以更高效地进行数据传输和处理,从而满足各种应用场景的需求。

DMA的优点:

1.使用DMA可以减轻CPU负担提高系统的运行效率

2.使用DMA可以快速传输数据(像音频,视频等数据量较大的数据)

配置DMA传输数据

传输函数

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)

注意:不需要超时时间了,因为CPU得到了释放,不需要一直等待将数据发送完成,这个工作交给了DMA

空闲中断+DMA处理不定长数据

CPU不知道外部什么时候会发来数据,可以开启DMA接收,让DMA一直监测是否有数据,当有数据并且接收完一包数据就产生空闲中断处理数据。

开启DMA接收

以DMA+空闲中断的方式接收数据的函数

HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

UART_HandleTypeDef *huart:指定从哪个串口接收数据

uint8_t *pData:数据保存的缓冲区

uint16_t Size:要接收数据的大小

HAL_StatusTypeDef:是否成功开启

空闲中断回调函数

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)

{

}

3. ADC采样

ADC是一种将模拟信号转换为数字信号的一种器件或者是电路。

STM32Cubemx配置ADC采样

开启ADC采样函数

HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)

HAL_StatusTypeDef:是否成功打开

ADC_HandleTypeDef* hadc:指定要打开哪个ADC

获取采样数值

uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)

ADC_HandleTypeDef* hadc:要对哪个ADC进行采样

uint32_t:代表采样到的数据

4. PWM

PWM是脉宽调制(Pulse Width Modulation)的缩写。它是一种通过控制信号的脉冲宽度来产生模拟效果的技术。PWM信号由一系列周期性的脉冲组成,每个脉冲的宽度可以调整,从而改变其平均功率或能量。

PWM信号常用于控制电机速度、LED亮度调节、音频信号合成等应用中。例如,在电机驱动器中,通过调整PWM信号的脉冲宽度,可以控制电机的转速;在LED调光控制中,通过调整PWM信号的脉冲宽度,可以实现LED的亮度调节。

打开定时器的PWM通道

函数

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

TIM_HandleTypeDef *htim:指定要打开的定时器

uint32_t Channel:指定要打开的通道

HAL_StatusTypeDef:是否打开成功

作业

1.

2.

在stmcubemx开启DMA接收

使用函数HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)以空闲中断的方式接收数据

在回调函数void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)中编写功能代码,此时当接收数据后搁一段时间没有数据继续出现,则执行回调函数。

相关文章:

3.7号freeRtoS

1. 串口通信 配置串口为异步通信 设置波特率,数据位,校验位,停止位,数据的方向 同步通信 在同步通信中,数据的传输是在发送端和接收端之间通过一个共享的时钟信号进行同步的。这意味着发送端和接收端的时钟需要保持…...

瑞芯微 | I2S-音频基础 -1

最近调试音频驱动,顺便整理学习了一下i2s、alsa相关知识,整理成了几篇文章,后续会陆续更新。 喜欢嵌入式、Li怒晓得老铁可以关注一口君账号。 1. 音频常用术语 名称含义ADC(Analog to Digit Conversion)模拟信号转换…...

Linux配置.bashrc文件导致各种命令(vim、sudo)失效。

Linux配置.bashrc文件导致各种命令(vim、sudo)失效。 起因是 nvcc-V一直报错:-bash:nvcc: command not found 踩坑记录:上网一查说是没有配置cuda的环境变量。于是去修改了bashrc文件,在最下面…...

Visual Studio 2022 Version 17.9 新功能

Visual Studio 2022 v17.9 为广大 C 开发者引入了一系列好用的新功能和改进优化。 内存布局 现在,你可以使用【内存布局,Memory Layout】功能以可视化的方式来查看对象,结构体及联合体的内存布局信息,这可比以前需要手动查看内存…...

ArrayList 和 LinkedList 的区别

ArrayList ArrayList 是基于动态数组实现的, 它使用一块连续的内存空间来存储元素,因此访问元素的速度非常快(时间复杂度为 O(1)), 但是,在插入或删除元素时,如果位置不在数组末尾&#xff0…...

VGG16-CF-VGG11实验报告

说明:VGG16和CF-VGG11是论文《A 3D Fluorescence Classification and Component Prediction Method Based on VGG Convolutional Neural Network and PARAFAC Analysis Method》使用的两种主要模型。其对应代码仓库提供了实验使用的数据集、平行因子分析结果和CNN模型。论文和…...

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…...

uniapp使用华为云OBS进行上传

前言:无论是使用华为云还是阿里云,使用其产品的时候必须阅读文档 1、以华为云为例,刚接触此功能肯定是无从下手的情况,那么我们需要思考,我们使用该产品所用到的文档是什么 2、我们要使用obs 文件上传,肯…...

用一个 Python 脚本实现依次运行其他多个带 argparse 命令行参数的 .py 文件

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 问题描述:在 Windows 环境中,您希望通过一个 Python 脚本来实现特定的自动化任务,该任务需要依次运行其他多个带 argparse 命令行参数的 .py 文件。您希望找到一种简…...

力扣热题100_普通数组_189_轮转数组

文章目录 题目链接解题思路解题代码 题目链接 189. 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] …...

讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so

1.需求 最近linux下的Qt项目中要连接oracle数据库,用户需要我们访问他们的oracle数据库,查询数据 2.遇到的问题 qt连接oracle数据库需要oracle的驱动库libqsqloci.so插件,需要编译下,之前没有编译过,看了网上的…...

SpringCloud Ribbon 负载均衡服务调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第三篇,即介绍 Ribbon 负载均衡服务调用 二、概述 2.1 Ribbon 是什么 Spring Cloud Ribbon…...

物联网在智慧城市建设中的关键作用:连接、感知、智能响应

一、引言 随着信息技术的飞速发展,物联网(IoT)技术已经渗透到我们生活的方方面面,特别是在智慧城市建设中发挥着至关重要的作用。智慧城市是指通过运用先进的信息和通信技术,实现城市基础设施、公共服务、交通管理、环…...

安卓7原生相机切到视频崩溃

目录 1、查看日志 2、分析日志、提取重点 3、寻找解决方法 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识https://blog.csdn.net/qq_40715266?typeblog 1、查看日志 由于安…...

构建信息蓝图:概念模型与E-R图的技术解析

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…...

docker拉取镜像失败的解决方案大全

更换国内源 创建或修改 /etc/docker/daemon.json 文件,修改: {"registry-mirrors" : ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https:…...

Axure Cloud如何给每个原型配置私有域名

需求 在原型发布之后,自动给原型生成一个独立访问的域名,类似http://u591bi.axshare.bushrose.cn,应该如何配置呢? 准备事项 已备案域名 如何备案?阿里云备案流程 已安装部署Axure Cloud 如何安装部署,请…...

语音模块学习——LSYT201B模组(实际操作篇)

目录 一、定制词条 二、直接用串口通信 三、使用单片机通信 理论篇在这,依旧是深圳雷龙发展的语音模块。 http://t.csdnimg.cn/2SzJL 一、定制词条 因为我想后面加到我的毕设上加个语音模块,所以定制的词条都是和芯测相关的。 动作词条播报串口输…...

Android应用界面

概述:由于学校原因,估计会考,曹某人就浅学一下。 目录 View概念 创建和使用布局文件 相对布局 线性布局 水平线性布局 垂直线性布局 表格布局 帧布局 扁平化布局 Android控件详解 AdapterView及其子类 View概念 安卓中的View是所…...

生活的色彩--爱摸鱼的美工(17)

题记 生活不如意事十之八九, 恶人成佛只需放下屠刀,善人想要成佛却要经理九九八十一难。而且历经磨难成佛的几率也很小,因为名额有限。 天地不仁以万物为刍狗! 小美工记录生活,记录绘画演变过程的一天。 厨房 食…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...