| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32学习笔记(CubeMX配HAL)(第五天:串口通信) -> 正文阅读 |
|
[嵌入式]STM32学习笔记(CubeMX配HAL)(第五天:串口通信) |
今天要开始学习串口数据的一个收和发 很多单片机存在多个串口收发,比如wifi开发等,都需要通过串口来进行数据交互。 首先需要了解下并行通信和串行通信:这两种方式大多都是用来外部和微处理器进行通信的主要方式。 其中,并行就是传输速度块,但是占用资源大,需要引脚比较多 ??????串行的话,占用资源和引脚都比较少,但是传输速度比较慢。 接下来看看,串行通信种存在三种模式:单工,半双工,全双工 单工就是:只有一个方向,要么只能发送或者只能接受 半双工:就是可以接收也可以发送,但是不能同时进行。需要调整模式在下一个时间段进行接收或者发送的动作。比较典型的就是RS450这种总线 全双工:就是同时进行,比较牛逼。基本现在都是全双工。 然后看看啥叫异步串行通信:通信双方在没有同步时钟的前提下,将一个字符按位进行传输的通信方式。一般来说没有同步时钟,很难准确接受。这里我们就需要用到一个新的东西。叫做波特率、只要波特率相同,就可以进行传输了。 比特率:每秒传输的二进制数,单位是BPS。 TTL----->RS232:由TTL到电脑的串口,就需要MAX3232或者SP3232来达到波特率相同。 串口------->USB接口:CH340或者CP2012来进行波特率转换。 STM32一般用的都是由UASRT的,不过一般使用异步串行通信。 比如USART1_TX和PA9复用 ????????USART1_RX与PA10复用 USART2_TX和PA2复用 ????????USART2_RX与PA3复用 当然这玩意儿看你的芯片手册是咋安排的具体。 首先对于HAL库里的串口函数需要率先认识一些:
为啥叫阻塞式发送函数呢?就是说发送完,函数才执行完,不然单片机只能执行这个函数,无法干其他事情。所以说虽然逻辑上比较方便,但是应用上其实不太有优势。 接下来看一下非阻塞式的发送函数
这个函数是自带发送中断的,首先同样的也需要使能发送中断的,然后数据完成后又进行回调。就可以做些其他事儿了。 一般来说,上述发送完毕之后,就需要用到回调函数 一个是:
那么接下来,我们就来举个例子 使用非阻塞式的串口发送函数,将数组的前五个数据发送到USART1,在数据发送完成后,翻转LED的输出电平。 那么程序呢大概如下:
如果说是阻塞式的函数,就会很简单
第二种例子就是接受函数: 首先这次就用阻塞式来接受:
?第二种是非阻塞式的(一般来说都是用非阻塞式的):
发送完毕后呢需要调用中断回调函数:
同样的举个例子: 使用非阻塞式的串口接受USART中的一个字节,保存在dat_Rxd变量中,在数据发送完成后,若该字节为0x5A,则翻转LED输出电平。
那么接下来就是CubeMX的一个设置 ?首先对USART1中断使能 ?接着把波特率改成9600(常用) 然后设置两个LED的OUTPUT大致就可以了,然后生成代码 打开后可以看见代码中多了新的.c文件和一些新的初始化函数。 ?我们打开usart.c看一下 CubeMX已经把我们需要配置的具体参数,在USART1的初始化函数中配置了。 那么接下来,我们需要完成一下一些比较简单的应用 第一个是向串口1发送“hello world” 其次分别需要发送接收数据。同时提示LED1 OPEN之类的; ? 用uint8_t来定义一下数组和缓冲区。 然后就开始写阻塞式(非阻塞式)的串口发送函数。 ?写好之后用串口助手试验一下。 ? 那么这是发送,接下来就需要进行一个接收的功能 首先为了方便,把LED的开关,定义成宏定义的形式,这样会比较的简便, 然后定义一个接收的数据;? ?接下来同样的,使用Receive函数,然后再启用回调,就是我们上面所提到的步骤。 ?回调函数乐意直接找到然后自己进行更改; ? 一定要记住需要再if里面添加再一次的HAL_UART_Receive_IT(&huart1,&Rx__dat,1); 不然只会接受一次!!! 最后进行调试,就非常简单了。 ? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:35:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |