3.7号freeRtoS

news2024/9/23 23:28:26

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)中编写功能代码,此时当接收数据后搁一段时间没有数据继续出现,则执行回调函数。

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

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

相关文章

LiveNVR监控流媒体Onvif/RTSP功能-视频广场点击在线或离线时展示状态记录快速查看通道离线原因

LiveNVR视频广场点击在线或离线时展示状态记录快速查看通道离线原因 1、状态记录1.1、点击在线查看1.2、点击离线查看 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、状态记录 1.1、点击在线查看 可以点击视频广场页面中, 在线 两个字查看状态记录 1.2、点击离线查…

学习笔记—功能测试的基础认知

除了测试工作之外,其他流程并行 优点: 软件测试出测试执行外,还有很多工作 软件测试完全独立,其他流程并发进行 具有很强的灵活性 缺点: 管理型要求高 技能要求高 测试就绪点分析困难 测试用例的定义 测试用例…

Java List集合取交集的八种不同实现方式

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在Java中,取两个List集合的交集可以通过多种方式实现,包括使用Java 8的Stream API、传统的for循环遍历、使…

DeepLearning in Pytorch|我的第一个NN-共享单车预测

目录 概要 一、数据准备 导入数据 数据可视化 二、设计神经网络 版本一 版本二(正片) 三、测试 小结 概要 我的第一个深度学习神经网络模型---利用Pytorch设计人工神经网络对某地区租赁单车的使用情况进行预测 输入节点为1个,隐含…

安装及管理docker

文章目录 1.Docker介绍2.Docker安装3.免sudo设置4. 使用docker命令5.Images6.运行docker容器7. 管理docker容器8.创建image9.Push Image 1.Docker介绍 Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机&#…

PyTorch基础(20)-- torch.gt() / torch.ge() / torch.le() / torch.lt()方法

一、前言 嗯……最近遇到的奇奇怪怪的方法很多了,学无止境啊!学不完啊,根本学不完!本篇文章介绍四个方法:torch.gt()、torch.ge()、torch.le()和torch.lt()方法,由于这四个方法很相似,所以放到…

灯塔:CSS笔记(2)

一 选择器进阶 后代选择器:空格 作用:根据HTML标签的嵌套关系,,选择父元素 后代中满足条件的元素 选择器语法:选择器1 选择器2{ css } 结果: *在选择器1所找到标签的后代(儿子 孙子 重孙子…

Docker常见命令使用

Docker命令是使用Docker的基础。这里记录下Docker日常运维过程中经常使用到的一些命令,更全面的命令还请参考Docker官网。 docker用法概述 Docker命令可以通过CLI工具实现与服务器的交互。Docker命令的语法如下: docker [DOCKER-COMMAND] [OPTIONS] […

【高效开发工具系列】Windows 系统下将 Windows 键盘的 ctrl 和 alt 互换

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

vscode 配置opengl (glut), lib链接可参考

这里假定你已经配置好基础的vscode c环境 json介绍 这里其实主要配置的3种json, vscode其实就是通过launch.json和tasks.json来自动生成指令的 launch.json 这个用于启动程序用的,但是由于其可以指定preLaunchTask-即在启动之前需要做什么事情,所以这…

【面试精讲】Java动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别?

Java动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别? 目录 一、Java动态代理的实现 1、使用JDK Proxy实现动态代理 2、使用CGLib实现动态代理 二、JDK Proxy 与 CGLib 的区别 三、Spring中的动态代理 四、 Lombok代理原理 总结 前言 本文…

做跨境电商,选哪个浏览器好?跨境电商浏览器推荐

在我们的日常生活中,有很多浏览器可供选择,比如百度浏览器、谷歌浏览器和360、火狐等等。但是在跨境电商行业中,是否有特别适合我们卖家使用的浏览器呢?所谓跨境电商浏览器,就是为跨境电商用户设计的浏览器&#xff0c…

【LeetCode 算法专题突破】---二分查找(⭐⭐⭐)

前言 我在算法题目的海洋中畅游已久,也曾在算法竞赛中荣获佳绩。然而,我发现自己对于算法的学习,还缺乏一个系统性的总结和归类。尽管我已经涉猎过不少算法类型,但心中仍旧觉得有所欠缺,未能形成完整的算法体系。 因…

官方阴阳怪气?双标?《Nature》专访《中科院预警名单》,中国作者为何炸裂?

毕业推荐 SCIE: • 计算机类,6.5-7.0,JCR1区,中科院2区 • 2个月19天录用,6天见刊,36天检索 SCI&EI(CCF-C类) • 算法类,2.0-3.0,JCR3区&#xff0c…

Springboot+vue的养老院管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的养老院管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的养老院管理系统,采用M(model)V&…

SpringBoot 多平台文件配置

目录 一 主配置文件和辅配置文件 二 具体使用 1. 通过直接修改 application.yml 中的属性值 2. 通过 maven 进行配置修改 当我们需要部署项目的时候, 肯定会遇到不同的部署环境下, 需要有不同的配置. 例如开发环境下和生产环境下的配置肯定就不会是完全相同的, 如数据库的…

pytorch 批量归一化BatchNorm的BatchNorm1d和BatchNorm2d理解

BatchNorm即批量归一化,是深度学习中经常用到的加速神经网络训练,加速收敛速度及稳定性的算法,是神经网络训练必不可少的一部分。 BatchNorm作用:在进行批量训练过程中,每个batch具有不同的分布,使数据分布…

图片二维码不限扫码次数怎么做?长期有效的图片二维码在线生成技巧

图片制作二维码能长期使用吗?在生活中很多地方都可以看到很多存有图片的二维码,通过扫码后查看图片内容,比如一些公共场所、产品介绍、景区等场所中都有图片转二维码的应用。那么怎么做出可以长期扫码展示图片二维码呢,其实方法很…

CSS 弹性盒子模型

它主要是在一个大的容器当中里面子元素的一个设置。一个大的盒子里面里面的子元素如何摆放由我们的弹性盒子说的算。 之前的盒子模型是一个元素,内边距外边距,边框来调整在页面所显示的位置。 弹性盒子,在大容器里面,里面有很多…

基于C++的配置文件解析器/编码器——toml库

在平常的软件开发过程中,配置文件是重要的一环,使用配置文件在软件开发过程中具有以下好处和必要性: 灵活性:配置文件允许在不修改代码的情况下更改应用程序的行为,通过修改配置文件,可以调整应用程序的参…